📄 scramble.c
字号:
1, /* 1 bit per pixel */
{ 0 },
{ 3, 0, 0, 0, 0, 0, 0 }, /* I "know" that this bit of the */
{ 0 }, /* graphics ROMs is 1 */
0 /* no use */
};
static struct GfxLayout theend_bulletlayout =
{
/* there is no gfx ROM for this one, it is generated by the hardware */
7,1, /* 4*1 line, I think - 7*1 to position it correctly */
1, /* just one */
1, /* 1 bit per pixel */
{ 0 },
{ 2, 2, 2, 2, 0, 0, 0 }, /* I "know" that this bit of the */
{ 0 }, /* graphics ROMs is 1 */
0 /* no use */
};
static struct GfxDecodeInfo scramble_gfxdecodeinfo[] =
{
{ 1, 0x0000, &charlayout, 0, 8 },
{ 1, 0x0000, &spritelayout, 0, 8 },
{ 1, 0x0000, &bulletlayout, 8*4, 1 }, /* 1 color code instead of 2, so all */
/* shots will be yellow */
{ -1 } /* end of array */
};
static struct GfxDecodeInfo theend_gfxdecodeinfo[] =
{
{ 1, 0x0000, &charlayout, 0, 8 },
{ 1, 0x0000, &spritelayout, 0, 8 },
{ 1, 0x0000, &theend_bulletlayout, 8*4, 2 },
{ -1 } /* end of array */
};
/* this is NOT the original color PROM - it's the Scramble one */
static unsigned char wrong_color_prom[] =
{
0x00,0x17,0xC7,0xF6,0x00,0x17,0xC0,0x3F,0x00,0x07,0xC0,0x3F,0x00,0xC0,0xC4,0x07,
0x00,0xC7,0x31,0x17,0x00,0x31,0xC7,0x3F,0x00,0xF6,0x07,0xF0,0x00,0x3F,0x07,0xC4
};
static struct AY8910interface scramble_ay8910_interface =
{
2, /* 2 chips */
14318000/8, /* 1.78975 MHz */
{ 0x30ff, 0x30ff },
{ soundlatch_r },
{ scramble_portB_r },
{ 0 },
{ 0 }
};
static struct AY8910interface frogger_ay8910_interface =
{
1, /* 1 chip */
14318000/8, /* 1.78975 MHz */
{ 0x30ff },
{ soundlatch_r },
{ frogger_portB_r },
{ 0 },
{ 0 }
};
static struct MachineDriver scramble_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
18432000/6, /* 3.072 MHz */
0,
scramble_readmem,writemem,0,0,
scramble_vh_interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
14318000/8, /* 1.78975 MHz */
3, /* memory region #3 */
sound_readmem,sound_writemem,sound_readport,sound_writeport,
ignore_interrupt,1 /* interrupts are triggered by the main CPU */
}
},
60, 2500, /* frames per second, vblank duration */
1, /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
0,
/* video hardware */
32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
scramble_gfxdecodeinfo,
32+64,8*4+2*2, /* 32 for the characters, 64 for the stars */
galaxian_vh_convert_color_prom,
VIDEO_TYPE_RASTER,
0,
scramble_vh_start,
generic_vh_stop,
galaxian_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_AY8910,
&scramble_ay8910_interface
}
}
};
/* same as Scramble, the only differences are gfxdecodeinfo and readmem */
static struct MachineDriver theend_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
18432000/6, /* 3.072 MHz */
0,
readmem,writemem,0,0,
scramble_vh_interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
14318000/8, /* 1.78975 MHz */
3, /* memory region #3 */
sound_readmem,sound_writemem,sound_readport,sound_writeport,
ignore_interrupt,1 /* interrupts are triggered by the main CPU */
}
},
60, 2500, /* frames per second, vblank duration */
1, /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
0,
/* video hardware */
32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
theend_gfxdecodeinfo,
32+64,8*4+2*2, /* 32 for the characters, 64 for the stars */
galaxian_vh_convert_color_prom,
VIDEO_TYPE_RASTER,
0,
scramble_vh_start,
generic_vh_stop,
galaxian_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_AY8910,
&scramble_ay8910_interface
}
}
};
static struct MachineDriver froggers_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
18432000/6, /* 3.072 MHz */
0,
readmem,writemem,0,0,
scramble_vh_interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
14318000/8, /* 1.78975 MHz */
3, /* memory region #3 */
froggers_sound_readmem,froggers_sound_writemem,froggers_sound_readport,froggers_sound_writeport,
ignore_interrupt,1 /* interrupts are triggered by the main CPU */
}
},
60, 2500, /* frames per second, vblank duration */
1, /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
0,
/* video hardware */
32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
scramble_gfxdecodeinfo,
32+64,8*4+2*2, /* 32 for the characters, 64 for the stars */
galaxian_vh_convert_color_prom,
VIDEO_TYPE_RASTER,
0,
scramble_vh_start,
generic_vh_stop,
galaxian_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_AY8910,
&frogger_ay8910_interface
}
}
};
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( scramble_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "2d", 0x0000, 0x0800, 0xb89207a1 )
ROM_LOAD( "2e", 0x0800, 0x0800, 0xe9b4b9eb )
ROM_LOAD( "2f", 0x1000, 0x0800, 0xa1f14f4c )
ROM_LOAD( "2h", 0x1800, 0x0800, 0x591bc0d9 )
ROM_LOAD( "2j", 0x2000, 0x0800, 0x22f11b6b )
ROM_LOAD( "2l", 0x2800, 0x0800, 0x705ffe49 )
ROM_LOAD( "2m", 0x3000, 0x0800, 0xea26c35c )
ROM_LOAD( "2p", 0x3800, 0x0800, 0x94d8f5e3 )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "5f", 0x0000, 0x0800, 0x5f30311a )
ROM_LOAD( "5h", 0x0800, 0x0800, 0x516e029e )
ROM_REGION(0x0020) /* color prom */
ROM_LOAD( "scramble.clr", 0x0000, 0x0020, 0x4e3caeab )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "5c", 0x0000, 0x0800, 0xbcd297f0 )
ROM_LOAD( "5d", 0x0800, 0x0800, 0xde7912da )
ROM_LOAD( "5e", 0x1000, 0x0800, 0xba2fa933 )
ROM_END
ROM_START( atlantis_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "2c", 0x0000, 0x0800, 0x0e485b9a )
ROM_LOAD( "2e", 0x0800, 0x0800, 0xc1640513 )
ROM_LOAD( "2f", 0x1000, 0x0800, 0xeec265ee )
ROM_LOAD( "2h", 0x1800, 0x0800, 0xa5d2e442 )
ROM_LOAD( "2j", 0x2000, 0x0800, 0x45f7cf34 )
ROM_LOAD( "2l", 0x2800, 0x0800, 0xf335b96b )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "5f", 0x0000, 0x0800, 0x57f9c6b9 )
ROM_LOAD( "5h", 0x0800, 0x0800, 0xe989f325 )
ROM_REGION(0x0020) /* color prom */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "5c", 0x0000, 0x0800, 0xbcd297f0 )
ROM_LOAD( "5d", 0x0800, 0x0800, 0xde7912da )
ROM_LOAD( "5e", 0x1000, 0x0800, 0xba2fa933 )
ROM_END
ROM_START( theend_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "ic13", 0x0000, 0x0800, 0x90e5ab14 )
ROM_LOAD( "ic14", 0x0800, 0x0800, 0x950f0a07 )
ROM_LOAD( "ic15", 0x1000, 0x0800, 0x6786bcf5 )
ROM_LOAD( "ic16", 0x1800, 0x0800, 0x380a0017 )
ROM_LOAD( "ic17", 0x2000, 0x0800, 0xaf067b7f )
ROM_LOAD( "ic18", 0x2800, 0x0800, 0xa0411b93 )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "ic30", 0x0000, 0x0800, 0x527fd384 )
ROM_LOAD( "ic31", 0x0800, 0x0800, 0xaf6d09b6 )
ROM_REGION(0x0020) /* color prom */
ROM_LOAD( "6331-1j.86", 0x0000, 0x0020, 0x24652bc4 )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "ic56", 0x0000, 0x0800, 0x3b2c2f70 )
ROM_LOAD( "ic55", 0x0800, 0x0800, 0xe0429e50 )
ROM_END
ROM_START( froggers_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "vid_d2.bin", 0x0000, 0x0800, 0xc103066e )
ROM_LOAD( "vid_e2.bin", 0x0800, 0x0800, 0xf08bc094 )
ROM_LOAD( "vid_f2.bin", 0x1000, 0x0800, 0x637a2ff8 )
ROM_LOAD( "vid_h2.bin", 0x1800, 0x0800, 0x04c027a5 )
ROM_LOAD( "vid_j2.bin", 0x2000, 0x0800, 0xfbdfbe74 )
ROM_LOAD( "vid_l2.bin", 0x2800, 0x0800, 0x8a4389e1 )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "vid_f5.bin", 0x0000, 0x0800, 0x658745f8 )
ROM_LOAD( "vid_h5.bin", 0x0800, 0x0800, 0x05f7d883 )
ROM_REGION(0x0020) /* color PROMs */
ROM_LOAD( "vid_e6.bin", 0x0000, 0x0020, 0x0b878b54 )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "snd_c5.bin", 0x0000, 0x0800, 0xe8ab0256 )
ROM_LOAD( "snd_d5.bin", 0x0800, 0x0800, 0x7380a48f )
ROM_LOAD( "snd_e5.bin", 0x1000, 0x0800, 0x31d7eb27 )
ROM_END
ROM_START( amidars_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "am2d", 0x0000, 0x0800, 0x24b79547 )
ROM_LOAD( "am2e", 0x0800, 0x0800, 0x4c64161e )
ROM_LOAD( "am2f", 0x1000, 0x0800, 0xb3987a72 )
ROM_LOAD( "am2h", 0x1800, 0x0800, 0x29873461 )
ROM_LOAD( "am2j", 0x2000, 0x0800, 0x0fdd54d8 )
ROM_LOAD( "am2l", 0x2800, 0x0800, 0x5382f7ed )
ROM_LOAD( "am2m", 0x3000, 0x0800, 0x1d7109e9 )
ROM_LOAD( "am2p", 0x3800, 0x0800, 0xc9163ac6 )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "am5f", 0x0000, 0x0800, 0x2082ad0a )
ROM_LOAD( "am5h", 0x0800, 0x0800, 0x3029f94f )
ROM_REGION(0x0020) /* color prom */
ROM_LOAD( "amidar.clr", 0x0000, 0x0020, 0xf940dcc3 )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "am5c", 0x0000, 0x1000, 0x8ca7b750 )
ROM_LOAD( "am5d", 0x1000, 0x1000, 0x9b5bdc0a )
ROM_END
static void froggers_decode(void)
{
int A;
unsigned char *RAM;
/* the first ROM of the second CPU has data lines D0 and D1 swapped. Decode it. */
RAM = Machine->memory_region[Machine->drv->cpu[1].memory_region];
for (A = 0;A < 0x0800;A++)
RAM[A] = (RAM[A] & 0xfc) | ((RAM[A] & 1) << 1) | ((RAM[A] & 2) >> 1);
}
static int scramble_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* check if the hi score table has already been initialized */
if ((memcmp(&RAM[0x4200],"\x00\x00\x01",3) == 0) &&
(memcmp(&RAM[0x421B],"\x00\x00\x01",3) == 0))
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x4200],0x1E);
/* copy high score */
memcpy(&RAM[0x40A8],&RAM[0x4200],3);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void scramble_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[0x4200],0x1E);
osd_fclose(f);
}
}
static int atlantis_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* check if the hi score table has already been initialized */
if (memcmp(&RAM[0x403D],"\x00\x00\x00",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x403D],4*11);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void atlantis_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[0x403D],4*11);
osd_fclose(f);
}
}
static int theend_hiload(void)
{
static int loop = 0;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* check if the hi score table has already been initialized */
/* the high score table is intialized to all 0, so first of all */
/* we dirty it, then we wait for it to be cleared again */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -