Add TAS Callback to sek, hookup in Megadrive driver (Gargoyles and Ex Mutants are now working)
This commit is contained in:
parent
84c3fe7220
commit
6c9aeb128f
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue