cc68a136 |
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 |
ca482e5d |
30 | PGS_ReloadRom,\r |
f8af9634 |
31 | PGS_Reset,\r |
cc68a136 |
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 |
cc68a136 |
52 | PicoErrOutOfMemSnd,\r |
f8af9634 |
53 | PicoErrGenSnd, // generic sound system error\r |
cc68a136 |
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 |
ca482e5d |
82 | // void SetDefaults();\r |
83 | // void InternalizeL(RReadStream &aStream);\r |
84 | // void ExternalizeL(RWriteStream &aStream) const;\r |
cc68a136 |
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 |
ca482e5d |
103 | TFileName iLastROMFile; // used as tmp only\r |
cc68a136 |
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 |
ca482e5d |
131 | static TBuf<150> iRomInternalName;\r |
cc68a136 |
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 |
cc68a136 |
143 | #endif\r |