/* * pad.h * * C++ class for reading the controller pads */ #ifndef PADH_ #define PADH_ class CPad { public: enum side { LEFT, RIGHT }; /* * padno 1 or 2, side LEFT or RIGHT */ CPad(int padno, side theside); int LeftPressed(); int RightPressed(); int UpPressed(); int DownPressed(); int StartPressed(); int SelectPressed(); int Top1Pressed(); int Top2Pressed(); static int mInitialised; private: enum padstatus { PADLleft = 0x8000, PADLdown = 0x4000, PADLright = 0x2000, PADLup = 0x1000, PADstart = 0x0800, PADselect = 0x0100, PADRleft = 0x0080, PADRdown = 0x0040, PADRright = 0x0020, PADRup = 0x0010, PADR1 = 0x0008, PADR2 = 0x0004, PADL1 = 0x0002, PADL2 = 0x0001 }; static volatile unsigned char* mController1; static volatile unsigned char* mController2; volatile unsigned char* mControllerByte; side mSide; int PadRead(); }; inline int CPad::PadRead() { return ~(*(mControllerByte+3) | *(mControllerByte+2)<<8); } inline int CPad::LeftPressed() { if (mSide==LEFT) { return (PadRead() & PADLleft); } else { return (PadRead() & PADRleft); } } inline int CPad::RightPressed() { if (mSide==LEFT) { return (PadRead() & PADLright); } else { return (PadRead() & PADRright); } } inline int CPad::UpPressed() { if (mSide==LEFT) { return (PadRead() & PADLup); } else { return (PadRead() & PADRup); } } inline int CPad::DownPressed() { if (mSide==LEFT) { return (PadRead() & PADLdown); } else { return (PadRead() & PADRdown); } } inline int CPad::Top1Pressed() { if (mSide==LEFT) { return (PadRead() & PADL1); } else { return (PadRead() & PADR1); } } inline int CPad::Top2Pressed() { if (mSide==LEFT) { return (PadRead() & PADL2); } else { return (PadRead() & PADR2); } } inline int CPad::StartPressed() { return (PadRead() & PADstart); } inline int CPad::SelectPressed() { return (PadRead() & PADselect); } #endif