diff --git a/src/burn/drv/megadrive/megadrive.cpp b/src/burn/drv/megadrive/megadrive.cpp index 0dd25608f..fd0fb0b5c 100644 --- a/src/burn/drv/megadrive/megadrive.cpp +++ b/src/burn/drv/megadrive/megadrive.cpp @@ -2941,6 +2941,11 @@ static void MegadriveSetupSRAM() } } +static INT32 __fastcall MegadriveTAScallback(void) +{ + return 0; // disable +} + INT32 MegadriveInit() { Mem = NULL; @@ -2992,6 +2997,7 @@ INT32 MegadriveInit() SekSetWriteWordHandler(4, MegadriveIOWriteWord); SekSetIrqCallback( MegadriveIrqCallback ); + SekSetTASCallback(MegadriveTAScallback); SekClose(); } diff --git a/src/cpu/m68000_intf.cpp b/src/cpu/m68000_intf.cpp index c70691fc7..94fca5727 100644 --- a/src/cpu/m68000_intf.cpp +++ b/src/cpu/m68000_intf.cpp @@ -761,6 +761,15 @@ extern "C" void M68KcmpildCallback(UINT32 val, INT32 reg) pSekExt->CmpCallback(val, reg); } } + +extern "C" INT32 M68KTASCallback() +{ + if (pSekExt->TASCallback) { + return pSekExt->TASCallback(); + } + + return 1; // enable by default +} #endif // ---------------------------------------------------------------------------- @@ -1602,6 +1611,18 @@ INT32 SekSetCmpCallback(pSekCmpCallback pCallback) return 0; } +INT32 SekSetTASCallback(pSekTASCallback pCallback) +{ +#if defined FBA_DEBUG + if (!DebugCPU_SekInitted) bprintf(PRINT_ERROR, _T("SekSetTASCallback called without init\n")); + if (nSekActive == -1) bprintf(PRINT_ERROR, _T("SekSetTASCallback called when no CPU open\n")); +#endif + + pSekExt->TASCallback = pCallback; + + return 0; +} + // Set handlers INT32 SekSetReadByteHandler(INT32 i, pSekReadByteHandler pHandler) { @@ -1981,6 +2002,7 @@ struct m68ki_cpu_core_pointerblock void (*pc_changed_callback)(unsigned int new_pc); /* Called when the PC changes by a large amount */ void (*set_fc_callback)(unsigned int new_fc); /* Called when the CPU function code changes */ void (*instr_hook_callback)(void); /* Called every instruction cycle prior to execution */ + int (*tas_instr_callback)(void); /* Called when a TAS instruction is encountered */ }; diff --git a/src/cpu/m68000_intf.h b/src/cpu/m68000_intf.h index 9e4b0f42a..1c183eee3 100644 --- a/src/cpu/m68000_intf.h +++ b/src/cpu/m68000_intf.h @@ -75,6 +75,7 @@ typedef INT32 (__fastcall *pSekResetCallback)(); typedef INT32 (__fastcall *pSekRTECallback)(); typedef INT32 (__fastcall *pSekIrqCallback)(INT32 irq); typedef INT32 (__fastcall *pSekCmpCallback)(UINT32 val, INT32 reg); +typedef INT32 (__fastcall *pSekTASCallback)(); extern INT32 nSekCycles[SEK_MAX], nSekCPUType[SEK_MAX]; @@ -96,6 +97,7 @@ struct SekExt { pSekRTECallback RTECallback; pSekIrqCallback IrqCallback; pSekCmpCallback CmpCallback; + pSekTASCallback TASCallback; }; #define SEK_DEF_READ_WORD(i, a) { UINT16 d; d = (UINT16)(pSekExt->ReadByte[i](a) << 8); d |= (UINT16)(pSekExt->ReadByte[i]((a) + 1)); return d; } @@ -226,6 +228,7 @@ INT32 SekSetResetCallback(pSekResetCallback pCallback); INT32 SekSetRTECallback(pSekRTECallback pCallback); INT32 SekSetIrqCallback(pSekIrqCallback pCallback); INT32 SekSetCmpCallback(pSekCmpCallback pCallback); +INT32 SekSetTASCallback(pSekTASCallback pCallback); // Get a CPU's PC UINT32 SekGetPC(INT32 n); diff --git a/src/cpu/m68k/m68kconf.h b/src/cpu/m68k/m68kconf.h index ad7187c31..b0d4bcb76 100644 --- a/src/cpu/m68k/m68kconf.h +++ b/src/cpu/m68k/m68kconf.h @@ -126,8 +126,8 @@ /* If ON, CPU will call the callback when it encounters a tas * instruction. */ -#define M68K_TAS_HAS_CALLBACK OPT_ON -#define M68K_TAS_CALLBACK() your_tas_handler_function() +#define M68K_TAS_HAS_CALLBACK OPT_SPECIFY_HANDLER +#define M68K_TAS_CALLBACK() M68KTASCallback() /* If ON, CPU will call the set fc callback on every memory access to @@ -217,6 +217,7 @@ void M68KResetCallback(void); int M68KIRQAcknowledge(int nIRQ); void M68KRTECallback(void); void M68KcmpildCallback(unsigned int val, int reg); +int M68KTASCallback(void); unsigned int __fastcall M68KFetchByte(unsigned int a); unsigned int __fastcall M68KFetchWord(unsigned int a);