| 1 | /*******************************************************************\r |
| 2 | *\r |
| 3 | * File: Engine.h\r |
| 4 | *\r |
| 5 | * Author: Peter van Sebille (peter@yipton.net)\r |
| 6 | *\r |
| 7 | * Modified/adapted for picodriveN by notaz, 2006\r |
| 8 | *\r |
| 9 | * (c) Copyright 2006, notaz\r |
| 10 | * (c) Copyright 2002, Peter van Sebille\r |
| 11 | * All Rights Reserved\r |
| 12 | *\r |
| 13 | *******************************************************************/\r |
| 14 | \r |
| 15 | #ifndef __ENGINE_H\r |
| 16 | #define __ENGINE_H\r |
| 17 | \r |
| 18 | #include <e32base.h>\r |
| 19 | \r |
| 20 | class RReadStream;\r |
| 21 | class RWriteStream;\r |
| 22 | \r |
| 23 | \r |
| 24 | // engine states\r |
| 25 | enum TPicoGameState {\r |
| 26 | PGS_Running = 1,\r |
| 27 | PGS_Paused,\r |
| 28 | PGS_Quit,\r |
| 29 | PGS_KeyConfig,\r |
| 30 | PGS_ReloadRom,\r |
| 31 | PGS_Reset,\r |
| 32 | };\r |
| 33 | \r |
| 34 | enum TPicoServRqst {\r |
| 35 | PicoMsgLoadState,\r |
| 36 | PicoMsgSaveState,\r |
| 37 | PicoMsgLoadROM,\r |
| 38 | PicoMsgResume,\r |
| 39 | PicoMsgReset,\r |
| 40 | PicoMsgKeys,\r |
| 41 | PicoMsgPause,\r |
| 42 | PicoMsgQuit,\r |
| 43 | PicoMsgConfigChange,\r |
| 44 | PicoMsgSetAppView,\r |
| 45 | kDefaultMessageSlots // this is how many messages we need :)\r |
| 46 | };\r |
| 47 | \r |
| 48 | enum TPicoGenErrors { // generic errors\r |
| 49 | PicoErrNoErr = 0, // OK\r |
| 50 | PicoErrRomOpenFailed,\r |
| 51 | PicoErrOutOfMem,\r |
| 52 | PicoErrOutOfMemSnd,\r |
| 53 | PicoErrGenSnd, // generic sound system error\r |
| 54 | PicoErrEmuThread\r |
| 55 | };\r |
| 56 | \r |
| 57 | \r |
| 58 | // needed for creating server thread.\r |
| 59 | const TUint KPicoMaxHeapSize=0x00800000;\r |
| 60 | \r |
| 61 | // key config entry (touchpad areas)\r |
| 62 | struct TPicoAreaConfigEntry {\r |
| 63 | TRect rect;\r |
| 64 | //unsigned long actions;\r |
| 65 | };\r |
| 66 | \r |
| 67 | struct TPicoKeyConfigEntry\r |
| 68 | {\r |
| 69 | unsigned short keyCode;\r |
| 70 | unsigned char scanCode;\r |
| 71 | unsigned char flags; // lsb->msb: key_down, pulse_only, ?, ?, ?, ?, not_configurable, disabled\r |
| 72 | TInt32 handle1; // for CancelCaptureKeyUpAndDowns()\r |
| 73 | TInt32 handle2; // for CancelCaptureKey()\r |
| 74 | char *name;\r |
| 75 | };\r |
| 76 | \r |
| 77 | \r |
| 78 | // configuration data\r |
| 79 | class TPicoConfig\r |
| 80 | {\r |
| 81 | public:\r |
| 82 | // void SetDefaults();\r |
| 83 | // void InternalizeL(RReadStream &aStream);\r |
| 84 | // void ExternalizeL(RWriteStream &aStream) const;\r |
| 85 | \r |
| 86 | enum TPicoScreenRotation {\r |
| 87 | PRot0,\r |
| 88 | PRot90,\r |
| 89 | PRot180,\r |
| 90 | PRot270\r |
| 91 | };\r |
| 92 | enum TPicoScreenMode {\r |
| 93 | PMCenter,\r |
| 94 | PMFit,\r |
| 95 | PMFit2\r |
| 96 | };\r |
| 97 | enum TPicoFrameSkip {\r |
| 98 | PFSkipAuto = -1,\r |
| 99 | PFSkip0\r |
| 100 | };\r |
| 101 | \r |
| 102 | public:\r |
| 103 | TFileName iLastROMFile; // used as tmp only\r |
| 104 | };\r |
| 105 | \r |
| 106 | \r |
| 107 | class CThreadWatcher : public CActive\r |
| 108 | {\r |
| 109 | public:\r |
| 110 | static CThreadWatcher* NewL(const TThreadId& aTid);\r |
| 111 | ~CThreadWatcher();\r |
| 112 | \r |
| 113 | TThreadId iTid; // thread id\r |
| 114 | \r |
| 115 | protected:\r |
| 116 | CThreadWatcher(const TThreadId& aTid);\r |
| 117 | void ConstructL();\r |
| 118 | \r |
| 119 | virtual void RunL();\r |
| 120 | virtual void DoCancel();\r |
| 121 | };\r |
| 122 | \r |
| 123 | \r |
| 124 | class CPicoGameSession\r |
| 125 | {\r |
| 126 | public:\r |
| 127 | static TInt Do(const TPicoServRqst what, TAny *param=0);\r |
| 128 | static void freeResources();\r |
| 129 | \r |
| 130 | static TBool iEmuRunning;\r |
| 131 | static TBuf<150> iRomInternalName;\r |
| 132 | \r |
| 133 | private:\r |
| 134 | // services available\r |
| 135 | static TInt StartEmuThread();\r |
| 136 | static TInt ChangeRunState(TPicoGameState newstate, TPicoGameState newstate_next=(TPicoGameState)0);\r |
| 137 | static TInt loadROM(TPtrC16 *pptr);\r |
| 138 | static TInt changeConfig(TPicoConfig *aConfig);\r |
| 139 | \r |
| 140 | static CThreadWatcher *iThreadWatcher;\r |
| 141 | };\r |
| 142 | \r |
| 143 | #endif\r |