#include "inc.h" #include #include #include #include #include #define TIMERCONTROL (SCE_PC0_CPU_CYCLE | (SCE_PC_U0|SCE_PC_S0|SCE_PC_K0|SCE_PC_EXL0) | SCE_PC1_DCACHE_MISS | (SCE_PC_U1) | SCE_PC_CTE) void StartTime(void) { DI(); scePcStart(TIMERCONTROL, 0, 0); EI(); } int GetTime(void) { return scePcGetCounter0(); } float GetTimeF(void) { return (float)scePcGetCounter0()/294912.0f; } bool gotPadirx; u_long128 pad_dma_buf[scePadDmaBufferMax] __attribute__((aligned (64))); #define EPSILON 0.2f float PadAnalog(int x) { float f = (x/255.0f - 0.5f)*2.0f; if(f > EPSILON) return (f-EPSILON)/(1.0f-EPSILON); if(f < -EPSILON) return (f+EPSILON)/(1.0f-EPSILON); return 0.0f; } void ReadPad(PadData *pad) { u_int paddata; u_char rdata[32]; if(gotPadirx && scePadRead(0, 0, rdata) > 0) { pad->bits = 0xFFFF ^ ((rdata[2] << 8) | rdata[3]); if(rdata[1] == 0x73){ pad->rX = PadAnalog(rdata[4]); pad->rY = PadAnalog(rdata[5]); pad->lX = PadAnalog(rdata[6]); pad->lY = PadAnalog(rdata[7]); }else{ pad->rX = pad->rY = 0.0f; pad->lX = pad->lY = 0.0f; } } else { pad->bits = 0; } } void UpdatePad(Pad *pad) { pad->prev = pad->now; ReadPad(&pad->now); pad->rising = pad->now; pad->rising.bits &= ~pad->prev.bits; pad->falling = pad->prev; pad->falling.bits &= ~pad->now.bits; } void InitPad(void) { if(gotPadirx) { scePadInit(0); scePadPortOpen(0, 0, pad_dma_buf); } } Pad pad;