Previous 199869 Revisions Next

r31531 Wednesday 6th August, 2014 at 20:00:48 UTC by James Wallace
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.
[src/mame]mame.lst
[src/mame/drivers]bfm_sc1.c cops.c
[src/mame/layout]cops.lay sc1_vfd.lay

trunk/src/mame/layout/sc1_vfd.lay
r31530r31531
2020   </led14segsc>
2121   </element>
2222
23   <view name="VFD and Lamp Matrix">
23   <element name="Steppers" defstate="0">
24      <simplecounter maxstate="999" digits="3">
25      <color red="1.0" green="1.0" blue="1.0" />
26      <bounds x="0" y="0" width="1" height="1" />
27      </simplecounter>
28   </element>
29
30   <view name="VFD, Reels and Lamp Matrix">
31      <backdrop name="reel1" element="Steppers" state="0">
32         <bounds x="10" y="320" width="50" height="50"/>
33      </backdrop>
34      <backdrop name="reel2" element="Steppers" state="0">
35         <bounds x="60" y="320" width="50" height="50"/>
36      </backdrop>
37      <backdrop name="reel3" element="Steppers" state="0">
38         <bounds x="110" y="320" width="50" height="50"/>
39      </backdrop>
40      <backdrop name="reel4" element="Steppers" state="0">
41         <bounds x="160" y="320" width="50" height="50"/>
42      </backdrop>
43      <backdrop name="reel5" element="Steppers" state="0">
44         <bounds x="220" y="320" width="50" height="50"/>
45      </backdrop>
46      <backdrop name="reel6" element="Steppers" state="0">
47         <bounds x="280" y="320" width="50" height="50"/>
48      </backdrop>
49
2450      <backdrop name="lamp0" element="matrixlamp" state="0">
2551         <bounds x="0" y="0" width="7" height="7"/>
2652      </backdrop>
trunk/src/mame/layout/cops.lay
r31530r31531
11<?xml version="1.0"?>
22<mamelayout version="2">
33   <element name="led">
4   <led16segsc>
4   <led14segsc>
55         <color red="1" green="0" blue="0" />
6   </led16segsc>
6   </led14segsc>
77   </element>
8
98   <view name="cops">
109      <screen index="0">
1110         <bounds left="0" top="0" right="256" bottom="256" />
trunk/src/mame/drivers/cops.c
r31530r31531
11/***************************************************************************
22
3    Atari Games Cops
3    Nova 'LaserMax'/Atari Games Cops
44    (hardware developed by Nova Productions Limited)
5    Preliminary driver by Mariusz Wojcieszek, James Wallace
56
6    Preliminary driver by Mariusz Wojcieszek
7   Cops uses a Sony CD-ROM in addition to the regular setup, purely to play
8   Bad Boys by Inner Circle, so there is muscial accompaniment to areas
9   where the laserdisc audio is muted.
710
11    TODO: There are probably more ROMs for Revelations, the disc contains
12    full data for a picture based memory game called 'Vision Quest'.   
13   
14   LaserMax memory map needs sorting out, Cops uses a subset of what's
15   actually available
16
17    The UK version COPS appears to want to communicate with the LDP in a
18   different way.
819***************************************************************************/
920
1021
1122#include "emu.h"
1223#include "cpu/m6502/m6502.h"
1324#include "machine/6522via.h"
25#include "sound/sn76496.h"
26
1427//#include "machine/mos6551.h"
1528
1629#include "cops.lh"
r31530r31531
2639   cops_state(const machine_config &mconfig, device_type type, const char *tag)
2740      : driver_device(mconfig, type, tag),
2841         m_maincpu(*this, "maincpu"),
42         m_sn(*this, "snsnd"),
2943         m_irq(0)
3044   { }
3145
3246   // devices
3347   required_device<cpu_device> m_maincpu;
48   required_device<sn76489_device> m_sn;
3449
3550   // screen updates
3651   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
r31530r31531
5267   void dacia_receive(UINT8 data);
5368   DECLARE_WRITE8_MEMBER(dacia_w);
5469   DECLARE_READ8_MEMBER(dacia_r);
70   DECLARE_WRITE8_MEMBER(via1_b_w);
71   DECLARE_WRITE8_MEMBER(via1_cb1_w);
5572   DECLARE_WRITE8_MEMBER(cdrom_data_w);
5673   DECLARE_WRITE8_MEMBER(cdrom_ctrl_w);
5774   DECLARE_READ8_MEMBER(cdrom_data_r);
58
75   DECLARE_DRIVER_INIT(cops);
5976   int m_irq;
6077
6178   UINT8 m_lcd_addr_l, m_lcd_addr_h;
r31530r31531
6784   UINT8 m_cdrom_ctrl;
6885   UINT8 m_cdrom_data;
6986
87   UINT8 m_sn_data;
88   UINT8 m_sn_cb1;
89
7090   // LDP-1450
7191   UINT8 m_ld_command_to_send[5];
7292   UINT8 m_ld_command_total_bytes;
r31530r31531
97117
98118UINT32 cops_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
99119{
100   char ledtext[16 + 1];
101   for ( int i = 0; i < 16; i++ )
102   {
103      ledtext[i] = m_maincpu->space(AS_PROGRAM).read_byte(0x64 + i);
104   }
105   ledtext[16] = 0;
106   popmessage("%s",ledtext);
107120   return 0;
108121}
109122
r31530r31531
386399            {
387400               sprintf(output_name, "digit%d", i);
388401               display_data = m_lcd_data_l | (m_lcd_data_h << 8);
389               display_data = BITSWAP16(display_data, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); // todo:
402               display_data = BITSWAP16(display_data, 4, 5, 12, 1, 0, 11, 10, 6, 7, 2, 9, 3, 15, 8, 14, 13);
390403               output_set_value(output_name, display_data);
391404            }
392405         }
r31530r31531
494507   m_maincpu->set_input_line(M6502_IRQ_LINE, m_irq ? ASSERT_LINE : CLEAR_LINE);
495508}
496509
510WRITE8_MEMBER(cops_state::via1_b_w)
511{
512   m_sn_data = BITSWAP8(data,0,1,2,3,4,5,6,7);
513   if (m_sn_cb1)
514   {
515      m_sn->write(space,0,m_sn_data);
516   }
517}
518
519WRITE8_MEMBER(cops_state::via1_cb1_w)
520{
521   m_sn_cb1 = data;
522}
523
497524/*************************************
498525 *
499526 *  VIA 2 (U27)
r31530r31531
534561//  AM_RANGE(0xd004, 0xd007) AM_DEVREADWRITE("acia6551_2", mos6551_device, read, write )
535562   AM_RANGE(0xd000, 0xd007) AM_READWRITE(dacia_r, dacia_w)
536563   AM_RANGE(0xd800, 0xd80f) AM_DEVREADWRITE("via6522_3", via6522_device, read, write)  /* VIA 3 */
537   AM_RANGE(0xe000, 0xffff) AM_ROM AM_REGION("system", 0)
564   AM_RANGE(0xe000, 0xffff) AM_ROMBANK("sysbank1")
538565ADDRESS_MAP_END
539566
540
541567static INPUT_PORTS_START( cops )
542568   PORT_START("SW0")
543569   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Switch A") PORT_CODE(KEYCODE_A) PORT_IMPULSE(1)
r31530r31531
587613{
588614}
589615
616DRIVER_INIT_MEMBER(cops_state,cops)
617{
618   //The hardware is designed and programmed to use multiple system ROM banks, but for some reason it's hardwired to bank 2.
619   //For documentation's sake, here's the init
620   UINT8 *rom = memregion("system")->base();
621   membank("sysbank1")->configure_entries(0, 4, &rom[0x0000], 0x2000);
622   membank("sysbank1")->set_entry(2);
623}
624
590625static MACHINE_CONFIG_START( cops, cops_state )
591626
592627   /* basic machine hardware */
r31530r31531
608643   /* via */
609644   MCFG_DEVICE_ADD("via6522_1", VIA6522, 0)
610645   MCFG_VIA6522_IRQ_HANDLER(WRITELINE(cops_state, via1_irq))
646   MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(cops_state, via1_b_w))
647   MCFG_VIA6522_CB1_HANDLER(WRITE8(cops_state, via1_cb1_w))
611648
612649   MCFG_DEVICE_ADD("via6522_2", VIA6522, 0)
613650   MCFG_VIA6522_IRQ_HANDLER(WRITELINE(cops_state, via2_irq))
r31530r31531
623660
624661   /* sound hardware */
625662   MCFG_SPEAKER_STANDARD_MONO("mono")
663   
664      /* TODO: Verify clock */
665   MCFG_SOUND_ADD("snsnd", SN76489, MAIN_CLOCK/2)
666   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
667
626668MACHINE_CONFIG_END
627669
628670
r31530r31531
640682   ROM_LOAD( "cops_sys.dat", 0x0000, 0x8000, CRC(0060e5d0) SHA1(b8c9f6fde6a315e33fa7946e5d3bb4ea2fbe76a8) )
641683ROM_END
642684
643GAMEL( 1994, cops,  0,   cops,  cops,  driver_device, 0,       ROT0, "Atari Games",      "Cops", GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )
685ROM_START( copsuk )
686   ROM_REGION( 0x8000, "program", 0 )
687   ROM_LOAD( "cops1b_uk.bin", 0x0000, 0x8000, CRC(f095ee95) SHA1(86bb517331d81ae3a8f3b87df67c321013c6aae4) )
688
689   ROM_REGION( 0x8000, "system", 0 )
690   ROM_LOAD( "cops_sys.dat", 0x0000, 0x8000, CRC(0060e5d0) SHA1(b8c9f6fde6a315e33fa7946e5d3bb4ea2fbe76a8) )
691ROM_END
692
693ROM_START( revlatns )
694   ROM_REGION( 0x8000, "program", 0 )
695   ROM_LOAD( "revelations_prog.bin", 0x0000, 0x8000, CRC(5ab41ac3) SHA1(0f7027551da17011576cf077e2f199729bb10482) )
696
697   ROM_REGION( 0x8000, "system", 0 )
698   ROM_LOAD( "revelations_sys.bin", 0x0000, 0x8000, CRC(43e5e3ec) SHA1(fa44b102b5aa7ad2421c575abdc67f1c29f23bc1) )
699ROM_END
700
701
702GAMEL( 1994, cops,     0,   cops,  cops,  cops_state, cops,       ROT0, "Atari Games",                  "Cops (USA)",   GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )
703GAMEL( 1994, copsuk,     cops,cops,  cops,  cops_state, cops,       ROT0, "Nova Productions / Deith Leisure","Cops (UK)",   GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )
704GAMEL( 1994, revlatns,  0,   cops,  cops,  cops_state, cops,       ROT0, "Nova Productions",               "Revelations",    GAME_NOT_WORKING | GAME_NO_SOUND, layout_cops )
trunk/src/mame/drivers/bfm_sc1.c
r31530r31531
214214
215215WRITE8_MEMBER(bfm_sc1_state::bankswitch_w)
216216{
217//  printf("bankswitch %02x\n", data);
218217   membank("bank1")->set_entry(data & 0x03);
219218}
220219
r31530r31531
355354
356355WRITE8_MEMBER(bfm_sc1_state::vfd_w)
357356{
358/*  int changed = m_vfd_latch ^ data;
359
360    m_vfd_latch = data;
361
362    if ( changed )
363    {
364        if ( changed & VFD_RESET )
365        { // vfd reset line changed
366            if ( !(data & VFD_RESET) )
367            { // reset the vfd
368            m_vfd0->reset();
369            }
370        }
371        if ( changed & VFD_CLOCK1 )
372        { // clock line changed
373            if ( !(data & VFD_CLOCK1) && (data & VFD_RESET) )
374            { // new data clocked into vfd
375                m_vfd0->shift_data(data & VFD_DATA );
376            }
377        }
378    }
379*/
380357   m_vfd0->por(data & VFD_RESET);
381358   m_vfd0->data(data & VFD_DATA);
382359   m_vfd0->sclk(data & VFD_CLOCK1);
r31530r31531
10771054   MCFG_CPU_PERIODIC_INT_DRIVER(bfm_sc1_state, timer_irq,  1000)               // generate 1000 IRQ's per second
10781055   MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_MONOSTABLE(120000,100e-9))
10791056
1057   
10801058   MCFG_BFMBD1_ADD("vfd0",0)
10811059   MCFG_SPEAKER_STANDARD_MONO("mono")
10821060   MCFG_SOUND_ADD("aysnd",AY8912, MASTER_CLOCK/4)
trunk/src/mame/mame.lst
r31530r31531
72367236a51site4        //     ??           (c) 1998
72377237a51site4a       // Sept.11,1998     (c) 1998
72387238
7239// Atari Laserdisc
7239// Atari/Nova Laserdisc
72407240cops            // (c) 1994
7241copsuk          // (c) 1994 (Nova/Deith Leisure)
7242revlatns        // (c) 199?
72417243
72427244// SNK / Rock-ola games
72437245sasuke          // [1980] Shin Nihon Kikaku (SNK)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team