Add Spectrum 2000 (vertical), adjust clones, fix horizontal scrolling

This commit is contained in:
iq_132 2014-04-13 23:41:40 +00:00
parent 6f8e8475ea
commit e3838de03b
1 changed files with 128 additions and 80 deletions

View File

@ -4970,7 +4970,7 @@ static INT32 FirehawkDraw()
{
UINT16 *scroll = (UINT16*)DrvScrollRAM;
INT32 scrolly = (BURN_ENDIAN_SWAP_INT16(scroll[3]) + 0x100) & 0x1ff;
INT32 scrollx = (BURN_ENDIAN_SWAP_INT16(scroll[2]) + 0x000) & 0xfff;
INT32 scrollx = (BURN_ENDIAN_SWAP_INT16(scroll[1]) - 0x100) & 0xfff;
common_draw(1, scrollx, scrolly, 0, 0, 0x200);
@ -7112,26 +7112,30 @@ struct BurnDriver BurnDrvMangchi = {
};
// Fire Hawk
// Spectrum 2000 (vertical)
static struct BurnRomInfo firehawkRomDesc[] = {
{ "fhawk_p1.u59", 0x080000, 0xd6d71a50, 1 | BRF_PRG | BRF_ESS }, // 0 68k code
{ "fhawk_p2.u60", 0x080000, 0x9f35d245, 1 | BRF_PRG | BRF_ESS }, // 1
static struct BurnRomInfo spec2kRomDesc[] = {
{ "u124", 0x040000, 0xdbd6f65d, 1 | BRF_PRG | BRF_ESS }, // 0 68k code
{ "u120", 0x040000, 0xbe53e243, 1 | BRF_PRG | BRF_ESS }, // 1
{ "fhawk_s1.u40", 0x020000, 0xc6609c39, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 code
{ "u103", 0x010000, 0xf4e4fb10, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 code
{ "fhawk_g1.uc6", 0x200000, 0x2ab0b06b, 4 | BRF_GRA }, // 3 Tiles
{ "fhawk_g2.uc5", 0x200000, 0xd11bfa20, 4 | BRF_GRA }, // 4
{ "fhawk_g3.uc2", 0x200000, 0xcae72ff4, 5 | BRF_GRA }, // 5 Sprites
{ "u3", 0x020000, 0x921503b8, 3 | BRF_GRA }, // 3 Characters
{ "fhawk_s2.u36", 0x040000, 0xd16aaaad, 6 | BRF_SND }, // 6 OKI1 Samples
{ "uc3", 0x200000, 0x1d087122, 4 | BRF_GRA }, // 4 Tiles
{ "uc2", 0x200000, 0x998dc05c, 4 | BRF_GRA }, // 5
{ "fhawk_s3.u41", 0x040000, 0x3fdcfac2, 7 | BRF_SND }, // 7 OKI2 Samples
{ "uc1", 0x200000, 0x3139a213, 5 | BRF_GRA }, // 6 Sprites
{ "u101", 0x040000, 0xd16aaaad, 6 | BRF_SND }, // 7 OKI1 Samples
{ "u106", 0x080000, 0x65d61f3a, 7 | BRF_SND }, // 8 OKI2 Samples
};
STD_ROM_PICK(firehawk)
STD_ROM_FN(firehawk)
STD_ROM_PICK(spec2k)
STD_ROM_FN(spec2k)
static void pFirehawkZ80Callback()
{
@ -7142,76 +7146,11 @@ static void pFirehawkZ80Callback()
ZetMapArea(0xf000, 0xfeff, 0, DrvZ80RAM);
ZetMapArea(0xf000, 0xfeff, 1, DrvZ80RAM);
ZetMapArea(0xf000, 0xfeff, 2, DrvZ80RAM);
ZetSetWriteHandler(firehawk_sound_write);
ZetSetReadHandler(firehawk_sound_read);
ZetClose();
}
static INT32 FirehawkLoadCallback()
{
if (BurnLoadRom(Drv68KROM + 0x000000, 0, 2)) return 1;
if (BurnLoadRom(Drv68KROM + 0x000001, 1, 2)) return 1;
if (BurnLoadRom(DrvZ80ROM + 0x000000, 2, 1)) return 1;
memset (DrvGfxROM0, 0xff, 0x20);
if (BurnLoadRom(DrvGfxROM1 + 0x000000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x200000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM2 + 0x000000, 5, 1)) return 1;
if (BurnLoadRom(DrvSndROM0 + 0x000000, 6, 1)) return 1;
if (BurnLoadRom(DrvSndROM1 + 0x040000, 7, 1)) return 1;
GrdnstrmGfxDecode(0x20, 0x400000, 0x200000);
return 0;
}
static INT32 FirehawkInit()
{
screen_flip_y = 1;
return AfegaInit(FirehawkLoadCallback, pFirehawkZ80Callback, 1);
}
struct BurnDriver BurnDrvFirehawk = {
"firehawk", NULL, NULL, NULL, "2001",
"Fire Hawk\0", NULL, "ESD", "NMK16",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_MISC_POST90S, GBF_VERSHOOT, 0,
NULL, firehawkRomInfo, firehawkRomName, NULL, NULL, CommonInputInfo, FirehawkDIPInfo,
FirehawkInit, AfegaExit, AfegaFrame, FirehawkDraw, DrvScan, NULL, 0x300,
256, 224, 4, 3
};
// Spectrum 2000 (Euro)
static struct BurnRomInfo spec2kRomDesc[] = {
{ "yonatech5.u124", 0x040000, 0x72ab5c05, 1 | BRF_PRG | BRF_ESS }, // 0 68k code
{ "yonatech6.u120", 0x040000, 0x7e44bd9c, 1 | BRF_PRG | BRF_ESS }, // 1
{ "yonatech1.u103", 0x010000, 0xef5acda7, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 code
{ "yonatech4.u3", 0x020000, 0x5626b08e, 3 | BRF_GRA }, // 3 Characters
{ "u153.bin", 0x200000, 0xa00bbf8f, 4 | BRF_GRA }, // 4 Tiles
{ "u152.bin", 0x200000, 0xf6423fab, 4 | BRF_GRA }, // 5
{ "u154.bin", 0x200000, 0xf77b764e, 5 | BRF_GRA }, // 6 Sprites
{ "yonatech2.u101", 0x020000, 0x4160f172, 6 | BRF_SND }, // 7 OKI1 Samples
{ "yonatech3.u106", 0x080000, 0x6644c404, 7 | BRF_SND }, // 8 OKI2 Samples
};
STD_ROM_PICK(spec2k)
STD_ROM_FN(spec2k)
static INT32 Spec2kLoadCallback()
{
if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1;
@ -7250,11 +7189,120 @@ static INT32 Spec2kInit()
struct BurnDriver BurnDrvSpec2k = {
"spec2k", NULL, NULL, NULL, "2000",
"Spectrum 2000 (Euro)\0", NULL, "YONA Tech", "NMK16",
"Spectrum 2000 (vertical)\0", NULL, "YONA Tech", "NMK16",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_MISC_POST90S, GBF_VERSHOOT, 0,
BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_MISC_POST90S, GBF_VERSHOOT, 0,
NULL, spec2kRomInfo, spec2kRomName, NULL, NULL, CommonInputInfo, Spec2kDIPInfo,
Spec2kInit, AfegaExit, AfegaFrame, FirehawkDraw, DrvScan, NULL, 0x300,
224, 256, 3, 4
};
// Spectrum 2000 (horizontal, buggy) (Europe)
static struct BurnRomInfo spec2khRomDesc[] = {
{ "yonatech5.u124", 0x040000, 0x72ab5c05, 1 | BRF_PRG | BRF_ESS }, // 0 68k code
{ "yonatech6.u120", 0x040000, 0x7e44bd9c, 1 | BRF_PRG | BRF_ESS }, // 1
{ "yonatech1.u103", 0x010000, 0xef5acda7, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 code
{ "yonatech4.u3", 0x020000, 0x5626b08e, 3 | BRF_GRA }, // 3 Characters
{ "u153.bin", 0x200000, 0xa00bbf8f, 4 | BRF_GRA }, // 4 Tiles
{ "u152.bin", 0x200000, 0xf6423fab, 4 | BRF_GRA }, // 5
{ "u154.bin", 0x200000, 0xf77b764e, 5 | BRF_GRA }, // 6 Sprites
{ "yonatech2.u101", 0x020000, 0x4160f172, 6 | BRF_SND }, // 7 OKI1 Samples
{ "yonatech3.u106", 0x080000, 0x6644c404, 7 | BRF_SND }, // 8 OKI2 Samples
};
STD_ROM_PICK(spec2kh)
STD_ROM_FN(spec2kh)
static INT32 Spec2khInit()
{
screen_flip_y = 1;
INT32 nRet = AfegaInit(Spec2kLoadCallback, pFirehawkZ80Callback, 1);
if (nRet == 0) {
decryptcode(0x80000, 17,13,14,15,16);
}
return nRet;
}
struct BurnDriver BurnDrvSpec2kh = {
"spec2kh", "spec2k", NULL, NULL, "2000",
"Spectrum 2000 (horizontal, buggy) (Europe)\0", NULL, "YONA Tech", "NMK16",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_MISC_POST90S, GBF_VERSHOOT, 0,
NULL, spec2khRomInfo, spec2khRomName, NULL, NULL, CommonInputInfo, Spec2kDIPInfo,
Spec2khInit, AfegaExit, AfegaFrame, FirehawkDraw, DrvScan, NULL, 0x300,
256, 224, 4, 3
};
// Fire Hawk (horizontal)
static struct BurnRomInfo firehawkRomDesc[] = {
{ "fhawk_p1.u59", 0x080000, 0xd6d71a50, 1 | BRF_PRG | BRF_ESS }, // 0 68k code
{ "fhawk_p2.u60", 0x080000, 0x9f35d245, 1 | BRF_PRG | BRF_ESS }, // 1
{ "fhawk_s1.u40", 0x020000, 0xc6609c39, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 code
{ "fhawk_g1.uc6", 0x200000, 0x2ab0b06b, 4 | BRF_GRA }, // 3 Tiles
{ "fhawk_g2.uc5", 0x200000, 0xd11bfa20, 4 | BRF_GRA }, // 4
{ "fhawk_g3.uc2", 0x200000, 0xcae72ff4, 5 | BRF_GRA }, // 5 Sprites
{ "fhawk_s2.u36", 0x040000, 0xd16aaaad, 6 | BRF_SND }, // 6 OKI1 Samples
{ "fhawk_s3.u41", 0x040000, 0x3fdcfac2, 7 | BRF_SND }, // 7 OKI2 Samples
};
STD_ROM_PICK(firehawk)
STD_ROM_FN(firehawk)
static INT32 FirehawkLoadCallback()
{
if (BurnLoadRom(Drv68KROM + 0x000000, 0, 2)) return 1;
if (BurnLoadRom(Drv68KROM + 0x000001, 1, 2)) return 1;
if (BurnLoadRom(DrvZ80ROM + 0x000000, 2, 1)) return 1;
memset (DrvGfxROM0, 0xff, 0x20);
if (BurnLoadRom(DrvGfxROM1 + 0x000000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x200000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM2 + 0x000000, 5, 1)) return 1;
if (BurnLoadRom(DrvSndROM0 + 0x000000, 6, 1)) return 1;
if (BurnLoadRom(DrvSndROM1 + 0x040000, 7, 1)) return 1;
GrdnstrmGfxDecode(0x20, 0x400000, 0x200000);
return 0;
}
static INT32 FirehawkInit()
{
screen_flip_y = 1;
return AfegaInit(FirehawkLoadCallback, pFirehawkZ80Callback, 1);
}
struct BurnDriver BurnDrvFirehawk = {
"firehawk", "spec2k", NULL, NULL, "2001",
"Fire Hawk (horizontal)\0", NULL, "ESD", "NMK16",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_MISC_POST90S, GBF_VERSHOOT, 0,
NULL, firehawkRomInfo, firehawkRomName, NULL, NULL, CommonInputInfo, FirehawkDIPInfo,
FirehawkInit, AfegaExit, AfegaFrame, FirehawkDraw, DrvScan, NULL, 0x300,
256, 224, 4, 3
};