#pragma once #include "types.h" #define SH4_TIMESLICE 448 // at 112 Bangai-O doesn't start. 224 is ok /* tag, as passed on sh4_sched_register sch_cycles, the cycle duration that the callback requested (sh4_sched_request) jitter, the number of cycles that the callback was delayed, [0... 448] */ typedef int sh4_sched_callback(int tag, int sch_cycl, int jitter, void *arg); /* Register a callback to the scheduler. The returned id is used for sh4_sched_request and sh4_sched_unregister calls */ int sh4_sched_register(int tag, sh4_sched_callback* ssc, void *arg = nullptr); /*** * Unregister a callback from the scheduler. */ void sh4_sched_unregister(int id); /* current time, in SH4 cycles, referenced to boot. Does not wrap, 64 bits. */ u64 sh4_sched_now64(); /* Schedule a callback to be called sh4 *cycles* after the invocation of this function. *Cycles* range is (0, 200M]. Passing a value of -1 disables the callback. If called multiple times, only the last call is in effect */ void sh4_sched_request(int id, int cycles); /* Returns true if the callback is scheduled to be called in the future. */ bool sh4_sched_is_scheduled(int id); /* Tick for *cycles* */ void sh4_sched_tick(int cycles); void sh4_sched_ffts(); void sh4_sched_reset(bool hard); void sh4_sched_serialize(Serializer& ser); void sh4_sched_deserialize(Deserializer& deser); void sh4_sched_serialize(Serializer& ser, int id); void sh4_sched_deserialize(Deserializer& deser, int id); constexpr u32 sh4CyclesForXfer(u32 sizeUnit, u32 unitPerSecond) { return (u64)SH4_MAIN_CLOCK * sizeUnit / unitPerSecond; }