diff --git a/src/emu/cpu/cop400/410ops.c b/src/emu/cpu/cop400/410ops.c index f9a3f68e4ae..a460f417719 100644 --- a/src/emu/cpu/cop400/410ops.c +++ b/src/emu/cpu/cop400/410ops.c @@ -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(); diff --git a/src/emu/cpu/cop400/cop420.c b/src/emu/cpu/cop400/cop420.c index ed6d552f596..ae1b2d92656 100644 --- a/src/emu/cpu/cop400/cop420.c +++ b/src/emu/cpu/cop400/cop420.c @@ -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); diff --git a/src/emu/cpu/cop400/cop420ds.c b/src/emu/cpu/cop400/cop420ds.c index 7f3cf432108..13cbac9ca78 100644 --- a/src/emu/cpu/cop400/cop420ds.c +++ b/src/emu/cpu/cop400/cop420ds.c @@ -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; diff --git a/src/mame/drivers/cidelsa.c b/src/mame/drivers/cidelsa.c index 93e23d6c839..90caefe2ffd 100644 --- a/src/mame/drivers/cidelsa.c +++ b/src/mame/drivers/cidelsa.c @@ -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 )