mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
Fixed COP420 instructions JSRP, LBI, LQID, and SKT. Draco now has sound.
This commit is contained in:
parent
8452d1d622
commit
9962c0f826
@ -403,7 +403,7 @@ INSTRUCTION(jp)
|
||||
{
|
||||
// JSRP
|
||||
UINT8 a = opcode & 0x3f;
|
||||
PUSH(PC + 1);
|
||||
PUSH(PC);
|
||||
PC = 0x80 | a;
|
||||
}
|
||||
}
|
||||
@ -530,7 +530,7 @@ INSTRUCTION(ld)
|
||||
|
||||
INSTRUCTION(lqid)
|
||||
{
|
||||
PUSH(PC + 1);
|
||||
PUSH(PC);
|
||||
PC = (PC & 0x300) | (A << 4) | RAM_R(B);
|
||||
WRITE_Q(ROM(PC));
|
||||
POP();
|
||||
|
@ -13,8 +13,11 @@
|
||||
|
||||
TODO:
|
||||
|
||||
- fix XAS
|
||||
- run interrupt test suite
|
||||
- run production test suite
|
||||
- fix INIL
|
||||
- remove LBIops
|
||||
- INIL
|
||||
|
||||
*/
|
||||
|
||||
@ -118,12 +121,12 @@ static void cop420_op23(UINT8 opcode)
|
||||
|
||||
static const s_opcode opcode_33_map[256]=
|
||||
{
|
||||
{1, inil },{1, skgbz0 },{1, illegal },{1, skgbz2 },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, skgbz0 },{1, illegal },{1, skgbz2 },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, skgbz1 },{1, illegal },{1, skgbz3 },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, skgz },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, inin },{1, illegal },{1, ing },{1, illegal },{1, cqma },{1, illegal },{1, inl },{1, illegal },
|
||||
{1, inin },{1, inil },{1, ing },{1, illegal },{1, cqma },{1, illegal },{1, inl },{1, illegal },
|
||||
{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, illegal },{1, omg },{1, illegal },{1, camq },{1, illegal },{1, obd },{1, illegal },
|
||||
|
||||
@ -136,14 +139,14 @@ static const s_opcode opcode_33_map[256]=
|
||||
{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
|
||||
{1, illegal },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },{1, lbi },
|
||||
|
||||
{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },{1, illegal },
|
||||
@ -247,7 +250,7 @@ static void cop420_init(int index, int clock, const void *config, int (*irqcallb
|
||||
timer_adjust_periodic(cop420_serial_timer, attotime_zero, index, ATTOTIME_IN_HZ(clock));
|
||||
|
||||
cop420_counter_timer = timer_alloc(cop420_counter_tick, NULL);
|
||||
timer_adjust_periodic(cop420_counter_timer, attotime_zero, index, ATTOTIME_IN_HZ(clock / 1024));
|
||||
timer_adjust_periodic(cop420_counter_timer, attotime_zero, index, ATTOTIME_IN_HZ(clock));
|
||||
|
||||
for (i=0; i<256; i++) InstLen[i]=1;
|
||||
|
||||
@ -262,10 +265,7 @@ static void cop420_init(int index, int clock, const void *config, int (*irqcallb
|
||||
for (i=0x38; i<0x40; i++) LBIops[i] = 1;
|
||||
|
||||
for (i=0; i<256; i++) LBIops33[i] = 0;
|
||||
for (i=0x81; i<0x89; i++) LBIops33[i] = 1;
|
||||
for (i=0x91; i<0x99; i++) LBIops33[i] = 1;
|
||||
for (i=0xa1; i<0xa9; i++) LBIops33[i] = 1;
|
||||
for (i=0xb1; i<0xb9; i++) LBIops33[i] = 1;
|
||||
for (i=0x80; i<0xc0; i++) LBIops33[i] = 1;
|
||||
|
||||
state_save_register_item("cop420", index, PC);
|
||||
state_save_register_item("cop420", index, R.PREVPC);
|
||||
|
@ -216,19 +216,19 @@ offs_t cop420_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opr
|
||||
{
|
||||
sprintf(buffer, "LEI %u", next_opcode & 0xF);
|
||||
}
|
||||
else if (next_opcode >= 0x81 && next_opcode <= 0x88)
|
||||
else if (next_opcode >= 0x80 && next_opcode <= 0x8F)
|
||||
{
|
||||
sprintf(buffer, "LBI 0,%u", next_opcode & 0xF);
|
||||
}
|
||||
else if (next_opcode >= 0x91 && next_opcode <= 0x98)
|
||||
else if (next_opcode >= 0x90 && next_opcode <= 0x9F)
|
||||
{
|
||||
sprintf(buffer, "LBI 1,%u", next_opcode & 0xF);
|
||||
}
|
||||
else if (next_opcode >= 0xA1 && next_opcode <= 0xA8)
|
||||
else if (next_opcode >= 0xA0 && next_opcode <= 0xAF)
|
||||
{
|
||||
sprintf(buffer, "LBI 2,%u", next_opcode & 0xF);
|
||||
}
|
||||
else if (next_opcode >= 0xB1 && next_opcode <= 0xB8)
|
||||
else if (next_opcode >= 0xB0 && next_opcode <= 0xBF)
|
||||
{
|
||||
sprintf(buffer, "LBI 3,%u", next_opcode & 0xF);
|
||||
}
|
||||
@ -236,10 +236,6 @@ offs_t cop420_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opr
|
||||
{
|
||||
switch (next_opcode)
|
||||
{
|
||||
case 0x00:
|
||||
sprintf(buffer, "INIL");
|
||||
break;
|
||||
|
||||
case 0x01:
|
||||
sprintf(buffer, "SKGBZ 0");
|
||||
break;
|
||||
@ -264,6 +260,10 @@ offs_t cop420_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opr
|
||||
sprintf(buffer, "ININ");
|
||||
break;
|
||||
|
||||
case 0x29:
|
||||
sprintf(buffer, "INIL");
|
||||
break;
|
||||
|
||||
case 0x2A:
|
||||
sprintf(buffer, "ING");
|
||||
break;
|
||||
|
@ -12,7 +12,6 @@
|
||||
TODO:
|
||||
|
||||
- move set_cpu_mode timer call to MDRV
|
||||
- fix COP420 core to get sound in Draco
|
||||
|
||||
*/
|
||||
|
||||
@ -708,7 +707,6 @@ static MACHINE_DRIVER_START( draco )
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MDRV_SOUND_ADD(CDP1869, DRACO_CHR2)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
MDRV_SOUND_ADD(AY8910, DRACO_SND_CHR1)
|
||||
MDRV_SOUND_CONFIG(ay8910_interface)
|
||||
@ -764,4 +762,4 @@ ROM_END
|
||||
GAME( 1980, destryer, 0, destryer, destryer, 0, ROT90, "Cidelsa", "Destroyer (Cidelsa) (set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1980, destryea, destryer, destryea, destryer, 0, ROT90, "Cidelsa", "Destroyer (Cidelsa) (set 2)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, altair, 0, altair, altair, 0, ROT90, "Cidelsa", "Altair", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, draco, 0, draco, draco, 0, ROT90, "Cidelsa", "Draco", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, draco, 0, draco, draco, 0, ROT90, "Cidelsa", "Draco", GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user