PinMAME ---

Merging back in the PinMAME drivers is proposed every now and again, and since we've just added other non-video based things I figured that now might be a good time to look at it.

This is likely to be a HUGE undertaking as PinMAME is based on old code, and is Macro-hell, I see it as a several step plan.

1) Convert all the PinMAME drivers to compile their ROM Loading with current versions of MAME
2) Clean up the ROM loading, removing the excessive Macros which really don't help readability at all IMO
3) Hook up the Machine Drivers again for each system, so that the CPU core runs again
4) Look at ways in which the artwork system can be used to simulate the display parts etc.  (there is a scary amount of code in PinMAME for handling this stuff)
5) See how feasible it is to allow MAME to communicate with another program, as it's unlikely we'll be able to simulate the full table physics in MAME.

I've updated the System11 rom loading to compile for now.  The old PinMAME code which hasn't been updated is there #if 0'd out for reference for when a stab is made at hooking back up the actual CPUs to run etc.

Part of me wonders if just rewriting it from scratch would be easier, but it would be a shame to throw away the information that was figured out in PinMAME.

This was done by request, so I'm not especially bothered if it doesn't get included, PinMAME is rather hideous ;-)

If anybody wants to help they're more than welcome.  The other Williams systems should be easy to hook up the rom loading for because they share most of the Macros that have already been updated to compile.
This commit is contained in:
davidhay 2009-02-06 22:09:40 +00:00
parent ab3175c709
commit 21fd26ebd3
9 changed files with 5921 additions and 1 deletions

6
.gitattributes vendored
View File

@ -1823,6 +1823,12 @@ src/mame/drivers/orbit.c svneol=native#text/plain
src/mame/drivers/othldrby.c svneol=native#text/plain
src/mame/drivers/othunder.c svneol=native#text/plain
src/mame/drivers/overdriv.c svneol=native#text/plain
src/mame/drivers/p_core.c svneol=native#text/plain
src/mame/drivers/p_core.h svneol=native#text/plain
src/mame/drivers/p_s11.c svneol=native#text/plain
src/mame/drivers/p_s11.h svneol=native#text/plain
src/mame/drivers/p_wmssnd.c svneol=native#text/plain
src/mame/drivers/p_wmssnd.h svneol=native#text/plain
src/mame/drivers/pachifev.c svneol=native#text/plain
src/mame/drivers/pacland.c svneol=native#text/plain
src/mame/drivers/pacman.c svneol=native#text/plain

1497
src/mame/drivers/p_core.c Normal file

File diff suppressed because it is too large Load Diff

511
src/mame/drivers/p_core.h Normal file
View File

@ -0,0 +1,511 @@
// new code to allow the PinMAME rom loading to compile
#define NORMALREGION(size, reg) ROM_REGION(size, reg, ROMREGION_ERASE00)
#define NORMALREGIONE(size, reg) ROM_REGION(size, reg, ROMREGION_ERASE00)
#define SOUNDREGION(size ,reg) ROM_REGION(size, reg, ROMREGION_ERASE00)
#define SOUNDREGIONE(size ,reg) ROM_REGION(size, reg, ROMREGION_ERASE00)
/*-----------------
/ define the game
/------------------*/
#define CORE_GAMEDEF(name, ver, longname, year, manuf, machine, flag) \
GAME(year,name##_##ver,0,machine,name,name,ROT0,manuf,longname,flag | GAME_NOT_WORKING | GAME_NO_SOUND )
#define CORE_CLONEDEF(name, ver, clonever, longname, year, manuf, machine,flag) \
GAME(year,name##_##ver,name##_##clonever,machine,name,name,ROT0,manuf,longname,flag | GAME_NOT_WORKING | GAME_NO_SOUND)
#if 0
#define CORE_GAMEDEFNV(name, longname, year, manuf, machine, flag) \
GAME(year,name,0,machine,name,name,ROT0,manuf,longname,flag | GAME_NOT_WORKING | GAME_NO_SOUND)
#define CORE_CLONEDEFNV(name, cl, longname, year, manuf, machine,flag) \
GAME(year,name,cl,machine,name,name,ROT0,manuf,longname,flag | GAME_NOT_WORKING | GAME_NO_SOUND)
#define CORE_GAMEDEFNVR90(name, longname, year, manuf, machine, flag) \
GAME(year,name,0,machine,name,name,ROT90,manuf,longname,flag | GAME_NOT_WORKING | GAME_NO_SOUND)
#endif
/************************************************************************************************
*************************************************************************************************
Old PinMAME code below for reference ONLY
*************************************************************************************************
************************************************************************************************/
#if 0
#ifndef INC_CORE
#define INC_CORE
#include "wpcsam.h"
#include "gen.h"
#include "sim.h"
/*-- some convenience macros --*/
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (1)
#endif
#ifdef MAME_DEBUG
#define DBGLOG(x) logerror x
#else
#define DBGLOG(x)
#endif
/*-- convenience macro for handling bits --*/
#define GET_BIT0 (data & 0x01) >> 0
#define GET_BIT1 (data & 0x02) >> 1
#define GET_BIT2 (data & 0x04) >> 2
#define GET_BIT3 (data & 0x08) >> 3
#define GET_BIT4 (data & 0x10) >> 4
#define GET_BIT5 (data & 0x20) >> 5
#define GET_BIT6 (data & 0x40) >> 6
#define GET_BIT7 (data & 0x80) >> 7
/*-- default screen size */
#ifdef VPINMAME
# define CORE_SCREENX 640
# define CORE_SCREENY 400
#else /* VPINMAME */
# define CORE_SCREENX 320
# define CORE_SCREENY 256
#endif /* VPINMAME */
/*--------------
/ Input ports
/---------------*/
/* strange but there are no way to define IMP and TOG with key without using BITX */
#define COREPORT_BIT(mask, name, key) \
PORT_BITX(mask,IP_ACTIVE_HIGH,IPT_BUTTON1,name,key,IP_JOY_NONE)
#define COREPORT_BITIMP(mask, name, key) \
PORT_BITX(mask,IP_ACTIVE_HIGH,IPT_BUTTON1 | IPF_IMPULSE | (1<<8),name,key,IP_JOY_NONE)
#define COREPORT_BITTOG(mask, name, key) \
PORT_BITX(mask,IP_ACTIVE_HIGH,IPT_BUTTON1 | IPF_TOGGLE,name,key,IP_JOY_NONE)
#define COREPORT_DIPNAME(mask,default,name) \
PORT_DIPNAME(mask,default,name)
#define COREPORT_DIPSET(mask,name) \
PORT_DIPSETTING(mask,name)
/*-- only used in standard inport --*/
#define COREPORT_BITDEF(mask, type, key) \
PORT_BITX(mask,IP_ACTIVE_HIGH, type, IP_NAME_DEFAULT, key, IP_JOY_DEFAULT)
/*----------------
/ Common inports
/-----------------*/
#define CORE_PORTS \
PORT_START /* 0 */ \
COREPORT_BIT(0x0001, "Column 1", KEYCODE_Q) \
COREPORT_BIT(0x0002, "Column 2", KEYCODE_W) \
COREPORT_BIT(0x0004, "Column 3", KEYCODE_E) \
COREPORT_BIT(0x0008, "Column 4", KEYCODE_R) \
COREPORT_BIT(0x0010, "Column 5", KEYCODE_T) \
COREPORT_BIT(0x0020, "Column 6", KEYCODE_Y) \
COREPORT_BIT(0x0040, "Column 7", KEYCODE_U) \
COREPORT_BIT(0x0080, "Column 8", KEYCODE_I) \
COREPORT_BIT(0x0100, "Row 1", KEYCODE_A) \
COREPORT_BIT(0x0200, "Row 2", KEYCODE_S) \
COREPORT_BIT(0x0400, "Row 3", KEYCODE_D) \
COREPORT_BIT(0x0800, "Row 4", KEYCODE_F) \
COREPORT_BIT(0x1000, "Row 5", KEYCODE_G) \
COREPORT_BIT(0x2000, "Row 6", KEYCODE_H) \
COREPORT_BIT(0x4000, "Row 7", KEYCODE_J) \
COREPORT_BIT(0x8000, "Row 8", KEYCODE_K) \
PORT_START /* 1 */ \
COREPORT_BIT(0x0001, "Left Flipper", KEYCODE_LSHIFT) \
COREPORT_BIT(0x0002, "Right Flipper", KEYCODE_RSHIFT) \
COREPORT_BIT(0x0004, "U Left Flipper", KEYCODE_A) \
COREPORT_BIT(0x0008, "Y Right Flipper", KEYCODE_L)
/*-----------------------
/ Access to common ports
/------------------------*/
/*-- manual switch keys --*/
#define CORE_MANSWINPORT 0
#define CORE_MANSWCOLUMNS 0x00ff
#define CORE_MANSWROWS 0xff00
/*-- common keys (start, tilt etc) --*/
#define CORE_FLIPINPORT 1
#define CORE_LLFLIPKEY 0x0001
#define CORE_LRFLIPKEY 0x0002
#define CORE_ULFLIPKEY 0x0004
#define CORE_URFLIPKEY 0x0008
#define CORE_SIMINPORT 1 /* Inport for simulator */
#define CORE_COREINPORT 2 /* Inport for core use */
// Macro to ease switch assignment
#define CORE_SETKEYSW(value, mask, swcol) \
coreGlobals.swMatrix[(swcol)] = (coreGlobals.swMatrix[(swcol)] & ~(mask)) | ((value) & (mask))
/*------------------------------------------------------
/ Flipper hardware is described with the following macros
/ (macros use FLIP_LL, FLIP_LR, FLIP_UL, FLIP_UR)
/ FLIP_SW() Flipper switches available
/ FLIP_SWNO(L,R) Flipper switch numbers if other than default (Pre-fliptronics)
/ FLIP_SOL() CPU controlled flippers
/ Example: CPU controlled upper right flipper
/ FLIP_SW(FLIP_LL | FLIP_LR | FLIP_UR) + FLIP_SOL(FLIP_LL | FLIP_LR | FLIP_UR)
/ Example: Flippers not controlled by CPU
/ FLIP_SWNO(swFlipL, swFlipR)
/--------------------------------------------------------------*/
/*-- flipper names --*/
#define FLIP_LR (0x1)
#define FLIP_LL (0x2)
#define FLIP_UR (0x4)
#define FLIP_UL (0x8)
#define FLIP_L (FLIP_LL | FLIP_LR)
#define FLIP_U (FLIP_UL | FLIP_UR)
/*-- definition macros --*/
#define FLIP_BUT(x) ((x)<<16)
#define FLIP_SW(x) ((x)<<20)
#define FLIP_SWNO(l,r) (((l)<<8)|(r)|FLIP_SW(FLIP_L))
#define FLIP_EOS(x) ((x)<<28)
#define FLIP_SOL(x) (((x)<<24)|FLIP_EOS(x))
#define FLIP_SWL(x) (((x)>>8)&0xff)
#define FLIP_SWR(x) ((x)&0xff)
/*---------------------
/ Exported variables
/----------------------*/
#define CORE_FLIPSTROKETIME 2 /* Timer for flipper to reach top VBLANKs */
/*-----------------------------
/ Generic Display layout data
/------------------------------*/
/* The different kind of display units */
#define CORE_SEG16 0 // 16 segments
#define CORE_SEG16R 1 // 16 segments with comma and period reversed
#define CORE_SEG10 2 // 9 segments and comma
#define CORE_SEG9 3 // 9 segments
#define CORE_SEG8 4 // 7 segments and comma
#define CORE_SEG8D 5 // 7 segments and period
#define CORE_SEG7 6 // 7 segments
#define CORE_SEG87 7 // 7 segments, comma every three
#define CORE_SEG87F 8 // 7 segments, forced comma every three
#define CORE_SEG98 9 // 9 segments, comma every three
#define CORE_SEG98F 10 // 9 segments, forced comma every three
#define CORE_SEG7S 11 // 7 segments, small
#define CORE_SEG7SC 12 // 7 segments, small, with comma
#define CORE_SEG16S 13 // 16 segments with split top and bottom line
#define CORE_DMD 14 // DMD Display
#define CORE_VIDEO 15 // VIDEO Display
#define CORE_IMPORT 0x10 // Link to another display layout
#define CORE_SEGHIBIT 0x20
#define CORE_SEGREV 0x40
#define CORE_DMDNOAA 0x80
#define CORE_SEGMASK 0x1f // Note that CORE_IMPORT must be part of the segmask as well!
#define CORE_SEG8H (CORE_SEG8 | CORE_SEGHIBIT)
#define CORE_SEG7H (CORE_SEG7 | CORE_SEGHIBIT)
#define CORE_SEG87H (CORE_SEG87 | CORE_SEGHIBIT)
#define CORE_SEG87FH (CORE_SEG87F| CORE_SEGHIBIT)
#define CORE_SEG7SH (CORE_SEG7S | CORE_SEGHIBIT)
#define CORE_SEG7SCH (CORE_SEG7SC| CORE_SEGHIBIT)
#define DMD_MAXX 256
#define DMD_MAXY 64
typedef UINT8 tDMDDot[DMD_MAXY+2][DMD_MAXX+2];
/* Shortcuts for some common display sizes */
#define DISP_SEG_16(row,type) {4*row, 0, 20*row, 16, type}
#define DISP_SEG_7(row,col,type) {4*row,16*col,row*20+col*8+1,7,type}
#define DISP_SEG_CREDIT(no1,no2,type) {2,2,no1,1,type},{2,4,no2,1,type}
#define DISP_SEG_BALLS(no1,no2,type) {2,8,no1,1,type},{2,10,no2,1,type}
#define DISP_SEG_IMPORT(x) {0,0,0,1,CORE_IMPORT,x}
/* display layout structure */
/* Don't know how the LCD got in there. Should have been LED but now it
handles all kinds of displays so we call it dispLayout.
Keep the typedef of core_tLCDLayout for some time. */
struct core_dispLayout {
UINT16 top, left, start, length, type;
void *ptr;
};
typedef struct core_dispLayout core_tLCDLayout, *core_ptLCDLayout;
#define PINMAME_VIDEO_UPDATE(name) int (name)(struct mame_bitmap *bitmap, const struct rectangle *cliprect, const struct core_dispLayout *layout)
typedef int (*ptPinMAMEvidUpdate)(struct mame_bitmap *bitmap, const struct rectangle *cliprect, const struct core_dispLayout *layout);
extern void video_update_core_dmd(struct mame_bitmap *bitmap, const struct rectangle *cliprect, tDMDDot dotCol, const struct core_dispLayout *layout);
/*----------------------
/ WPC driver constants
/-----------------------*/
/* Solenoid numbering */
/* WPC */
/* 1-28 Standard */
/* 33-36 Upper flipper solenoids */
/* 37-40 Standard (WPC95 only) */
/* 41-44 - "" - Copy of above */
/* 45-48 Lower flipper solenoids */
/* 49-50 Simulated */
/* 51-44 */
/* S9/S11 */
/* 1- 8 Standard 'A'-side */
/* 9-16 Standard */
/* 17-22 Special */
/* 23 Flipper & SS Enabled Sol (fake) */
/* 25-32 Standard 'C'-side */
/* 37-41 Sound overlay board */
/* S7 */
/* 1-16 Standard */
/* 17-24 Special */
/* 25 Flipper & SS Enabled Sol (fake) */
/* BY17/BY35 */
/* 1-15 Standard Pulse */
/* 17-20 Standard Hold */
/* GTS80 */
/* 1- 9 Standard */
/* 10 GameOn (fake) */
/* 11 Tilt (for GI) (fake) */
#define CORE_FIRSTEXTSOL 37
#define CORE_FIRSTUFLIPSOL 33
#define CORE_FIRSTCUSTSOL 51
#define CORE_FIRSTLFLIPSOL 45
#define CORE_FIRSTSIMSOL 49
#define CORE_SSFLIPENSOL 23
#define CORE_FIRSTSSSOL 17
#define CORE_SOLBIT(x) (1<<((x)-1))
/* Flipper Solenoid numbers */
#define sLRFlip (CORE_FIRSTLFLIPSOL+1)
#define sLRFlipPow (CORE_FIRSTLFLIPSOL+0)
#define sLLFlip (CORE_FIRSTLFLIPSOL+3)
#define sLLFlipPow (CORE_FIRSTLFLIPSOL+2)
#define sURFlip (CORE_FIRSTUFLIPSOL+1)
#define sURFlipPow (CORE_FIRSTUFLIPSOL+0)
#define sULFlip (CORE_FIRSTUFLIPSOL+3)
#define sULFlipPow (CORE_FIRSTUFLIPSOL+2)
/*-- Flipper solenoid bits --*/
#define CORE_LRFLIPSOLBITS 0x03
#define CORE_LLFLIPSOLBITS 0x0c
#define CORE_URFLIPSOLBITS 0x30
#define CORE_ULFLIPSOLBITS 0xc0
/*-- create a custom solenoid number --*/
/* example: #define swCustom CORE_CUSTSOLNO(1) // custom solenoid 1 */
#define CORE_CUSTSOLNO(n) (CORE_FIRSTCUSTSOL-1+(n))
#define CORE_STDLAMPCOLS 8
#define CORE_STDSWCOLS 12
#define CORE_COINDOORSWCOL 0 /* internal array number */
#define CORE_MAXSWCOL 16 /* switch columns (0-9=sw matrix, 10=coin door, 11=cabinet/flippers) */
#define CORE_FLIPPERSWCOL 11 /* internal array number */
#define CORE_CUSTSWCOL CORE_STDSWCOLS /* first custom (game specific) switch column */
#define CORE_MAXLAMPCOL 42 /* lamp column (0-7=std lamp matrix 8- custom) */
#define CORE_CUSTLAMPCOL CORE_STDLAMPCOLS /* first custom lamp column */
#define CORE_MAXPORTS 8 /* Maximum input ports */
#define CORE_MAXGI 5 /* Maximum GI strings */
/*-- create a custom switch number --*/
/* example: #define swCustom CORE_CUSTSWNO(1,2) // custom column 1 row 2 */
#define CORE_CUSTSWNO(c,r) ((CORE_CUSTSWCOL-1+c)*10+r)
/*-------------------
/ Flipper Switches
/ in column FLIPPERSWCOL
/--------------------*/
#define CORE_SWLRFLIPEOSBIT 0x01
#define CORE_SWLRFLIPBUTBIT 0x02
#define CORE_SWLLFLIPEOSBIT 0x04
#define CORE_SWLLFLIPBUTBIT 0x08
#define CORE_SWURFLIPEOSBIT 0x10
#define CORE_SWURFLIPBUTBIT 0x20
#define CORE_SWULFLIPEOSBIT 0x40
#define CORE_SWULFLIPBUTBIT 0x80
#define CORE_FIRSTSIMROW 80 /* first free row on display */
/*-- Colours --*/
#define CORE_COLOR(x) Machine->pens[(x)]
#define COL_DMD 1
#define COL_DMDOFF (COL_DMD+0)
#define COL_DMD33 (COL_DMD+1)
#define COL_DMD66 (COL_DMD+2)
#define COL_DMDON (COL_DMD+3)
#define COL_DMDCOUNT 4
#define COL_LAMP (COL_DMD+COL_DMDCOUNT)
#define COL_LAMPCOUNT 8
#define COL_SHADE(x) (COL_LAMPCOUNT+(x))
#define COL_DMDAA (COL_LAMP+COL_LAMPCOUNT*2)
#define COL_DMDAACOUNT 7
#define COL_SEGAAON1 (COL_DMDAA+COL_DMDAACOUNT)
#define COL_SEGAAON2 (COL_SEGAAON1+1)
#define COL_SEGAAOFF1 (COL_SEGAAON1+2)
#define COL_SEGAAOFF2 (COL_SEGAAON1+3)
#define COL_SEGAACOUNT 4
#define COL_COUNT (COL_SEGAAON1+COL_SEGAACOUNT)
/* Lamp Colors */
#define BLACK (COL_LAMP+0)
#define WHITE (COL_LAMP+1)
#define GREEN (COL_LAMP+2)
#define RED (COL_LAMP+3)
#define ORANGE (COL_LAMP+4)
#define YELLOW (COL_LAMP+5)
#define LBLUE (COL_LAMP+6)
#define LPURPLE (COL_LAMP+7)
/*-------------------------------------------
/ Draw data. draw lamps,switches,solenoids
/ in this way instead of a matrix
/--------------------------------------------*/
typedef struct {
UINT8 x,y, color;
} core_tDrawData;
typedef struct {
UINT8 totnum; /*Total # of lamp positions defined - Up to 4 Max*/
core_tDrawData lamppos[4]; /*Can support up to 4 lamp positions for each lamp matrix entry!*/
} core_tLampData; /*This means, one lamp matrix entry can share up to 4 bulbs on the playfield*/
typedef struct {
core_tDrawData startpos; /*Starting Coordinates to draw matrix*/
core_tDrawData size; /*Size of lamp matrix*/
core_tLampData lamps[CORE_MAXLAMPCOL*8]; /*Can support up to 160 lamps!*/
} core_tLampDisplay;
#define CORE_SEGCOUNT 64
#ifdef LSB_FIRST
typedef union { struct { UINT8 lo, hi; } b; UINT16 w; } core_tSeg[CORE_SEGCOUNT];
#else /* LSB_FIRST */
typedef union { struct { UINT8 hi, lo; } b; UINT16 w; } core_tSeg[CORE_SEGCOUNT];
#endif /* LSB_FIRST */
typedef struct {
UINT8 swMatrix[CORE_MAXSWCOL];
UINT8 invSw[CORE_MAXSWCOL]; /* Active low switches */
UINT8 lampMatrix[CORE_MAXLAMPCOL], tmpLampMatrix[CORE_MAXLAMPCOL];
core_tSeg segments; /* segments data from driver */
UINT16 drawSeg[CORE_SEGCOUNT]; /* segments drawn */
UINT32 solenoids; /* on power driver bord */
UINT32 solenoids2; /* flipper solenoids */
UINT32 pulsedSolState; /* current pulse value of solenoids on driver board */
UINT64 lastSol; /* last state of all solenoids */
int gi[CORE_MAXGI]; /* WPC gi strings */
int simAvail; /* simulator (keys) available */
int soundEn; /* Sound enabled ? */
int diagnosticLed; /* data relating to diagnostic led(s)*/
char segDim[CORE_SEGCOUNT]; /* segments dimming */
} core_tGlobals;
extern core_tGlobals coreGlobals;
/* shortcut for coreGlobals */
#define cg coreGlobals
extern struct pinMachine *coreData;
/*Exported variables*/
/*-- There are no custom fields in the game driver --*/
/*-- so I have to invent some by myself. Each driver --*/
/*-- fills in one of these in the game_init function --*/
typedef struct {
UINT64 gen; /* Hardware Generation */
const struct core_dispLayout *lcdLayout; /* LCD display layout */
struct {
UINT32 flippers; /* flippers installed (see defines below) */
int swCol, lampCol, custSol; /* Custom switch columns, lamp columns and solenoids */
UINT32 soundBoard, display;
UINT32 gameSpecific1, gameSpecific2;
/*-- custom functions --*/
int (*getSol)(int solNo); /* get state of custom solenoid */
void (*handleMech)(int mech); /* update switches depending on playfield mechanics */
int (*getMech)(int mechNo); /* get status of mechanics */
void (*drawMech)(BMTYPE **line); /* draw game specific hardware */
core_tLampDisplay *lampData; /* lamp layout */
wpc_tSamSolMap *solsammap; /* solenoids samples */
} hw;
const void *simData;
struct { /* WPC specific stuff */
char serialNo[21]; /* Securty chip serial number */
UINT8 invSw[CORE_MAXSWCOL]; /* inverted switches (e.g. optos) */
/* common switches */
struct { int start, tilt, sTilt, coinDoor, shooter; } comSw;
} wpc;
struct { /* S3-S11 specific stuff (incl DE) */
int muxSol; /* S11 Mux solenoid */
int ssSw[8]; /* Special solenoid switches */
} sxx;
/* simulator data */
} core_tGameData;
extern const core_tGameData *core_gameData;
extern const int core_bcd2seg9[]; /* BCD to 9 segment display */
extern const int core_bcd2seg9a[]; /* BCD to 9 segment display, missing 6 top line */
extern const int core_bcd2seg7[]; /* BCD to 7 segment display */
extern const int core_bcd2seg7a[]; /* BCD to 7 segment display, missing 6 top line */
extern const int core_bcd2seg7e[]; /* BCD to 7 segment display with A to E letters */
#define core_bcd2seg core_bcd2seg7
/*-- Exported Display handling functions--*/
void core_updateSw(int flipEn);
/*-- text output functions --*/
void core_textOut(char *buf, int length, int x, int y, int color);
void CLIB_DECL core_textOutf(int x, int y, int color, const char *text, ...);
/*-- lamp handling --*/
void core_setLamp(UINT8 *lampMatrix, int col, int row);
void core_setLampBlank(UINT8 *lampMatrix, int col, int row);
/*-- switch handling --*/
extern void core_setSw(int swNo, int value);
extern int core_getSw(int swNo);
extern void core_updInvSw(int swNo, int inv);
/*-- get a switch column. (colEn=bits) --*/
extern int core_getSwCol(int colEn);
/*-- solenoid handling --*/
extern int core_getSol(int solNo);
extern int core_getPulsedSol(int solNo);
extern UINT64 core_getAllSol(void);
/*-- nvram handling --*/
extern void core_nvram(void *file, int write, void *mem, int length, UINT8 init);
/* makes it easier to swap bits */
extern const UINT8 core_swapNyb[16];
INLINE UINT8 core_revbyte(UINT8 x) { return (core_swapNyb[x & 0xf]<<4)|(core_swapNyb[x>>4]); }
INLINE UINT8 core_revnyb(UINT8 x) { return core_swapNyb[x]; }
INLINE UINT16 core_revword(UINT16 x) {
UINT8 lo,hi;
lo = core_revbyte(x & 0x00ff);
hi = core_revbyte((x & 0xff00)>>8);
return ((lo<<8) | hi);
}
/*-- core DIP handling --*/
// Get the status of a DIP bank (8 dips)
extern int core_getDip(int dipBank);
/*-- Easy Bit Column to Number conversion
* Convert Bit Column Data to corresponding #, ie, if Bit 3=1, return 3 - Zero Based (Bit1=1 returns 0)
* Assumes only 1 bit is set at a time. --*/
INLINE int core_BitColToNum(int tmp)
{
int data=0, i=0;
do {
if (tmp & 1) data += i;
i++;
} while (tmp >>= 1);
return data;
}
extern MACHINE_DRIVER_EXTERN(PinMAME);
#endif /* INC_CORE */
#endif

1741
src/mame/drivers/p_s11.c Normal file

File diff suppressed because it is too large Load Diff

263
src/mame/drivers/p_s11.h Normal file
View File

@ -0,0 +1,263 @@
// new code to allow the PinMAME rom loading to compile
#define S11_INPUT_PORTS_START(name,balls) \
INPUT_PORTS_START(name) \
#define S11_INPUT_PORTS_END \
INPUT_PORTS_END \
/*-- Memory regions --*/
#define S11_CPUREGION "cpu1"
/*-- Main CPU regions and ROM --*/
#define S9_ROMSTARTx4(name, ver, n1, chk1) \
ROM_START(name##_##ver) \
NORMALREGION(0x10000, S11_CPUREGION) \
ROM_LOAD(n1, 0x8000, 0x4000, chk1) \
ROM_RELOAD( 0xc000, 0x4000)
#define S9_ROMSTART12(name, ver, n1, chk1,n2,chk2) \
ROM_START(name##_##ver) \
NORMALREGION(0x10000, S11_CPUREGION) \
ROM_LOAD(n1, 0x5000, 0x1000, chk1) \
ROM_RELOAD( 0xd000, 0x1000) \
ROM_LOAD(n2, 0x6000, 0x2000, chk2) \
ROM_RELOAD( 0xe000, 0x2000)
#define S11_ROMSTART48(name, ver, n1, chk1, n2, chk2) \
ROM_START(name##_##ver) \
NORMALREGION(0x10000, S11_CPUREGION) \
ROM_LOAD(n1, 0x4000, 0x4000, chk1) \
ROM_LOAD(n2, 0x8000, 0x8000, chk2)
#define S11_ROMSTART28(name, ver, n1, chk1, n2, chk2) \
ROM_START(name##_##ver) \
NORMALREGION(0x10000, S11_CPUREGION) \
ROM_LOAD(n1, 0x4000, 0x2000, chk1) \
ROM_RELOAD( 0x6000, 0x2000) \
ROM_LOAD(n2, 0x8000, 0x8000, chk2)
#define S11_ROMSTART24(name, ver, n1, chk1, n2, chk2) \
ROM_START(name##_##ver) \
NORMALREGION(0x10000, S11_CPUREGION) \
ROM_LOAD(n1, 0x4000, 0x2000, chk1) \
ROM_RELOAD( 0x6000, 0x2000) \
ROM_LOAD(n2, 0x8000, 0x4000, chk2) \
ROM_RELOAD( 0xc000, 0x4000)
#define S11_ROMEND ROM_END
#define S9_ROMEND ROM_END
#define DE_ROMEND ROM_END
#define DE_CPUREGION REGION_CPU1
/** 16K & 32K ROMS 1632 **/
#define DE_ROMSTART48(name, n1, chk1, n2, chk2) \
ROM_START(name) \
NORMALREGION(0x10000, DE_CPUREGION) \
ROM_LOAD(n1, 0x4000, 0x4000, chk1) \
ROM_LOAD(n2, 0x8000, 0x8000, chk2)
/** 2 X 32K(1st 8K of B5 Chip is Blank) ROMS 3232 **/
#define DE_ROMSTART88(name, n1, chk1, n2, chk2) \
ROM_START(name) \
NORMALREGION(0x10000, DE_CPUREGION) \
ROM_LOAD(n1, 0x0000, 0x8000, chk1) \
ROM_LOAD(n2, 0x8000, 0x8000, chk2)
/******* GAMES USING ONLY 1 ROM *******/
/** 32K in 1 Rom Only **/
#define DE_ROMSTARTx8(name, n1, chk1) \
ROM_START(name) \
NORMALREGION(0x10000, DE_CPUREGION) \
ROM_LOAD(n1, 0x8000, 0x8000, chk1)
/** 64K(1st 8K of Chip is Blank) ROM **/
#define DE_ROMSTARTx0(name, n1, chk1) \
ROM_START(name) \
NORMALREGION(0x10000, DE_CPUREGION) \
ROM_LOAD(n1, 0x0000, 0x10000, chk1)
#define s9_mS9S s11_s9S
#define s9_mS9PS s11_s9PS
#define s11_mS11S s11_s11S
#define s11_mS11XS s11_s11XS
#define s11_mS11XSL s11_s11XSL
#define s11_mS11AS s11_s11aS
#define s11_mS11BS s11_s11aS
#define s11_mS11B2S s11_s11b2S
#define s11_mS11CS s11_s11cS
#define de_mDEA de_a
#define de_mDEAS1 de_a1S
#define de_mDEDMD16S1 de_dmd161S
#define de_mDEDMD16S2A de_dmd162aS
#define de_mDEDMD32S2A de_dmd322aS
#define de_mDEDMD64S2A de_dmd642aS
/************************************************************************************************
*************************************************************************************************
Old PinMAME code below for reference ONLY
*************************************************************************************************
************************************************************************************************/
#if 0
#ifndef INC_S11
#define INC_S11
/*-- Common Inports for S11Games --*/
#define S11_COMPORTS \
PORT_START /* 0 */ \
/* Switch Column 1 */ \
COREPORT_BITDEF( 0x0001, IPT_TILT, KEYCODE_INSERT) \
COREPORT_BIT( 0x0002, "Ball Tilt", KEYCODE_2) \
COREPORT_BITDEF( 0x0004, IPT_START1, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0008, IPT_COIN1, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0010, IPT_COIN2, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0020, IPT_COIN3, KEYCODE_3) \
COREPORT_BIT( 0x0040, "Slam Tilt", KEYCODE_HOME) \
COREPORT_BIT( 0x0080, "Hiscore Reset", KEYCODE_4) \
/* These are put in switch column 0 */ \
COREPORT_BIT( 0x0100, "Advance", KEYCODE_8) \
COREPORT_BITTOG( 0x0200, "Up/Down", KEYCODE_7) \
COREPORT_BIT( 0x0400, "CPU Diagnostic", KEYCODE_9) \
COREPORT_BIT( 0x0800, "Sound Diagnostic", KEYCODE_0) \
PORT_START /* 1 */ \
COREPORT_DIPNAME( 0x0001, 0x0000, "Country") \
COREPORT_DIPSET(0x0001, "Germany" ) \
COREPORT_DIPSET(0x0000, "USA" )
#define DE_COMPORTS \
PORT_START /* 0 */ \
/* Switch Column 1 */ \
COREPORT_BITDEF( 0x0001, IPT_TILT, KEYCODE_INSERT) \
COREPORT_BIT( 0x0002, "Ball Tilt", KEYCODE_2) \
COREPORT_BITDEF( 0x0004, IPT_START1, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0008, IPT_COIN1, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0010, IPT_COIN2, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0020, IPT_COIN3, KEYCODE_3) \
COREPORT_BIT( 0x0040, "Slam Tilt", KEYCODE_HOME) \
/* These are put in switch column 0 */ \
COREPORT_BIT( 0x0100, "Black Button", KEYCODE_8) \
COREPORT_BITTOG( 0x0200, "Green Button", KEYCODE_7)
//Games after Frankenstein used Non-Toggling Up/Down(Green Button) Switch
#define DE_COMPORTS2 \
PORT_START /* 0 */ \
/* Switch Column 1 */ \
COREPORT_BITDEF( 0x0001, IPT_TILT, KEYCODE_INSERT) \
COREPORT_BIT( 0x0002, "Ball Tilt", KEYCODE_2) \
COREPORT_BITDEF( 0x0004, IPT_START1, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0008, IPT_COIN1, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0010, IPT_COIN2, IP_KEY_DEFAULT) \
COREPORT_BITDEF( 0x0020, IPT_COIN3, KEYCODE_3) \
COREPORT_BIT( 0x0040, "Slam Tilt", KEYCODE_HOME) \
/* These are put in switch column 0 */ \
COREPORT_BIT( 0x0100, "Black Button", KEYCODE_8) \
COREPORT_BIT( 0x0200, "Green Button", KEYCODE_7) \
/*-- Standard input ports --*/
#define S11_INPUT_PORTS_START(name,balls) \
INPUT_PORTS_START(name) \
CORE_PORTS \
SIM_PORTS(balls) \
S11_COMPORTS
#define S11_INPUT_PORTS_END INPUT_PORTS_END
#define S11_COMINPORT CORE_COREINPORT
#define DE_INPUT_PORTS_START(name,balls) \
INPUT_PORTS_START(name) \
CORE_PORTS \
SIM_PORTS(balls) \
DE_COMPORTS
#define DE_INPUT_PORTS_END INPUT_PORTS_END
#define DE_COMINPORT CORE_COREINPORT
/*-- Standard input ports --*/
#define DE_INPUT_PORTS_START2(name,balls) \
INPUT_PORTS_START(name) \
CORE_PORTS \
SIM_PORTS(balls) \
DE_COMPORTS2
/*-- To access C-side multiplexed solenoid/flasher --*/
#define S11_CSOL(x) ((x)+(WPC_FIRSTFLIPPERSOL-1))
#define DE_CSOL(x) ((x)+24)
/*-- GameOn solenoids --*/
#define S11_GAMEONSOL 23
#define DE_GAMEONSOL 23
/*-- DE switch numbers --*/
#define DE_SWADVANCE -7
#define DE_SWUPDN -6
/*-- S11 switch numbers --*/
#define S11_SWADVANCE -7
#define S11_SWUPDN -6
#define S11_SWCPUDIAG -5
#define S11_SWSOUNDDIAG -4
/*-------------------------
/ Machine driver constants
/--------------------------*/
/*-- standard display layouts --*/
extern const core_tLCDLayout s11_dispS9[], s11_dispS11[], s11_dispS11a[], s11_dispS11b2[];
#define s11_dispS11b1 s11_dispS11a
#define s11_dispS11c s11_dispS11b2
extern MACHINE_DRIVER_EXTERN(s11_s9S);
extern MACHINE_DRIVER_EXTERN(s11_s9PS);
extern MACHINE_DRIVER_EXTERN(s11_s11S);
extern MACHINE_DRIVER_EXTERN(s11_s11XS);
extern MACHINE_DRIVER_EXTERN(s11_s11XSL);
extern MACHINE_DRIVER_EXTERN(s11_s11aS);
extern MACHINE_DRIVER_EXTERN(s11_s11b2S);
extern MACHINE_DRIVER_EXTERN(s11_s11cS);
extern MACHINE_DRIVER_EXTERN(de_a);
extern MACHINE_DRIVER_EXTERN(de_a1S);
extern MACHINE_DRIVER_EXTERN(de_dmd161S);
extern MACHINE_DRIVER_EXTERN(de_dmd162aS);
extern MACHINE_DRIVER_EXTERN(de_dmd322aS);
extern MACHINE_DRIVER_EXTERN(de_dmd642aS);
// Display options
#define S11_BCDDIAG 0x01 // 7seg diagnostic led
#define S11_BCDDISP 0x02 // BCD display
#define S11_LOWALPHA 0x04 // Alphanumeric second line display
#define S11_DISPINV 0x08 // Display signals are inverted
// Game specific options
#define S11_MUXSW2 0x01 // MUX Solenoid activates switch 2
#define S11_SNDOVERLAY 0x02 // Overlay solenoid board
#define S11_PRINTERLINE 0x04 // Got printer lines
#define S11_RKMUX 0x08 // Road Kings muxes different solenoids
#define S11_MUXDELAY 0x10 // Delay mux solenoid by one IRQ
#define S11_SNDDELAY 0x20 // Sound delay for Pool Sharks
#if 0
GEN_S9 BCDDISP
GEN_S11
GEN_S11A
GEN_S11B_1
GEN_S11B_2 LOWALPHA | INV MUX2
GEN_S11B_2x LOWALPHA | INV | EXTSOLBOARD MUX2
GEN_S11B_3 LOWALPHA | INV MUX2
GEN_S11C LOWALPHA | INV MUX2
DE_ALPHA1
DE_ALPHA2
DE_ALPHA3 LOWALPHA
#endif
#endif /* INC_S11 */
#endif

1416
src/mame/drivers/p_wmssnd.c Normal file

File diff suppressed because it is too large Load Diff

398
src/mame/drivers/p_wmssnd.h Normal file
View File

@ -0,0 +1,398 @@
// new code to allow the PinMAME rom loading to compile
/*-------------------------
/ S9 sound on CPU board
/--------------------------*/
#define S9S_CPUREGION "s9s_cpu"
//MACHINE_DRIVER_EXTERN(wmssnd_s9s);
//MACHINE_DRIVER_EXTERN(wmssnd_s9ps); /* pennant fever */
#define S9S_STDREG SOUNDREGION(0x10000, S9S_CPUREGION)
#define S9S_SOUNDROM41111(u49,chk49, u4,chk4, u5,chk5, u6,chk6, u7,chk7) \
S9S_STDREG \
ROM_LOAD(u49, 0xc000, 0x4000, chk49) \
ROM_LOAD(u7, 0x8000, 0x1000, chk7) \
ROM_LOAD(u5, 0x9000, 0x1000, chk5) \
ROM_LOAD(u6, 0xa000, 0x1000, chk6) \
ROM_LOAD(u4, 0xb000, 0x1000, chk4)
#define S9S_SOUNDROM4111(u49,chk49, u4,chk4, u5,chk5, u6,chk6) \
S9S_STDREG \
ROM_LOAD(u49, 0xc000, 0x4000, chk49) \
ROM_LOAD(u5, 0x9000, 0x1000, chk5) \
ROM_LOAD(u6, 0xa000, 0x1000, chk6) \
ROM_LOAD(u4, 0xb000, 0x1000, chk4)
#define S9S_SOUNDROM4(u49,chk49) \
S9S_STDREG \
ROM_LOAD(u49, 0xc000, 0x4000, chk49) \
ROM_RELOAD(0x8000, 0x4000)
#define S9RR_SOUNDROM(u49, chk49) \
S9S_STDREG \
ROM_LOAD(u49, 0xe000, 0x2000, chk49) \
ROM_RELOAD(0xc000, 0x2000) \
ROM_RELOAD(0xa000, 0x2000) \
ROM_RELOAD(0x8000, 0x2000)
/*-------------------------
/ S11 sound on CPU board
/--------------------------*/
#define S11XS_CPUREGION "s11xs_cpu"
#define S11XS_ROMREGION "sound2"
#define S11S_CPUREGION "s11s_cpu"
#define S11S_ROMREGION "sound2"
//extern MACHINE_DRIVER_EXTERN(wmssnd_s11s); /* without extra sound board */
//extern MACHINE_DRIVER_EXTERN(wmssnd_s11xs); /* with s11c sound board */
//extern MACHINE_DRIVER_EXTERN(wmssnd_s11b2s); /* with jokerz sound board */
#define S11XS_STDREG \
#define S11XS_SOUNDROM44(n1, chk1, n2, chk2) \
SOUNDREGION(0x10000, S11XS_CPUREGION) \
SOUNDREGION(0x10000, S11XS_ROMREGION) \
ROM_LOAD(n1, 0x4000, 0x4000, chk1) \
ROM_LOAD(n2, 0xc000, 0x4000, chk2) \
ROM_RELOAD( 0x8000, 0x4000)
#define S11XS_SOUNDROMx8(n2, chk2) \
SOUNDREGION(0x10000, S11XS_CPUREGION) \
SOUNDREGION(0x10000, S11XS_ROMREGION) \
ROM_LOAD(n2, 0x4000, 0x4000, chk2) \
ROM_CONTINUE(0xc000, 0x4000)
#define S11XS_SOUNDROM88(n1, chk1, n2, chk2) \
SOUNDREGION(0x10000, S11XS_CPUREGION) \
SOUNDREGION(0x10000, S11XS_ROMREGION) \
ROM_LOAD(n1, 0x0000, 0x8000, chk1) \
ROM_LOAD(n2, 0x8000, 0x8000, chk2)
#define S11S_SOUNDROM88(n1, chk1, n2, chk2) \
SOUNDREGION(0x10000, S11S_CPUREGION) \
SOUNDREGION(0x10000, S11S_ROMREGION) \
ROM_LOAD(n1, 0x0000, 0x8000, chk1) \
ROM_LOAD(n2, 0x8000, 0x8000, chk2)
/*-------------------------
/ S11C sound board
/--------------------------*/
#define S11CS_CPUREGION "s11cs_cpu"
#define S11CS_ROMREGION "sound1"
//extern MACHINE_DRIVER_EXTERN(wmssnd_s11cs);
#define S11CS_STDREG \
SOUNDREGION(0x10000, S11CS_CPUREGION) \
SOUNDREGION(0x30000, S11CS_ROMREGION)
#define S11CS_ROMLOAD8(start, n, chk) \
ROM_LOAD(n, start, 0x8000, chk) \
ROM_RELOAD(start+0x8000, 0x8000)
#define S11CS_ROMLOAD0(start, n, chk) \
ROM_LOAD(n, start, 0x10000, chk)
#define S11CS_SOUNDROM000(n1,chk1,n2,chk2,n3,chk3) \
S11CS_STDREG \
S11CS_ROMLOAD0(0x00000, n1, chk1) \
S11CS_ROMLOAD0(0x10000, n2, chk2) \
S11CS_ROMLOAD0(0x20000, n3, chk3)
#define S11CS_SOUNDROM008(n1,chk1,n2,chk2,n3,chk3) \
S11CS_STDREG \
S11CS_ROMLOAD0(0x00000, n1, chk1) \
S11CS_ROMLOAD0(0x10000, n2, chk2) \
S11CS_ROMLOAD8(0x20000, n3, chk3)
#define S11CS_SOUNDROM888(n1,chk1,n2,chk2,n3,chk3) \
S11CS_STDREG \
S11CS_ROMLOAD8(0x00000, n1, chk1) \
S11CS_ROMLOAD8(0x10000, n2, chk2) \
S11CS_ROMLOAD8(0x20000, n3, chk3)
#define S11CS_SOUNDROM88(n1,chk1,n2,chk2) \
S11CS_STDREG \
S11CS_ROMLOAD8(0x00000, n1, chk1) \
S11CS_ROMLOAD8(0x10000, n2, chk2)
#define S11CS_SOUNDROM8(n1,chk1) \
S11CS_STDREG \
S11CS_ROMLOAD8(0x00000, n1, chk1)
/*-------------------------
/ Jokerz! sound board
/--------------------------*/
#define S11JS_CPUREGION "s11js_cpu"
#define S11JS_ROMREGION "sound1"
//extern MACHINE_DRIVER_EXTERN(wmssnd_s11js);
#define S11JS_SOUNDROM(n1, chk1) \
SOUNDREGION(0x10000, S11JS_CPUREGION) \
ROM_LOAD(n1, 0x0000, 0x10000, chk1) \
SOUNDREGION(0x10000, S11JS_ROMREGION) \
ROM_LOAD(n1, 0x0000, 0x10000, chk1)
/************************************************************************************************
*************************************************************************************************
Old PinMAME code below for reference ONLY
*************************************************************************************************
************************************************************************************************/
#if 0
#ifndef INC_WMSSND
#define INC_WMSSND
/* DCS sound needs this one */
#include "cpu/adsp2100/adsp2100.h"
/*-------------------------
/ S3-S7 sound board
/--------------------------*/
#define S67S_CPUNO 1
#define S67S_MEMREG_SCPU (REGION_CPU1+S67S_CPUNO)
extern MACHINE_DRIVER_EXTERN(wmssnd_s67s);
#define S67S_SOUNDROMS0(ic12, chk12) \
SOUNDREGION(0x10000, S67S_MEMREG_SCPU) \
ROM_LOAD(ic12, 0x7000, 0x1000, chk12) \
ROM_RELOAD( 0xf000, 0x1000)
#define S67S_SOUNDROMS8(ic12, chk12) \
SOUNDREGION(0x10000, S67S_MEMREG_SCPU) \
ROM_LOAD(ic12, 0x7800, 0x0800, chk12) \
ROM_RELOAD( 0xf800, 0x0800)
#define S67S_SPEECHROMS0000(ic7,chk7, ic5,chk5, ic6,chk6, ic4, chk4) \
ROM_LOAD(ic7, 0x3000, 0x1000, chk7) \
ROM_RELOAD( 0xb000, 0x1000) \
ROM_LOAD(ic5, 0x4000, 0x1000, chk5) \
ROM_RELOAD( 0xc000, 0x1000) \
ROM_LOAD(ic6, 0x5000, 0x1000, chk6) \
ROM_RELOAD( 0xd000, 0x1000) \
ROM_LOAD(ic4, 0x6000, 0x1000, chk4) \
ROM_RELOAD( 0xe000, 0x1000)
#define S67S_SPEECHROMS000x(ic7,chk7, ic5,chk5, ic6,chk6) \
ROM_LOAD(ic7, 0x3000, 0x1000, chk7) \
ROM_RELOAD( 0xb000, 0x1000) \
ROM_LOAD(ic5, 0x4000, 0x1000, chk5) \
ROM_RELOAD( 0xc000, 0x1000) \
ROM_LOAD(ic6, 0x5000, 0x1000, chk6) \
ROM_RELOAD( 0xd000, 0x1000)
/*-------------------------
/ WPC sound board
/--------------------------*/
#define WPCS_CPUNO 1
#define WPCS_CPUREGION (REGION_CPU1+WPCS_CPUNO)
#define WPCS_ROMREGION (REGION_SOUND1)
extern MACHINE_DRIVER_EXTERN(wmssnd_wpcs);
#define WPCS_STDREG \
SOUNDREGION(0x010000, WPCS_CPUREGION) \
SOUNDREGION(0x180000, WPCS_ROMREGION)
#define WPCS_ROMLOAD2(start, n, chk) \
ROM_LOAD(n, start, 0x20000, chk) \
ROM_RELOAD( start + 0x20000, 0x20000) \
ROM_RELOAD( start + 0x40000, 0x20000) \
ROM_RELOAD( start + 0x60000, 0x20000)
#define WPCS_ROMLOAD4(start, n, chk) \
ROM_LOAD(n, start, 0x40000, chk) \
ROM_RELOAD( start + 0x40000, 0x40000)
#define WPCS_ROMLOAD8(start, n, chk) \
ROM_LOAD(n, start, 0x80000, chk)
#define WPCS_SOUNDROM882(u18,chk18,u15,chk15,u14,chk14) \
WPCS_STDREG \
WPCS_ROMLOAD8(0x000000, u18, chk18) \
WPCS_ROMLOAD8(0x080000, u15, chk15) \
WPCS_ROMLOAD2(0x100000, u14, chk14)
#define WPCS_SOUNDROM288(u18,chk18,u15,chk15,u14,chk14) \
WPCS_STDREG \
WPCS_ROMLOAD2(0x000000, u18, chk18) \
WPCS_ROMLOAD8(0x080000, u15, chk15) \
WPCS_ROMLOAD8(0x100000, u14, chk14)
#define WPCS_SOUNDROM222(u18,chk18,u15,chk15,u14,chk14) \
WPCS_STDREG \
WPCS_ROMLOAD2(0x000000, u18, chk18) \
WPCS_ROMLOAD2(0x080000, u15, chk15) \
WPCS_ROMLOAD2(0x100000, u14, chk14)
#define WPCS_SOUNDROM224(u18,chk18,u15,chk15,u14,chk14) \
WPCS_STDREG \
WPCS_ROMLOAD2(0x000000, u18, chk18) \
WPCS_ROMLOAD2(0x080000, u15, chk15) \
WPCS_ROMLOAD4(0x100000, u14, chk14)
#define WPCS_SOUNDROM248(u18,chk18,u15,chk15,u14,chk14) \
WPCS_STDREG \
WPCS_ROMLOAD2(0x000000, u18, chk18) \
WPCS_ROMLOAD4(0x080000, u15, chk15) \
WPCS_ROMLOAD8(0x100000, u14, chk14)
#define WPCS_SOUNDROM2x8(u18,chk18,u14,chk14) \
WPCS_STDREG \
WPCS_ROMLOAD2(0x000000, u18, chk18) \
WPCS_ROMLOAD8(0x100000, u14, chk14)
#define WPCS_SOUNDROM84x(u18,chk18,u15,chk15) \
WPCS_STDREG \
WPCS_ROMLOAD8(0x000000, u18, chk18) \
WPCS_ROMLOAD4(0x080000, u15, chk15)
#define WPCS_SOUNDROM22x(u18,chk18,u15,chk15) \
WPCS_STDREG \
WPCS_ROMLOAD2(0x000000, u18, chk18) \
WPCS_ROMLOAD2(0x080000, u15, chk15)
#define WPCS_SOUNDROM888(u18,chk18,u15,chk15,u14,chk14) \
WPCS_STDREG \
WPCS_ROMLOAD8(0x000000, u18, chk18) \
WPCS_ROMLOAD8(0x080000, u15, chk15) \
WPCS_ROMLOAD8(0x100000, u14, chk14)
#define WPCS_SOUNDROM8xx(u18,chk18) \
WPCS_STDREG \
WPCS_ROMLOAD8(0x000000, u18, chk18)
/*-------------------------
/ DCS sound board
/--------------------------*/
#define DCS_CPUNO 1
#define DCS_CPUREGION (REGION_CPU1+DCS_CPUNO)
#define DCS_ROMREGION (REGION_SOUND1)
#define DCS_BANKREGION (REGION_USER3)
extern MACHINE_DRIVER_EXTERN(wmssnd_dcs1);
/* DCS on WPC95 audio/visual board */
extern MACHINE_DRIVER_EXTERN(wmssnd_dcs2);
#define DCS_STDREG(size) \
SOUNDREGION(ADSP2100_SIZE, DCS_CPUREGION) \
SOUNDREGION(0x1000*2, DCS_BANKREGION) \
SOUNDREGION(0x800000, DCS_ROMREGION)
#define DCS_ROMLOADx(start, n, chk) \
ROM_LOAD(n, start, 0x080000, chk) ROM_RELOAD(start+0x080000, 0x080000)
#define DCS_ROMLOADm(start, n,chk) \
ROM_LOAD(n, start, 0x100000, chk)
#define DCS_SOUNDROM1x(n2,chk2) \
DCS_STDREG(0x100000) \
DCS_ROMLOADx(0x000000,n2,chk2)
#define DCS_SOUNDROM1m(n2,chk2) \
DCS_STDREG(0x100000) \
DCS_ROMLOADm(0x000000,n2,chk2)
#define DCS_SOUNDROM2m(n2,chk2,n3,chk3) \
DCS_STDREG(0x200000) \
DCS_ROMLOADm(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3)
#define DCS_SOUNDROM3m(n2,chk2,n3,chk3,n4,chk4) \
DCS_STDREG(0x300000) \
DCS_ROMLOADm(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4)
#define DCS_SOUNDROM4m(n2,chk2,n3,chk3,n4,chk4,n5,chk5) \
DCS_STDREG(0x400000) \
DCS_ROMLOADm(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4) \
DCS_ROMLOADm(0x300000,n5,chk5)
#define DCS_SOUNDROM4xm(n2,chk2,n3,chk3,n4,chk4,n5,chk5) \
DCS_STDREG(0x400000) \
DCS_ROMLOADx(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4) \
DCS_ROMLOADm(0x300000,n5,chk5)
#define DCS_SOUNDROM4mx(n2,chk2,n3,chk3,n4,chk4,n5,chk5) \
DCS_STDREG(0x400000) \
DCS_ROMLOADm(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4) \
DCS_ROMLOADx(0x300000,n5,chk5)
#define DCS_SOUNDROM5xm(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6) \
DCS_STDREG(0x500000) \
DCS_ROMLOADx(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4) \
DCS_ROMLOADm(0x300000,n5,chk5) \
DCS_ROMLOADm(0x400000,n6,chk6)
#define DCS_SOUNDROM5x(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6) \
DCS_STDREG(0x500000) \
DCS_ROMLOADx(0x000000,n2,chk2) \
DCS_ROMLOADx(0x100000,n3,chk3) \
DCS_ROMLOADx(0x200000,n4,chk4) \
DCS_ROMLOADx(0x300000,n5,chk5) \
DCS_ROMLOADx(0x400000,n6,chk6)
#define DCS_SOUNDROM5m(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6) \
DCS_STDREG(0x500000) \
DCS_ROMLOADm(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4) \
DCS_ROMLOADm(0x300000,n5,chk5) \
DCS_ROMLOADm(0x400000,n6,chk6)
#define DCS_SOUNDROM6x(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6,n7,chk7) \
DCS_STDREG(0x600000) \
DCS_ROMLOADx(0x000000,n2,chk2) \
DCS_ROMLOADx(0x100000,n3,chk3) \
DCS_ROMLOADx(0x200000,n4,chk4) \
DCS_ROMLOADx(0x300000,n5,chk5) \
DCS_ROMLOADx(0x400000,n6,chk6) \
DCS_ROMLOADx(0x500000,n7,chk7)
#define DCS_SOUNDROM6m(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6,n7,chk7) \
DCS_STDREG(0x600000) \
DCS_ROMLOADm(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4) \
DCS_ROMLOADm(0x300000,n5,chk5) \
DCS_ROMLOADm(0x400000,n6,chk6) \
DCS_ROMLOADm(0x500000,n7,chk7)
#define DCS_SOUNDROM6xm(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6,n7,chk7) \
DCS_STDREG(0x600000) \
DCS_ROMLOADx(0x000000,n2,chk2) \
DCS_ROMLOADm(0x100000,n3,chk3) \
DCS_ROMLOADm(0x200000,n4,chk4) \
DCS_ROMLOADm(0x300000,n5,chk5) \
DCS_ROMLOADm(0x400000,n6,chk6) \
DCS_ROMLOADm(0x500000,n7,chk7)
#define DCS_SOUNDROM7x(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6,n7,chk7,n8,chk8) \
DCS_STDREG(0x700000) \
DCS_ROMLOADx(0x000000,n2,chk2) \
DCS_ROMLOADx(0x100000,n3,chk3) \
DCS_ROMLOADx(0x200000,n4,chk4) \
DCS_ROMLOADx(0x300000,n5,chk5) \
DCS_ROMLOADx(0x400000,n6,chk6) \
DCS_ROMLOADx(0x500000,n7,chk7) \
DCS_ROMLOADx(0x600000,n8,chk8)
#define DCS_SOUNDROM8x(n2,chk2,n3,chk3,n4,chk4,n5,chk5,n6,chk6,n7,chk7,n8,chk8,n9,chk9) \
DCS_STDREG(0x800000) \
DCS_ROMLOADx(0x000000,n2,chk2) \
DCS_ROMLOADx(0x100000,n3,chk3) \
DCS_ROMLOADx(0x200000,n4,chk4) \
DCS_ROMLOADx(0x300000,n5,chk5) \
DCS_ROMLOADx(0x400000,n6,chk6) \
DCS_ROMLOADx(0x500000,n7,chk7) \
DCS_ROMLOADx(0x600000,n8,chk8) \
DCS_ROMLOADx(0x700000,n9,chk9)
#endif /* INC_WMSSND */
#endif

View File

@ -1516,6 +1516,14 @@ $(MAMEOBJ)/zaccaria.a: \
$(DRIVERS)/zaccaria.o $(VIDEO)/zaccaria.o \
#-------------------------------------------------
# Pinball drivers
#-------------------------------------------------
$(MAMEOBJ)/zaccaria.a: \
$(DRIVERS)/p_s11.o \
$(DRIVERS)/p_core.o \
$(DRIVERS)/p_wmssnd.o \
#-------------------------------------------------
# remaining drivers

View File

@ -8644,5 +8644,85 @@ Other Sun games
/* MPU5 */
DRIVER( m_honmon )
/* Drivers below are pinball machines
There is currently no way of fully supporting these in MAME
*/
DRIVER( sshtl_l7 )
DRIVER( sorcr_l1 )
DRIVER( sorcr_l2 )
DRIVER( comet_l4 )
DRIVER( comet_l5 )
DRIVER( hs_l4 )
DRIVER( hs_l3 )
DRIVER( grand_l4 )
DRIVER( rdkng_l4 )
DRIVER( rdkng_l1 )
DRIVER( rdkng_l2 )
DRIVER( rdkng_l3 )
DRIVER( pb_l5 )
DRIVER( pb_l2 )
DRIVER( pb_l3 )
DRIVER( f14_l1 )
DRIVER( fire_l3 )
DRIVER( bguns_l8 )
DRIVER( bguns_l7 )
DRIVER( bguns_la )
DRIVER( bguns_p1 )
DRIVER( spstn_l5 )
DRIVER( cycln_l5 )
DRIVER( cycln_l4 )
DRIVER( bnzai_l3 )
DRIVER( bnzai_g3 )
DRIVER( bnzai_l1 )
DRIVER( bnzai_pa )
DRIVER( swrds_l2 )
DRIVER( taxi_l4 )
DRIVER( taxi_l3 )
DRIVER( taxi_lg1 )
DRIVER( jokrz_l6 )
DRIVER( jokrz_l3 )
DRIVER( esha_la3 )
DRIVER( esha_pr4 )
DRIVER( esha_lg1 )
DRIVER( esha_lg2 )
DRIVER( esha_la1 )
DRIVER( esha_pa1 )
DRIVER( bk2k_l4 )
DRIVER( bk2k_lg1 )
DRIVER( bk2k_lg3 )
DRIVER( bk2k_pu1 )
DRIVER( polic_l4 )
DRIVER( polic_l3 )
DRIVER( polic_l2 )
DRIVER( tsptr_l3 )
DRIVER( bcats_l5 )
DRIVER( bcats_l2 )
DRIVER( mousn_l4 )
DRIVER( mousn_l1 )
DRIVER( mousn_lu )
DRIVER( mousn_lx )
DRIVER( whirl_l3 )
DRIVER( whirl_l2 )
DRIVER( gs_l3 )
DRIVER( gs_l4 )
DRIVER( rollr_l2 )
DRIVER( rollr_ex )
DRIVER( rollr_e1 )
DRIVER( rollr_p2 )
DRIVER( rollr_l3 )
DRIVER( rollr_g3 )
DRIVER( pool_l7 )
DRIVER( diner_l4 )
DRIVER( diner_l3 )
DRIVER( diner_l1 )
DRIVER( radcl_l1 )
DRIVER( radcl_g1 )
DRIVER( radcl_p3 )
DRIVER( strax_p7 )
DRIVER( rvrbt_l3 )
DRIVER( bbnny_l2 )
DRIVER( bbnny_lu )
#endif /* DRIVER_RECURSIVE */