| 1 | #ifndef PicoDriveH\r |
| 2 | #define PicoDriveH\r |
| 3 | #include <e32base.h>\r |
| 4 | #include <eikappui.h>\r |
| 5 | #include <coecntrl.h>\r |
| 6 | #include <aknapp.h>\r |
| 7 | #include <akndoc.h>\r |
| 8 | #include <MdaAudioOutputStream.h>\r |
| 9 | #include <Mda\Common\Audio.h>\r |
| 10 | \r |
| 11 | #include <aknappUI.h>\r |
| 12 | struct Target\r |
| 13 | {\r |
| 14 | unsigned char *screen;\r |
| 15 | TPoint point; // Screen to client point\r |
| 16 | TRect view,update;\r |
| 17 | TInt scanline_length;\r |
| 18 | TInt screen_offset;\r |
| 19 | TBool stretch_line;\r |
| 20 | \r |
| 21 | };\r |
| 22 | \r |
| 23 | enum TPicoMainMenu\r |
| 24 | {\r |
| 25 | ELoadRom,\r |
| 26 | ELoadState,\r |
| 27 | ESaveState,\r |
| 28 | ESetControls,\r |
| 29 | ESetScreen,\r |
| 30 | ESelectSound,\r |
| 31 | ESelectCheat,\r |
| 32 | EResetHw,\r |
| 33 | EAboutPico,\r |
| 34 | EExitPico,\r |
| 35 | ELastMenuItem\r |
| 36 | };\r |
| 37 | \r |
| 38 | enum TPicoSoundMenu\r |
| 39 | {\r |
| 40 | EEnableZ80,\r |
| 41 | EEnableYM2612,\r |
| 42 | EEnableSN76496,\r |
| 43 | ESoundVolume,\r |
| 44 | ESoundRate,\r |
| 45 | ELastSoundItem\r |
| 46 | };\r |
| 47 | \r |
| 48 | enum TPicoCheatMenu\r |
| 49 | {\r |
| 50 | EAddCheat,\r |
| 51 | EClearCheats,\r |
| 52 | ELastCheatItem\r |
| 53 | };\r |
| 54 | \r |
| 55 | enum TPicoControllerMenu\r |
| 56 | {\r |
| 57 | EControllerType,\r |
| 58 | EConfigControls\r |
| 59 | };\r |
| 60 | enum TPicoMenus\r |
| 61 | {\r |
| 62 | EPicoMainMenu,\r |
| 63 | ESelectScrMenu,\r |
| 64 | EAboutPicoMenu,\r |
| 65 | ESelectSoundMenu,\r |
| 66 | ESelectControlsMenu,\r |
| 67 | ESelectCheatMenu\r |
| 68 | };\r |
| 69 | \r |
| 70 | enum TPicoKeys\r |
| 71 | {\r |
| 72 | EPicoUpKey,\r |
| 73 | EPicoDownKey,\r |
| 74 | EPicoLeftKey,\r |
| 75 | EPicoRightKey,\r |
| 76 | EPicoAKey,\r |
| 77 | EPicoBKey,\r |
| 78 | EPicoCKey,\r |
| 79 | EPicoXKey,\r |
| 80 | EPicoYKey,\r |
| 81 | EPicoZKey,\r |
| 82 | EPicoModeKey,\r |
| 83 | EPicoStartKey,\r |
| 84 | EPicoULKey,\r |
| 85 | EPicoURKey,\r |
| 86 | EPicoDRKey,\r |
| 87 | EPicoDLKey,\r |
| 88 | EPicoResetKey,\r |
| 89 | EPicoPanLKey,\r |
| 90 | EPicoPanRKey,\r |
| 91 | EPicoNoKeys\r |
| 92 | };\r |
| 93 | \r |
| 94 | class CPicoAddCheatDlg:public CEikDialog\r |
| 95 | {\r |
| 96 | public:\r |
| 97 | CPicoAddCheatDlg(TDes8& aCheatCode):iCheatCode(aCheatCode){};\r |
| 98 | ~CPicoAddCheatDlg(){ iEikonEnv->EikAppUi()->RemoveFromStack(this);}\r |
| 99 | TBool OkToExitL(TInt /*aButtonId*/)\r |
| 100 | {\r |
| 101 | static_cast<CEikEdwin*>(ControlOrNull(0x2000))->GetText(iUniCheatCode);\r |
| 102 | iCheatCode.Copy(iUniCheatCode);\r |
| 103 | return ETrue;\r |
| 104 | }\r |
| 105 | \r |
| 106 | void PreLayoutDynInitL()\r |
| 107 | {\r |
| 108 | iEikonEnv->EikAppUi()->AddToStackL(this);\r |
| 109 | }\r |
| 110 | private:\r |
| 111 | TDes8& iCheatCode;\r |
| 112 | TBuf<16> iUniCheatCode;\r |
| 113 | };\r |
| 114 | \r |
| 115 | #ifdef S60V3\r |
| 116 | class CPicoDriveDoc:public CAknDocument\r |
| 117 | {\r |
| 118 | public:\r |
| 119 | CPicoDriveDoc(CEikApplication& aApp);\r |
| 120 | ~CPicoDriveDoc();\r |
| 121 | CEikAppUi* CreateAppUiL();\r |
| 122 | };\r |
| 123 | \r |
| 124 | class CPicoDriveApp:public CAknApplication\r |
| 125 | {\r |
| 126 | public:\r |
| 127 | CPicoDriveApp();\r |
| 128 | ~CPicoDriveApp();\r |
| 129 | TUid AppDllUid()const;\r |
| 130 | CApaDocument* CreateDocumentL();\r |
| 131 | \r |
| 132 | /**\r |
| 133 | * From @c CApaApplication. Opens the .ini file associated with the\r |
| 134 | * application. By default, ini files are not supported by SERIES60 \r |
| 135 | * applications. If you want to use an ini file, either override this\r |
| 136 | * function to base call @c CEikApplication::OpenIniFileLC, or call it\r |
| 137 | * directly.\r |
| 138 | * @param aFs File server session to use. Not used.\r |
| 139 | * @return Pointer to the dictionary store object representing the\r |
| 140 | * application's .ini file.\r |
| 141 | */\r |
| 142 | CDictionaryStore* OpenIniFileLC(RFs& aFs) const;\r |
| 143 | };\r |
| 144 | #endif\r |
| 145 | \r |
| 146 | class CQPicoDriveView:public CCoeControl,public MDirectScreenAccess\r |
| 147 | {\r |
| 148 | public:\r |
| 149 | CQPicoDriveView() {};\r |
| 150 | ~CQPicoDriveView();\r |
| 151 | void Draw(const TRect& aRect) const;\r |
| 152 | void ConstructL();\r |
| 153 | void PutBitmap(CFbsBitmap* aBitmap,TPoint aPoint,TRect aRect);\r |
| 154 | void Restart(RDirectScreenAccess::TTerminationReasons aReason);\r |
| 155 | void AbortNow(RDirectScreenAccess::TTerminationReasons aReason);\r |
| 156 | void DrawText(const TDesC& aText,TPoint aPoint,TBool aHighLight=EFalse,TRgb aTextColour = KRgbWhite);\r |
| 157 | TInt DrawTextInRect(const TDesC& aText,TRect aRect,TInt aStartPos);\r |
| 158 | void Clear();\r |
| 159 | CDirectScreenAccess* iDsa;\r |
| 160 | TBool iDrawingOn;\r |
| 161 | TBool iForeground;\r |
| 162 | };\r |
| 163 | \r |
| 164 | \r |
| 165 | class CPicoDriveUi:public CAknAppUi,public MMdaAudioOutputStreamCallback\r |
| 166 | {\r |
| 167 | public:\r |
| 168 | CPicoDriveUi();\r |
| 169 | ~CPicoDriveUi();\r |
| 170 | void ConstructL();\r |
| 171 | void StartAsynchUpdate();\r |
| 172 | protected:\r |
| 173 | static TInt AsyncUpdateL(TAny* aAppUi);\r |
| 174 | void StartEmulatorL();\r |
| 175 | virtual TKeyResponse HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);\r |
| 176 | void HandleForegroundEventL(TBool aForeground);\r |
| 177 | // Menu drawers\r |
| 178 | void PutMainMenu();\r |
| 179 | void PutScreenSelect();\r |
| 180 | void PutControllerSelect();\r |
| 181 | void PutConfigKeys();\r |
| 182 | void PutSoundSelect();\r |
| 183 | void PutCheatSelect();\r |
| 184 | void PutAbout(TBool iOnlyRedraw = EFalse);\r |
| 185 | \r |
| 186 | // Asynch screen update callback\r |
| 187 | void UpdateScreen();\r |
| 188 | \r |
| 189 | TInt SelectFile(TFileName& aFileName);\r |
| 190 | // Emulation functions\r |
| 191 | int EmulateInit();\r |
| 192 | void EmulateExit();\r |
| 193 | int EmulateFrame();\r |
| 194 | int InputFrame();\r |
| 195 | int TargetInit();\r |
| 196 | void CalulateLineStarts();\r |
| 197 | \r |
| 198 | static TInt IdleCallBackStop(TAny* aAppUi);\r |
| 199 | static TInt StartEmulatorL(TAny* aAppUi);\r |
| 200 | // Settings storage\r |
| 201 | void SaveSettingsL();\r |
| 202 | void InternalizeL(const CDictionaryStore& aStore);\r |
| 203 | void ExternalizeL( CDictionaryStore& aStore);\r |
| 204 | \r |
| 205 | // Save state handling\r |
| 206 | int saveLoadGame(int load, int sram);\r |
| 207 | \r |
| 208 | /**\r |
| 209 | * Calculates the palette table 0-4096\r |
| 210 | */\r |
| 211 | void CalculatePaletteTable();\r |
| 212 | CAsyncCallBack iIdleCallBack;\r |
| 213 | \r |
| 214 | // Variables\r |
| 215 | TUint16 iPad1;\r |
| 216 | TUint16 iPad2; \r |
| 217 | TFileName iRomName;\r |
| 218 | char RomName[260];\r |
| 219 | TInt iScanCodes[EPicoNoKeys];\r |
| 220 | TInt iCurrentScan;\r |
| 221 | CDesCArrayFlat* iKeyNames;\r |
| 222 | CDesCArrayFlat* iRegNames;\r |
| 223 | TBool iEmuRunning;\r |
| 224 | CQPicoDriveView* iView;\r |
| 225 | TInt iResourceFileId;\r |
| 226 | CAsyncCallBack iStartUp;\r |
| 227 | CFbsBitmap* iBackBuffer;\r |
| 228 | TFileName iAppPath;\r |
| 229 | TPoint iPutPoint;\r |
| 230 | TRect iPutRect; \r |
| 231 | TInt iSelection;\r |
| 232 | TInt iSndSelection;\r |
| 233 | TInt iCtrlSelection;\r |
| 234 | TInt iCheatSelection;\r |
| 235 | TInt iNoCheats;\r |
| 236 | TBool iCheatEnter;\r |
| 237 | CEikDialog* iCheatDlg;\r |
| 238 | TInt iListOffset;\r |
| 239 | TInt iScrMode;\r |
| 240 | TInt iLastScrMode;\r |
| 241 | TBool iRomLoaded;\r |
| 242 | TBool iInterpolate;\r |
| 243 | TBool iStretch;\r |
| 244 | TBool iEnableSixButtons;\r |
| 245 | TPicoMenus iPicoMenu;\r |
| 246 | CAsyncCallBack iAsyncUpdate;\r |
| 247 | \r |
| 248 | // sound support\r |
| 249 | CMdaAudioOutputStream* iSndStream;\r |
| 250 | TMdaAudioDataSettings iAudioSettings;\r |
| 251 | TBuf8<442*2*6> iMonoSound;\r |
| 252 | TInt iCurrentSeg;\r |
| 253 | TBool iEnableSound;\r |
| 254 | TBool iSndRateChanged;\r |
| 255 | TInt iSoundVolume; // 0-10 in 10% percent\r |
| 256 | void MaoscOpenComplete(TInt aError);\r |
| 257 | void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer);\r |
| 258 | void MaoscPlayComplete(TInt aError);\r |
| 259 | // Update the sound output rate\r |
| 260 | TBool UpdatePSndRate();\r |
| 261 | \r |
| 262 | // Rom pointers\r |
| 263 | unsigned char *RomData;\r |
| 264 | unsigned int RomSize;\r |
| 265 | \r |
| 266 | TInt64 LastSecond;\r |
| 267 | int FramesDone;\r |
| 268 | int FramesPerSecond;\r |
| 269 | TDisplayMode iDisplayMode;\r |
| 270 | TInt iLastAboutPos;\r |
| 271 | TBool iFirstStart;\r |
| 272 | TInt iFrameSkip;\r |
| 273 | TInt iFontHeight; \r |
| 274 | int (*myPicoScan)(unsigned int scan,unsigned short *pal);\r |
| 275 | TBuf<1024> iTempString;\r |
| 276 | // make save filename\r |
| 277 | char saveFname[KMaxFileName];\r |
| 278 | \r |
| 279 | };\r |
| 280 | \r |
| 281 | #endif\r |