initial import
[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_DebugHeap,\r
31 };\r
32 \r
33 enum TPicoServRqst {\r
34         PicoMsgLoadState,\r
35         PicoMsgSaveState,\r
36         PicoMsgLoadROM,\r
37         PicoMsgResume,\r
38         PicoMsgReset,\r
39         PicoMsgKeys,\r
40         PicoMsgPause,\r
41         PicoMsgQuit,\r
42         PicoMsgConfigChange,\r
43         PicoMsgSetAppView,\r
44         kDefaultMessageSlots // this is how many messages we need :)\r
45 };\r
46 \r
47 enum TPicoGenErrors { // generic errors\r
48         PicoErrNoErr = 0, // OK\r
49         PicoErrRomOpenFailed,\r
50         PicoErrOutOfMem,\r
51         PicoErrNotRom,\r
52         PicoErrNoRomsInArchive,\r
53         PicoErrUncomp, // 5\r
54         PicoErrOutOfMemSnd,\r
55         PicoErrGenSnd, // 7 generic sound system error\r
56         PicoErrEmuThread\r
57 };\r
58 \r
59 \r
60 // needed for creating server thread.\r
61 const TUint KPicoMaxHeapSize=0x00800000;\r
62 \r
63 // key config entry (touchpad areas)\r
64 struct TPicoAreaConfigEntry {\r
65         TRect rect;\r
66         //unsigned long actions;\r
67 };\r
68 \r
69 struct TPicoKeyConfigEntry\r
70 {\r
71         unsigned short keyCode;\r
72         unsigned char scanCode;\r
73         unsigned char flags; // lsb->msb: key_down, pulse_only, ?, ?,  ?, ?, not_configurable, disabled\r
74         TInt32 handle1; // for CancelCaptureKeyUpAndDowns()\r
75         TInt32 handle2; // for CancelCaptureKey()\r
76         char *name;\r
77 };\r
78 \r
79 \r
80 // configuration data\r
81 class TPicoConfig\r
82 {\r
83 public:\r
84         void SetDefaults();\r
85         void InternalizeL(RReadStream &aStream);\r
86         void ExternalizeL(RWriteStream &aStream) const;\r
87 \r
88         enum TPicoScreenRotation {\r
89                 PRot0,\r
90                 PRot90,\r
91                 PRot180,\r
92                 PRot270\r
93         };\r
94         enum TPicoScreenMode {\r
95                 PMCenter,\r
96                 PMFit,\r
97                 PMFit2\r
98         };\r
99         enum TPicoFrameSkip {\r
100                 PFSkipAuto = -1,\r
101                 PFSkip0\r
102         };\r
103 \r
104 public:\r
105         TFileName                       iLastROMFile;\r
106 \r
107         TInt32                          iScreenRotation;\r
108         TInt32                          iScreenMode;\r
109         TUint32                         iFlags;   // LSb->MSb: use_sram, show_fps, enable_sound, sound_rate(3bits), gzip_saves{=0x40}, dont_use_mot_vol\r
110     // enable_ym2612&dac, enable_sn76496, enable_z80, stereo_sound;\r
111     // alt_renderer, 6button_gamepad, accurate_timing\r
112         TInt32                          iPicoOpt;\r
113         TInt32                          iFrameskip;\r
114         TUint32                         iKeyBinds[256]; // a binding for every keycode\r
115         TUint32                         iAreaBinds[19];\r
116         TInt32                          PicoRegion;\r
117 };\r
118 \r
119 \r
120 class CThreadWatcher : public CActive\r
121 {\r
122 public:\r
123         static CThreadWatcher* NewL(const TThreadId& aTid);\r
124         ~CThreadWatcher();\r
125 \r
126         TThreadId                       iTid; // thread id\r
127 \r
128 protected:\r
129         CThreadWatcher(const TThreadId& aTid);\r
130         void ConstructL();\r
131 \r
132         virtual void RunL();\r
133         virtual void DoCancel();\r
134 };\r
135 \r
136 \r
137 class CPicoGameSession\r
138 {\r
139 public:\r
140         static TInt Do(const TPicoServRqst what, TAny *param=0);\r
141         static void freeResources();\r
142 \r
143         static TBool iEmuRunning;\r
144         static TBuf<0x30> iRomInternalName;\r
145 \r
146 private:\r
147         // services available\r
148         static TInt StartEmuThread();\r
149         static TInt ChangeRunState(TPicoGameState newstate, TPicoGameState newstate_next=(TPicoGameState)0);\r
150         static TInt loadROM(TPtrC16 *pptr);\r
151         static TInt changeConfig(TPicoConfig *aConfig);\r
152 \r
153         static CThreadWatcher *iThreadWatcher;\r
154 };\r
155 \r
156 // global\r
157 int saveLoadGame(int load, int sram=0);\r
158 \r
159 #endif\r