Previous 15994 Revisions Next

r7166 Sunday 24th January, 2010 at 21:34:35 UTC by incog
- Added Arcadia clone families with parent/clone relationships for each major family. [incog]
- Refined Arcadia audio with recording/analysis on MPT-03 (PAL UVI chip) [plgDavid]
[src/mess]messdriv.c
[src/mess/audio]arcadia.c
[src/mess/drivers]arcadia.c

src/mess/audio/arcadia.c
r7165r7166
33  PeT mess@utanet.at
44  main part in video/
55
6  Refined with recording/analysis on MPT-03 (PAL UVI chip) by plgDavid
7
8  NTSC UVI sound clock: 15734Hz (arcadia)
9  PAL  UVI sound clock: 15625Hz (Soundic MPT-03 - owned by plgDavid)
610***************************************************************************/
711
812#include "emu.h"
913#include "streams.h"
1014#include "includes/arcadia.h"
1115
16//known UVI audio clocks
17#define UVI_NTSC 15734
18#define UVI_PAL  15625
1219
13#define VOLUME (token->reg[2]&0xf)
14#define ON (!(token->reg[2]&0x10))
20/* we need to create pulse transitions that sound 'decent'
21   with the current mess/mame interp scheme
1522
23  this is not needed anymore with the new trick in streams.c
24*/
1625
26#define OSAMP  1
27
28//lfsr is 9 bits long (and same as Atari TIA pure noise)
29#define LFSR_MASK (1<<8)
30
31//makes alien invaders samples noise sync.
32#define LFSR_INIT 0x00f0
33
34//lfsr states at resynch borders
35//0x01c1
36//0x01e0
37//0x00f0  //good synch
38//0x0178
39//0x01bc
40
41
1742typedef struct _arcadia_sound arcadia_sound;
1843struct _arcadia_sound
1944{
2045    sound_stream *channel;
2146    UINT8 reg[3];
22    int size, pos;
23    unsigned level;
47    int size, pos,tval,nval;
48   unsigned mode, omode;
49   unsigned volume;
50   unsigned lfsr;
2451};
2552
2653
r7165r7166
4067
4168   stream_update(token->channel);
4269   token->reg[offset] = data;
70
71   //logerror("arcadia_sound write:%x=%x\n",offset,data);
72
4373   switch (offset)
4474   {
4575      case 1:
46         token->pos = 0;
47         token->level = TRUE;
48         // frequency 7874/(data+1)
49         token->size = device->machine->sample_rate*((data&0x7f)+1)/7874;
50          break;
76         //as per Gobbler samples:
77         //the freq counter is only applied on the next change in the flip flop
78         token->size = (data & 0x7f)*OSAMP;
79         //logerror("arcadia_sound write: frq:%d\n",data);
80
81         //reset LFSR
82         if(!token->size)
83            token->lfsr = LFSR_INIT;
84      break;
85
86      case 2:
87         token->volume = (data & 0x07) * 0x800;
88         token->mode   = (data & 0x18) >> 3;
89
90         //logerror("arcadia_sound write: vol:%d mode:%d\n",token->volume,token->mode );
91
92         if (token->mode != token->omode){
93            //not 100% sure about this, maybe we should not reset anything
94            //token->pos  = 0;
95            token->tval = 0;
96         }
97         token->omode = token->mode;
98      break;
5199   }
52100}
53101
r7165r7166
66114   for (i = 0; i < samples; i++, buffer++)
67115   {
68116      *buffer = 0;
69      if (token->reg[1] && token->pos <= token->size/2)
70      {
71         *buffer = 0x2ff * VOLUME; // depends on the volume between sound and noise
117
118      //if minimal pitch ?
119      if (token->reg[1]){
120         switch (token->mode){
121            //dont play anything
122            case 0:break;
123
124            //tone only
125            case 1:
126               *buffer = token->volume * token->tval;
127            break;
128
129            //noise only
130            case 2:
131               *buffer = token->volume * token->nval;
132            break;
133
134            //tone AND noise (bitwise and)
135            case 3:
136               *buffer = token->volume * (token->tval & token->nval);
137            break;
138         }
139
140         //counter
141         token->pos++;
142
143         if (token->pos >= token->size){
144
145            //calculate new noise bit (   taps: 0000T000T)
146            unsigned char newBit = token->lfsr & 1;         //first tap
147            newBit = (newBit ^ ((token->lfsr & 0x10)?1:0) );//xor with second tap
148
149            token->nval = token->lfsr & 1; //taking new output from LSB
150            token->lfsr = token->lfsr >> 1;//shifting
151
152            //insert new bit at end position (size-1) (only if non null)
153            if (newBit)
154               token->lfsr |= LFSR_MASK;
155
156            //invert tone
157            token->tval = !token->tval;
158
159            token->pos = 0;
160         }
72161      }
73      if (token->pos <= token->size)
74         token->pos++;
75      if (token->pos > token->size)
76         token->pos = 0;
77162   }
78163}
79164
r7165r7166
86171static DEVICE_START(arcadia_sound)
87172{
88173   arcadia_sound *token = get_token(device);
89    token->channel = stream_create(device, 0, 1, device->machine->sample_rate, 0, arcadia_update);
174    token->channel = stream_create(device, 0, 1, UVI_PAL*OSAMP, 0, arcadia_update);
175    token->lfsr    = LFSR_INIT;
176    token->tval    = 1;
177   logerror("arcadia_sound start\n");
90178}
91179
92180
src/mess/messdriv.c
r7165r7166
183183   DRIVER( sgx )      /* SuperGrafX NEC 1989     */
184184   DRIVER( pcfx )     /* PC-FX NEC 1994      */
185185
186   DRIVER( arcadia )   /* Emerson Arcadia 2001    */
187   DRIVER( vcg )      /* Palladium Video-Computer-Game   */
186   /* Arcadia 2001 family */
187   DRIVER( advsnha )      /* Advision Home Arcade    */
188   DRIVER( bndarc )      /* Bandai Arcadia    */
189   DRIVER( arcadia )      /* Emerson Arcadia 2001    */
190   DRIVER( tccosmos )      /* Tele-Computer Cosmos    */
191   DRIVER( dynavisn )      /* Dynavision    */
192   DRIVER( ekusera )      /* Ekusera    */
193   DRIVER( hanihac )      /* Hanimex Home Arcade Centre    */
194   DRIVER( hmg2650 )      /* Hanimex HMG-2650    */
195   DRIVER( intmpt03 )      /* Intelligent Game MPT-03    */
196   DRIVER( ixl2000 )      /* Intercord XL 2000 System    */
197   DRIVER( intervsn )      /* Intervision 2001    */
198   DRIVER( itmcmtp3 )      /* ITMC MPT-03    */
199   DRIVER( lvision )      /* Leisure-Vision    */
200   DRIVER( leonardo )      /* Leonardo    */
201   DRIVER( mratlus )      /* Mr. Altus Tele Brain    */
202   DRIVER( ormatu )      /* Ormatu 2001   */
203   DRIVER( plldium )      /* Palladium Video-Computer-Game   */
204   DRIVER( polyvcg )      /* Polybrain Video Computer Game   */
205   DRIVER( poppympt )      /* Poppy MPT-03 Tele Computer Spiel   */
206   DRIVER( prestige )      /* Prestige Video Computer Game MPT-03   */
207   DRIVER( rowtrn2k )      /* Rowtron 2000   */
208   DRIVER( tvg2000 )      /* Schmid TVG 2000    */
209   DRIVER( sheenhvc )      /* Sheen Home Video Centre 2001    */
210   DRIVER( soundic )      /* Soundic MPT-03    */
211   DRIVER( telefevr )      /* Tchibo Tele-Fever    */
212   DRIVER( tempest3 )      /* Tempest MPT-03    */
213   DRIVER( tbbympt3 )      /* Tobby MPT-03    */
214   DRIVER( trakcvg )      /* Trakton Computer Video Game    */
215   DRIVER( tunixha )      /* Tunix Home Arcade    */
216   DRIVER( tryomvgc )      /* Tryom Video Game Center    */
217   DRIVER( orbituvi )      /* UVI Compu-Game    */
218   DRIVER( vdmaster )      /* Video Master    */
188219
189220   /* Game Park */
190221   DRIVER( gp32 )   /* GP32 2001 */
src/mess/drivers/arcadia.c
r7165r7166
11/******************************************************************************
22Consolidation and enhancment of documentation by Manfred Schneider based on previous work from
3 PeT mess@utanet.at and Paul Robson (autismuk@aol.com)
3 PeT mess@utanet.at and Paul Robson (autismuk@aol.com) minor updates by incog
44
55 Schematics, manuals and anything you can desire for at http://amigan.classicgaming.gamespy.com/
66
77 TODO: implement the RESET key on the front panel
8         find a dump of the charactyer ROM
9         convert the drawing code to tilemap
8       find a dump of the character ROM
9       convert the drawing code to tilemap
10       add MPT-03, Ormatu and Orbit clone families
1011
1112
1213 1. General
r7165r7166
267268     7  8  9
268269    10 11 12                                                                           */
269270
270static INPUT_PORTS_START( vcg )
271static INPUT_PORTS_START( plldium )
271272   PORT_START("panel")
272273   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )    PORT_NAME("Start")        PORT_CODE(KEYCODE_S)
273274   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )    PORT_NAME("Selector A")   PORT_CODE(KEYCODE_A)
r7165r7166
536537   MDRV_CARTSLOT_LOAD(arcadia_cart)
537538MACHINE_DRIVER_END
538539
540ROM_START(advsnha)
541   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
542   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
543ROM_END
539544
545ROM_START(bndarc)
546   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
547   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
548ROM_END
549
540550ROM_START(arcadia)
541551   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
542552   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
543553ROM_END
544554
545ROM_START(vcg)
555ROM_START(tccosmos)
546556   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
547557   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
548558ROM_END
549559
560ROM_START(dynavisn)
561   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
562   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
563ROM_END
550564
565ROM_START(ekusera)
566   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
567   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
568ROM_END
569
570ROM_START(hanihac)
571   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
572   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
573ROM_END
574
575ROM_START(hmg2650)
576   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
577   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
578ROM_END
579
580ROM_START(intmpt03)
581   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
582   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
583ROM_END
584
585ROM_START(ixl2000)
586   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
587   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
588ROM_END
589
590ROM_START(intervsn)
591   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
592   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
593ROM_END
594
595ROM_START(itmcmtp3)
596   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
597   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
598ROM_END
599
600ROM_START(lvision)
601   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
602   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
603ROM_END
604
605ROM_START(leonardo)
606   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
607   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
608ROM_END
609
610ROM_START(mratlus)
611   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
612   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
613ROM_END
614
615ROM_START(plldium)
616   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
617   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
618ROM_END
619
620ROM_START(ormatu)
621   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
622   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
623ROM_END
624
625ROM_START(polyvcg)
626   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
627   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
628ROM_END
629
630ROM_START(poppympt)
631   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
632   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
633ROM_END
634
635ROM_START(prestige)
636   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
637   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
638ROM_END
639
640ROM_START(rowtrn2k)
641   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
642   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
643ROM_END
644
645ROM_START(tvg2000)
646   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
647   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
648ROM_END
649
650ROM_START(sheenhvc)
651   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
652   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
653ROM_END
654
655ROM_START(soundic)
656   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
657   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
658ROM_END
659
660ROM_START(telefevr)
661   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
662   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
663ROM_END
664
665ROM_START(tempest3)
666   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
667   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
668ROM_END
669
670ROM_START(tbbympt3)
671   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
672   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
673ROM_END
674
675ROM_START(trakcvg)
676   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
677   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
678ROM_END
679
680ROM_START(tunixha)
681   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
682   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
683ROM_END
684
685ROM_START(tryomvgc)
686   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
687   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
688ROM_END
689
690ROM_START(orbituvi)
691   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
692   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
693ROM_END
694
695ROM_START(vdmaster)
696   ROM_REGION(0x8000,"maincpu", ROMREGION_ERASEFF)
697   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
698ROM_END
699
700
551701/***************************************************************************
552702
553703  Game driver(s)
r7165r7166
688838#endif
689839}
690840
691/*    YEAR  NAME        PARENT      COMPAT  MACHINE   INPUT     INIT        COMPANY     FULLNAME */
692// marketed from several firms/names
693841
694CONS(1982,   arcadia,   0,         0,      arcadia,  arcadia,  arcadia,   "Emerson",      "Arcadia 2001", GAME_IMPERFECT_SOUND )
695// schmid tvg 2000 (developer? PAL)
842/*   YEAR  NAME      PARENT     COMPAT    MACHINE   INPUT     INIT      COMPANY          FULLNAME */
843CONS(1983, advsnha,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Advision",      "Advision Home Arcade", GAME_IMPERFECT_SOUND )               /* France */
844CONS(1982, bndarc,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Bandai",      "Arcadia", GAME_IMPERFECT_SOUND )                  /* Japan */
845CONS(1982, arcadia,   0,      0,        arcadia,   arcadia,  arcadia,   "Emerson",      "Arcadia 2001", GAME_IMPERFECT_SOUND )                  /* U.S.A. */
846CONS(198?, tccosmos,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Tele-Computer",   "Cosmos", GAME_IMPERFECT_SOUND )                  /* Spain */
847CONS(1982, dynavisn,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Yamagiwa",      "Dynavision", GAME_IMPERFECT_SOUND )                  /* Japan */
848CONS(1982, ekusera,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "P.I.C",      "Ekusera", GAME_IMPERFECT_SOUND )                  /* Japan */
849CONS(1982, hanihac,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Hanimex",      "Hanimex Home Arcade Centre", GAME_IMPERFECT_SOUND )            /* UK */
850CONS(1982, hmg2650,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Hanimex",      "HMG-2650", GAME_IMPERFECT_SOUND )                  /* Germany */
851CONS(198?, intmpt03,   0,      0,        arcadia,   arcadia,  arcadia,   "Intelligent Game",   "Intelligent Game MPT-03", GAME_IMPERFECT_SOUND )            /* U.S.A */
852CONS(198?, ixl2000,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Intercord",      "Intercord XL 2000 System", GAME_IMPERFECT_SOUND )            /* Germany */
853CONS(198?, intervsn,   ormatu,    0,        arcadia,   arcadia,  arcadia,   "Intervision",      "Intervision 2001", GAME_IMPERFECT_SOUND )               /* Switzerland */
854CONS(198?, itmcmtp3,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "ITMC",         "ITMC MPT-03", GAME_IMPERFECT_SOUND )                  /* France */
855CONS(1982, lvision,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Leisure-Dynamics",   "Leisure-Vision", GAME_IMPERFECT_SOUND )               /* Canada */
856CONS(1982, leonardo,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "GiG Electronics",   "Leonardo", GAME_IMPERFECT_SOUND )                  /* Italy */
857CONS(1983, mratlus,   plldium,   0,        arcadia,   arcadia,  arcadia,   "H.G.S.",      "Mr. Altus Tele Brain", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )      /* Germany */
858CONS(198?, ormatu,   0,         0,        arcadia,   arcadia,  arcadia,   "Ormatu Electronics",   "Ormatu 2001", GAME_IMPERFECT_SOUND )                  /* Netherlands */
859CONS(198?, plldium,   0,         0,        arcadia,   plldium,  arcadia,   "Neckermann",      "Palladium Video-Computer-Game", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )   /* Germany, 16 keys instead of 12 */
860CONS(1983, polyvcg,   plldium,   0,        arcadia,   arcadia,  arcadia,   "Polybrain",      "Polybrain Video Computer Game", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )   /* Germany */
861CONS(198?, poppympt,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Transonic",      "Poppy MPT-03 Tele Computer Spiel", GAME_IMPERFECT_SOUND )         /* Germany */
862CONS(198?, prestige,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Prestige",      "Prestige Video Computer Game MPT-03", GAME_IMPERFECT_SOUND )         /* France */
863CONS(198?, rowtrn2k,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Rowtron",      "Rowtron 2000", GAME_IMPERFECT_SOUND )                  /* UK */
864CONS(1982, tvg2000,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Schmid",      "Schmid TVG 2000", GAME_IMPERFECT_SOUND )               /* Germany */
865CONS(198?, sheenhvc,   ormatu,    0,        arcadia,   arcadia,  arcadia,   "Sheen",      "Sheen Home Video Centre 2001", GAME_IMPERFECT_SOUND )            /* Australia */
866CONS(198?, soundic,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Soundic",      "Soundic MPT-03", GAME_IMPERFECT_SOUND )               /* Finland */
867CONS(198?, telefevr,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Tchibo",      "Tele-Fever", GAME_IMPERFECT_SOUND )                  /* Germany */
868CONS(198?, tempest3,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Tempest",      "Tempest MPT-03", GAME_IMPERFECT_SOUND )               /* Australia */
869CONS(198?, tbbympt3,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Tobby",      "Tobby MPT-03", GAME_IMPERFECT_SOUND )                  /* ? */
870CONS(198?, trakcvg,   plldium,   0,        arcadia,   arcadia,  arcadia,   "Trakton",      "Trakton Computer Video Game", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )   /* Australia */
871CONS(1982, tunixha,   arcadia,   0,        arcadia,   arcadia,  arcadia,   "Monaco Leisure",   "Tunix Home Arcade", GAME_IMPERFECT_SOUND )               /* New Zealand */
872CONS(198?, tryomvgc,   intmpt03,  0,        arcadia,   arcadia,  arcadia,   "Tryom",      "Tryom Video Game Center", GAME_IMPERFECT_SOUND )            /* U.S.A */
873CONS(198?, orbituvi,   0,        0,        arcadia,   arcadia,  arcadia,   "Orbit Electronics",   "UVI Compu-Game", GAME_IMPERFECT_SOUND )               /* New Zealand */
874CONS(198?, vdmaster,   orbituvi,  0,        arcadia,   arcadia,  arcadia,   "Grandstand",      "Video Master", GAME_IMPERFECT_SOUND )                  /* New Zealand */
696875
697// different cartridge connector
698// hanimex mpt 03 model
699
700// different cartridge connector (same size as mpt03, but different pinout!)
701// 16 keys instead of 12
702CONS(198?, vcg,      arcadia,   0,      arcadia,  vcg,      arcadia,   "Palladium",      "Video-Computer-Game", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team