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 |
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 |