|
|
1.1 ! root 1: /* ! 2: Hatari - cycInt.h ! 3: ! 4: This file is distributed under the GNU Public License, version 2 or at ! 5: your option any later version. Read the file gpl.txt for details. ! 6: */ ! 7: ! 8: #ifndef HATARI_CYCINT_H ! 9: #define HATARI_CYCINT_H ! 10: ! 11: /* Interrupt handlers in system */ ! 12: typedef enum ! 13: { ! 14: INTERRUPT_NULL, ! 15: INTERRUPT_VIDEO_VBL, ! 16: MAX_INTERRUPTS ! 17: } interrupt_id; ! 18: ! 19: ! 20: #define INT_CPU_CYCLE 1 ! 21: #define INT_MFP_CYCLE 2 ! 22: ! 23: #define INT_CPU_TO_INTERNAL 9600 ! 24: #define INT_MFP_TO_INTERNAL 31333 ! 25: ! 26: /* Convert cpu or mfp cycles to internal cycles */ ! 27: #define INT_CONVERT_TO_INTERNAL( cyc , type ) ( type == INT_CPU_CYCLE ? (cyc)*INT_CPU_TO_INTERNAL : (cyc)*INT_MFP_TO_INTERNAL ) ! 28: /* ! 29: #define INT_CONVERT_TO_INTERNAL( cyc , type ) ( type == INT_CPU_CYCLE ? cyc*INT_CPU_TO_INTERNAL :\ ! 30: ( ( (cyc*INT_MFP_TO_INTERNAL + INT_CPU_TO_INTERNAL*4 - 1) / (INT_CPU_TO_INTERNAL*4) ) * INT_CPU_TO_INTERNAL*4 ) ) ! 31: */ ! 32: ! 33: /* Convert internal cycles to real mfp or cpu cycles */ ! 34: /* Rounding is important : for example 9500 internal is 0.98 cpu and should give 1 cpu cycle, not 0 */ ! 35: /* so we do (9500+9600-1)/9600 to get the closest higher integer */ ! 36: //#define INT_CONVERT_FROM_INTERNAL( cyc , type ) ( type == INT_CPU_CYCLE ? (cyc+INT_CPU_TO_INTERNAL-1)/INT_CPU_TO_INTERNAL : (cyc+INT_MFP_TO_INTERNAL-1)/INT_MFP_TO_INTERNAL ) ! 37: #define INT_CONVERT_FROM_INTERNAL( cyc , type ) ( type == INT_CPU_CYCLE ? (cyc)/INT_CPU_TO_INTERNAL : ((cyc)+INT_MFP_TO_INTERNAL-1)/INT_MFP_TO_INTERNAL ) ! 38: ! 39: ! 40: ! 41: extern void (*PendingInterruptFunction)(void); ! 42: extern int PendingInterruptCount; ! 43: ! 44: extern void CycInt_Reset(void); ! 45: extern void CycInt_MemorySnapShot_Capture(bool bSave); ! 46: extern void CycInt_AcknowledgeInterrupt(void); ! 47: extern void CycInt_AddAbsoluteInterrupt(int CycleTime, int CycleType, interrupt_id Handler); ! 48: extern void CycInt_AddRelativeInterrupt(int CycleTime, int CycleType, interrupt_id Handler); ! 49: extern void CycInt_AddRelativeInterruptNoOffset(int CycleTime, int CycleType, interrupt_id Handler); ! 50: extern void CycInt_AddRelativeInterruptWithOffset(int CycleTime, int CycleType, interrupt_id Handler, int CycleOffset); ! 51: extern void CycInt_RemovePendingInterrupt(interrupt_id Handler); ! 52: extern void CycInt_ResumeStoppedInterrupt(interrupt_id Handler); ! 53: extern bool CycInt_InterruptActive(interrupt_id Handler); ! 54: extern int CycInt_FindCyclesPassed(interrupt_id Handler, int CycleType); ! 55: ! 56: #endif /* ifndef HATARI_CYCINT_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.