📄 pacman.c
字号:
ROM_LOAD( "e5", 0x1000, 0x1000, 0xa42b5201 )
ROM_REGION(0x0120) /* color PROMs */
ROM_LOAD( "82s123.8h", 0x0000, 0x0020, 0x2fc650bd )
ROM_LOAD( "82s129.4a", 0x0020, 0x0100, 0xd8d78829 )
ROM_REGION(0x0200) /* sound PROMs */
ROM_LOAD( "82s129.1k", 0x0000, 0x0100, 0xa9cc86bf )
ROM_LOAD( "82s129.3k", 0x0100, 0x0100, 0x77245b66 ) /* timing - not used */
ROM_END
ROM_START( mrtnt_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "tnt.1", 0x0000, 0x1000, 0x0e836586 )
ROM_LOAD( "tnt.2", 0x1000, 0x1000, 0x779c4c5b )
ROM_LOAD( "tnt.3", 0x2000, 0x1000, 0xad6fc688 )
ROM_LOAD( "tnt.4", 0x3000, 0x1000, 0xd77557b3 )
ROM_REGION_DISPOSE(0x2000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "tnt.5", 0x0000, 0x1000, 0x3038cc0e )
ROM_LOAD( "tnt.6", 0x1000, 0x1000, 0x97634d8b )
ROM_REGION(0x0120) /* color PROMs */
ROM_LOAD( "mrtnt08.bin", 0x0000, 0x0020, 0x2fc650bd ) /* wrong! from Pac Man */
ROM_LOAD( "mrtnt04.bin", 0x0020, 0x0100, 0x3eb3a8e4 ) /* wrong! from Pac Man */
ROM_REGION(0x0200) /* sound PROMs */
ROM_LOAD( "mrtnt01.bin", 0x0000, 0x0100, 0xa9cc86bf )
ROM_LOAD( "mrtnt03.bin", 0x0100, 0x0100, 0x77245b66 ) /* timing - not used */
ROM_END
ROM_START( lizwiz_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "6e.cpu", 0x0000, 0x1000, 0x32bc1990 )
ROM_LOAD( "6f.cpu", 0x1000, 0x1000, 0xef24b414 )
ROM_LOAD( "6h.cpu", 0x2000, 0x1000, 0x30bed83d )
ROM_LOAD( "6j.cpu", 0x3000, 0x1000, 0xdd09baeb )
ROM_LOAD( "wiza", 0x8000, 0x1000, 0xf6dea3a6 )
ROM_LOAD( "wizb", 0x9000, 0x1000, 0xf27fb5a8 )
ROM_REGION_DISPOSE(0x2000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "5e.cpu", 0x0000, 0x1000, 0x45059e73 )
ROM_LOAD( "5f.cpu", 0x1000, 0x1000, 0xd2469717 )
ROM_REGION(0x0120) /* color PROMs */
ROM_LOAD( "7f.cpu", 0x0000, 0x0020, 0x7549a947 )
ROM_LOAD( "4a.cpu", 0x0020, 0x0100, 0x5fdca536 )
ROM_REGION(0x0100) /* sound prom */
ROM_LOAD( "pacman.spr", 0x0000, 0x0100, 0xa9cc86bf )
ROM_END
ROM_START( theglob_rom )
ROM_REGION(0x20000) /* 64k for code */
ROM_LOAD( "glob.u2", 0x0000, 0x2000, 0x829d0bea )
ROM_LOAD( "glob.u3", 0x2000, 0x2000, 0x31de6628 )
ROM_REGION_DISPOSE(0x2000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "glob.5e", 0x0000, 0x1000, 0x53688260 )
ROM_LOAD( "glob.5f", 0x1000, 0x1000, 0x051f59c7 )
ROM_REGION(0x0120) /* color PROMs */
ROM_LOAD( "glob.7f", 0x0000, 0x0020, 0x1f617527 )
ROM_LOAD( "glob.4a", 0x0020, 0x0100, 0x28faa769 )
ROM_REGION(0x0100) /* sound prom */
ROM_LOAD( "pacman.spr", 0x0000, 0x0100, 0xa9cc86bf )
ROM_END
ROM_START( beastf_rom )
ROM_REGION(0x20000) /* 64k for code */
ROM_LOAD( "bf-u2.bin", 0x0000, 0x2000, 0x3afc517b )
ROM_LOAD( "bf-u3.bin", 0x2000, 0x2000, 0x8dbd76d0 )
ROM_REGION_DISPOSE(0x2000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "beastf.5e", 0x0000, 0x1000, 0x5654dc34 )
ROM_LOAD( "beastf.5f", 0x1000, 0x1000, 0x1b30ca61 )
ROM_REGION(0x0120) /* color PROMs */
ROM_LOAD( "glob.7f", 0x0000, 0x0020, 0x1f617527 )
ROM_LOAD( "glob.4a", 0x0020, 0x0100, 0x28faa769 )
ROM_REGION(0x0100) /* sound prom */
ROM_LOAD( "pacman.spr", 0x0000, 0x0100, 0xa9cc86bf )
ROM_END
ROM_START( jumpshot_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "6e", 0x0000, 0x1000, 0xf00def9a )
ROM_LOAD( "6f", 0x1000, 0x1000, 0xf70deae2 )
ROM_LOAD( "6h", 0x2000, 0x1000, 0x894d6f68 )
ROM_LOAD( "6j", 0x3000, 0x1000, 0xf15a108a )
ROM_REGION_DISPOSE(0x2000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "5e", 0x0000, 0x1000, 0xd9fa90f5 )
ROM_LOAD( "5f", 0x1000, 0x1000, 0x2ec711c1 )
ROM_REGION(0x0120) /* color PROMs */
ROM_LOAD( "prom.7f", 0x0000, 0x0020, 0x872b42f3 )
ROM_LOAD( "prom.4a", 0x0020, 0x0100, 0x0399f39f )
ROM_REGION(0x0200) /* sound PROMs */
ROM_LOAD( "prom.1m", 0x0000, 0x0100, 0xa9cc86bf )
ROM_LOAD( "prom.3m", 0x0100, 0x0100, 0x77245b66 ) /* timing - not used */
ROM_END
static void ponpoko_decode(void)
{
int i, j;
unsigned char *RAM, temp;
/* The gfx data is swapped wrt the other Pac Man hardware games. */
/* Here we revert it to the usual format. */
/* Characters */
RAM = Machine->memory_region[1];
for (i = 0; i < 0x1000; i += 0x10)
{
for (j = 0; j < 8; j++)
{
temp = RAM[i+j+0x08];
RAM[i+j+0x08] = RAM[i+j+0x00];
RAM[i+j+0x00] = temp;
}
}
/* Sprites */
for (; i < 0x2000; i += 0x20)
{
for (j = 0; j < 8; j++)
{
temp = RAM[i+j+0x18];
RAM[i+j+0x18] = RAM[i+j+0x10];
RAM[i+j+0x10] = RAM[i+j+0x08];
RAM[i+j+0x08] = RAM[i+j+0x00];
RAM[i+j+0x00] = temp;
}
}
}
static void eyes_decode(void)
{
int i;
unsigned char *RAM;
/* CPU ROMs */
/* Data lines D3 and D5 swapped */
RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
for (i = 0; i < 0x4000; i++)
{
RAM[i] = (RAM[i] & 0xc0) | ((RAM[i] & 0x08) << 2) |
(RAM[i] & 0x10) | ((RAM[i] & 0x20) >> 2) | (RAM[i] & 0x07);
}
/* Graphics ROMs */
/* Data lines D4 and D6 and address lines A0 and A2 are swapped */
RAM = Machine->memory_region[1];
for (i = 0; i < 0x2000; i += 8)
{
int j;
unsigned char swapbuffer[8];
for (j = 0; j < 8; j++)
{
swapbuffer[j] = RAM[i + (j >> 2) + (j & 2) + ((j & 1) << 2)];
}
for (j = 0; j < 8; j++)
{
char ch = swapbuffer[j];
RAM[i + j] = (ch & 0x80) | ((ch & 0x10) << 2) |
(ch & 0x20) | ((ch & 0x40) >> 2) | (ch & 0x0f);
}
}
}
static void copytoscreen(int mem, int len, int screen, int direction)
{
char buf[10];
int hi;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
hi = (RAM[mem + direction*3] & 0x0f) +
(RAM[mem + direction*3] >> 4) * 10 +
(RAM[mem + direction*2] & 0x0f) * 100 +
(RAM[mem + direction*2] >> 4) * 1000 +
(RAM[mem + direction*1] & 0x0f) * 10000 +
(RAM[mem + direction*1] >> 4) * 100000;
if (len == 4)
{
hi += (RAM[mem + 0*direction] & 0x0f) * 1000000 +
(RAM[mem + 0*direction] >> 4) * 10000000;
}
if (hi)
{
sprintf(buf,"%8d",hi);
if (buf[2] != ' ') videoram_w(screen + direction*0, buf[2]-'0');
if (buf[3] != ' ') videoram_w(screen + direction*1, buf[3]-'0');
if (buf[4] != ' ') videoram_w(screen + direction*2, buf[4]-'0');
if (buf[5] != ' ') videoram_w(screen + direction*3, buf[5]-'0');
if (buf[6] != ' ') videoram_w(screen + direction*4, buf[6]-'0');
videoram_w(screen + direction*5, buf[7]-'0');
}
}
static int pacman_hiload(void)
{
static int resetcount;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* during a reset, leave time to the game to clear the screen */
if (++resetcount < 60) return 0;
/* wait for "HIGH SCORE" to be on screen */
if (memcmp(&RAM[0x43d1],"\x48\x47",2) == 0)
{
void *f;
resetcount = 0;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x4e88],4);
/* also copy the high score to the screen, otherwise it won't be */
/* updated */
copytoscreen(0x4e8b, 4, 0x3f2, -1);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void pacman_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0x4e88],4);
osd_fclose(f);
}
}
static int crush_hiload(void)
{
static int resetcount;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* during a reset, leave time to the game to clear the screen */
if (++resetcount < 60) return 0;
/* wait for "HI SCORE" to be on screen */
if (memcmp(&RAM[0x43d0],"\x53\x40",2) == 0)
{
void *f;
resetcount = 0;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x4c80],3);
/* also copy the high score to the screen, otherwise it won't be */
/* updated */
copytoscreen(0x4c83, 3, 0x3f3, -1);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void crush_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0x4c80],3);
osd_fclose(f);
}
}
static int eyes_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if (memcmp(&RAM[0x4d30],"\x90\x52\x00",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x4cf7],0x3c);
/* also copy the high score to the screen, otherwise it won't be */
/* updated */
copytoscreen(0x4cfd, 3, 0x3f2, -1);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void eyes_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0x4cf7],0x3c);
osd_fclose(f);
}
}
static int mrtnt_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if (memcmp(&RAM[0x4cec],"\x40\x86\x01",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x4cb3], 6 * 10);
/* also copy the high score to the screen, otherwise it won't be */
/* updated */
copytoscreen(0x4cb9, 3, 0x3f2, -1);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void mrtnt_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0x4cb3], 6 * 10);
osd_fclose(f);
}
}
static int ponpoko_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if (memcmp(&RAM[0x406c],"\x0f\x0f\x0f\x0f\x0f\x00",6) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x4e5a],0x14);
memcpy(&RAM[0x4c40], &RAM[0x4e5a], 3);
/* also copy the high score to the screen, otherwise it won't be */
/* updated */
copytoscreen(0x4e59, 3, 0x6c, 1);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void ponpoko_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0x4e5a],0x14);
osd_fclose(f);
}
}
static int theglob_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
int address = 0x4c48;
if (strcmp(Machine->gamedrv->name, "beastf") == 0) address = 0x4c46;
if (memcmp(&RAM[address],"MOB",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[address],0x50);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void theglob_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
int address = 0x4c48;
if (strcmp(Machine->gamedrv->name, "beastf") == 0) address = 0x4c46;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[address],0x50);
osd_fclose(f);
}
}
#define BASE_CREDITS "Allard van der Bas (original code)\nNicola Salmoria (MAME driver)"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -