UIQ3 bugfixes, SVP drc indirect jumps, stuff
[picodrive.git] / platform / uiq3 / Engine.h
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