1 /* 2 Copyright (C) 2002 Rice1964 3 4 This program is free software; you can redistribute it and/or 5 modify it under the terms of the GNU General Public License 6 as published by the Free Software Foundation; either version 2 7 of the License, or (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software 16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18 */ 19 20 #ifndef _RICE_CONFIG_H_ 21 #define _RICE_CONFIG_H_ 22 23 #include <stdio.h> 24 25 #include <boolean.h> 26 27 #include "typedefs.h" 28 29 #ifdef MSB_FIRST 30 #define BYTE_ADDR_XOR 0 31 #define WORD_ADDR_XOR 0 32 #define BYTE4_XOR_BE(a) (a) 33 #else 34 #define BYTE_ADDR_XOR 3 35 #define WORD_ADDR_XOR 1 36 #define BYTE4_XOR_BE(a) ((a) ^ 3) 37 #endif 38 39 typedef enum 40 { 41 OGL_DEVICE, 42 OGL_1_1_DEVICE, 43 OGL_1_2_DEVICE, 44 OGL_1_3_DEVICE, 45 OGL_1_4_DEVICE, 46 OGL_1_4_V2_DEVICE, 47 OGL_TNT2_DEVICE, 48 NVIDIA_OGL_DEVICE, 49 OGL_FRAGMENT_PROGRAM, 50 51 DIRECTX_DEVICE 52 } SupportedDeviceType; 53 54 enum DirectXCombinerType 55 { 56 DX_DISABLE_COMBINER, 57 DX_BEST_FIT, 58 DX_LOW_END, 59 DX_HIGH_END, 60 DX_NVIDIA_TNT, 61 DX_2_STAGES, 62 DX_3_STAGES, 63 DX_4_STAGES, 64 DX_PIXEL_SHADER, 65 DX_SEMI_PIXEL_SHADER 66 }; 67 68 69 typedef struct 70 { 71 const char* name; 72 SupportedDeviceType type; 73 } RenderEngineSetting; 74 75 enum { 76 FRM_BUF_NONE, 77 FRM_BUF_IGNORE, 78 FRM_BUF_BASIC, 79 FRM_BUF_BASIC_AND_WRITEBACK, 80 FRM_BUF_WRITEBACK_AND_RELOAD, 81 FRM_BUF_COMPLETE, 82 FRM_BUF_WITH_EMULATOR, 83 FRM_BUF_BASIC_AND_WITH_EMULATOR, 84 FRM_BUF_WITH_EMULATOR_READ_ONLY, 85 FRM_BUF_WITH_EMULATOR_WRITE_ONLY 86 }; 87 88 enum { 89 FRM_BUF_WRITEBACK_NORMAL, 90 FRM_BUF_WRITEBACK_1_2, 91 FRM_BUF_WRITEBACK_1_3, 92 FRM_BUF_WRITEBACK_1_4, 93 FRM_BUF_WRITEBACK_1_5, 94 FRM_BUF_WRITEBACK_1_6, 95 FRM_BUF_WRITEBACK_1_7, 96 FRM_BUF_WRITEBACK_1_8 97 }; 98 99 enum { 100 TXT_BUF_NONE, 101 TXT_BUF_IGNORE, 102 TXT_BUF_NORMAL, 103 TXT_BUF_WRITE_BACK, 104 TXT_BUF_WRITE_BACK_AND_RELOAD 105 }; 106 107 enum { 108 TXT_QUALITY_DEFAULT, 109 TXT_QUALITY_32BIT, 110 TXT_QUALITY_16BIT 111 }; 112 113 enum { 114 FORCE_DEFAULT_FILTER, 115 FORCE_POINT_FILTER, 116 FORCE_LINEAR_FILTER 117 }; 118 119 enum { 120 TEXTURE_NO_MIPMAP = 0, 121 TEXTURE_NO_FILTER, 122 TEXTURE_BILINEAR_FILTER, 123 TEXTURE_TRILINEAR_FILTER 124 }; 125 126 enum { 127 TEXTURE_NO_ENHANCEMENT, 128 TEXTURE_2X_ENHANCEMENT, 129 TEXTURE_2XSAI_ENHANCEMENT, 130 TEXTURE_HQ2X_ENHANCEMENT, 131 TEXTURE_LQ2X_ENHANCEMENT, 132 TEXTURE_HQ4X_ENHANCEMENT, 133 TEXTURE_SHARPEN_ENHANCEMENT, 134 TEXTURE_SHARPEN_MORE_ENHANCEMENT, 135 TEXTURE_EXTERNAL, 136 TEXTURE_MIRRORED 137 }; 138 139 enum { 140 TEXTURE_ENHANCEMENT_NORMAL, 141 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_1, 142 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_2, 143 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_3, 144 TEXTURE_ENHANCEMENT_WITH_SMOOTH_FILTER_4 145 }; 146 147 enum { 148 SCREEN_UPDATE_DEFAULT = 0, 149 SCREEN_UPDATE_AT_VI_UPDATE = 1, 150 SCREEN_UPDATE_AT_VI_CHANGE = 2, 151 SCREEN_UPDATE_AT_CI_CHANGE = 3, 152 SCREEN_UPDATE_AT_1ST_CI_CHANGE = 4, 153 SCREEN_UPDATE_AT_1ST_PRIMITIVE = 5, 154 SCREEN_UPDATE_BEFORE_SCREEN_CLEAR = 6, 155 SCREEN_UPDATE_AT_VI_UPDATE_AND_DRAWN = 7 // Update screen at VI origin is updated and the screen has been drawn 156 }; 157 158 enum { 159 ONSCREEN_DISPLAY_NOTHING = 0, 160 ONSCREEN_DISPLAY_DLIST_PER_SECOND, 161 ONSCREEN_DISPLAY_FRAME_PER_SECOND, 162 ONSCREEN_DISPLAY_DEBUG_INFORMATION_ONLY, 163 ONSCREEN_DISPLAY_TEXT_FROM_CORE_ONLY, 164 ONSCREEN_DISPLAY_DLIST_PER_SECOND_WITH_CORE_MSG, 165 ONSCREEN_DISPLAY_FRAME_PER_SECOND_WITH_CORE_MSG, 166 ONSCREEN_DISPLAY_DEBUG_INFORMATION_WITH_CORE_MSG 167 }; 168 169 enum HACK_FOR_GAMES 170 { 171 NO_HACK_FOR_GAME, 172 HACK_FOR_BANJO_TOOIE, 173 HACK_FOR_DR_MARIO, 174 HACK_FOR_ZELDA, 175 HACK_FOR_MARIO_TENNIS, 176 HACK_FOR_BANJO, 177 HACK_FOR_PD, 178 HACK_FOR_GE, 179 HACK_FOR_PILOT_WINGS, 180 HACK_FOR_YOSHI, 181 HACK_FOR_NITRO, 182 HACK_FOR_TONYHAWK, 183 HACK_FOR_NASCAR, 184 HACK_FOR_SUPER_BOWLING, 185 HACK_FOR_CONKER, 186 HACK_FOR_ALL_STAR_BASEBALL, 187 HACK_FOR_TIGER_HONEY_HUNT, 188 HACK_REVERSE_XY_COOR, 189 HACK_REVERSE_Y_COOR, 190 HACK_FOR_GOLDEN_EYE, 191 HACK_FOR_FZERO, 192 HACK_FOR_COMMANDCONQUER, 193 HACK_FOR_RUMBLE, 194 HACK_FOR_SOUTH_PARK_RALLY, 195 HACK_FOR_BUST_A_MOVE, 196 HACK_FOR_OGRE_BATTLE, 197 HACK_FOR_TWINE, 198 HACK_FOR_EXTREME_G2, 199 HACK_FOR_ROGUE_SQUADRON, 200 HACK_FOR_MARIO_GOLF, 201 HACK_FOR_MLB, 202 HACK_FOR_POLARISSNOCROSS, 203 HACK_FOR_TOPGEARRALLY, 204 HACK_FOR_DUKE_NUKEM, 205 HACK_FOR_ZELDA_MM, 206 HACK_FOR_MARIO_KART 207 }; 208 209 enum { 210 NOT_USE_CI_WIDTH_AND_RATIO, 211 USE_CI_WIDTH_AND_RATIO_FOR_NTSC, 212 USE_CI_WIDTH_AND_RATIO_FOR_PAL 213 }; 214 215 typedef struct { 216 bool bEnableHacks; 217 bool bWinFrameMode; 218 bool bOGLVertexClipper; 219 bool bSkipFrame; 220 bool bFullTMEM; 221 bool bUseFullTMEM; 222 223 uint32_t mipmapping; 224 uint32_t fogMethod; 225 uint32_t forceTextureFilter; 226 uint32_t textureEnhancement; 227 uint32_t textureEnhancementControl; 228 uint32_t textureQuality; 229 uint32_t anisotropicFiltering; 230 uint32_t multiSampling; 231 bool bTexRectOnly; 232 bool bSmallTextureOnly; 233 bool bDumpTexturesToFiles; 234 bool bLoadHiResTextures; 235 bool bLoadHiResCRCOnly; 236 237 int OpenglDepthBufferSetting; 238 int OpenglRenderSetting; 239 uint32_t colorQuality; 240 241 HACK_FOR_GAMES enableHackForGames; 242 } GlobalOptions; 243 244 typedef struct { 245 bool bUpdateCIInfo; 246 247 bool bCheckBackBufs; // Check texture again against the recent backbuffer addresses 248 bool bWriteBackBufToRDRAM; // If a recent backbuffer is used, write its content back to RDRAM 249 bool bLoadBackBufFromRDRAM; // Load content from RDRAM and draw into backbuffer 250 bool bIgnore; // Ignore all rendering into texture buffers 251 252 bool bSupportRenderTextures; // Support render-to-texture 253 bool bCheckRenderTextures; // Check texture again against the the last render_texture addresses 254 bool bRenderTextureWriteBack; // Write back render_texture into RDRAM 255 bool bLoadRDRAMIntoRenderTexture; // Load RDRAM content and render into render_texture 256 257 bool bAtEachFrameUpdate; // Reload and write back at each frame buffer and CI update 258 259 bool bProcessCPUWrite; 260 bool bProcessCPURead; 261 262 bool bFillRectNextTextureBuffer; 263 bool bIgnoreRenderTextureIfHeightUnknown; 264 //bool bFillColor; 265 } FrameBufferOptions; 266 267 typedef struct { 268 uint32_t N64FrameBufferEmuType; 269 uint32_t N64FrameBufferWriteBackControl; 270 uint32_t N64RenderToTextureEmuType; 271 uint32_t screenUpdateSetting; 272 bool bNormalCombiner; 273 bool bNormalBlender; 274 bool bFastTexCRC; 275 bool bAccurateTextureMapping; 276 bool bInN64Resolution; 277 bool bDoubleSizeForSmallTxtrBuf; 278 bool bSaveVRAM; 279 } RomOptions; 280 281 typedef struct IniSection 282 { 283 bool bOutput; 284 char crccheck[50]; 285 char name[50]; 286 287 // Options with changeable default values 288 uint32_t dwNormalCombiner; 289 uint32_t dwNormalBlender; 290 uint32_t dwFastTextureCRC; 291 uint32_t dwAccurateTextureMapping; 292 uint32_t dwFrameBufferOption; 293 uint32_t dwRenderToTextureOption; 294 uint32_t dwScreenUpdateSetting; 295 296 // Options with FALSE as default values 297 bool bDisableBlender; 298 bool bForceScreenClear; 299 bool bEmulateClear; 300 bool bForceDepthBuffer; 301 302 // Less useful options 303 bool bDisableObjBG; 304 bool bDisableTextureCRC; 305 bool bIncTexRectEdge; 306 bool bZHack; 307 bool bTextureScaleHack; 308 bool bFastLoadTile; 309 bool bUseSmallerTexture; 310 bool bPrimaryDepthHack; 311 bool bTexture1Hack; 312 bool bDisableCulling; 313 314 int VIWidth; 315 int VIHeight; 316 uint32_t UseCIWidthAndRatio; 317 318 uint32_t dwFullTMEM; 319 bool bTxtSizeMethod2; 320 bool bEnableTxtLOD; 321 } section; 322 323 struct ROMHeader 324 { 325 uint8_t x1, x2, x3, x4; 326 uint32_t dwClockRate; 327 uint32_t dwBootAddressOffset; 328 uint32_t dwRelease; 329 uint32_t dwCRC1; 330 uint32_t dwCRC2; 331 uint64_t qwUnknown1; 332 char szName[20]; 333 uint32_t dwUnknown2; 334 uint16_t wUnknown3; 335 uint8_t nUnknown4; 336 uint8_t nManufacturer; 337 uint16_t wCartID; 338 int8_t nCountryID; 339 uint8_t nUnknown5; 340 }; 341 342 typedef struct 343 { 344 // Other info from the rom. This is for convenience 345 unsigned char szGameName[50+1]; 346 int8_t nCountryID; 347 348 // Copy of the ROM header 349 ROMHeader romheader; 350 351 // With changeable default values 352 uint32_t dwNormalCombiner; 353 uint32_t dwNormalBlender; 354 uint32_t dwAccurateTextureMapping; 355 uint32_t dwFastTextureCRC; 356 uint32_t dwFrameBufferOption; 357 uint32_t dwRenderToTextureOption; 358 uint32_t dwScreenUpdateSetting; 359 360 // With FALSE as its default values 361 bool bForceScreenClear; 362 bool bEmulateClear; 363 bool bForceDepthBuffer; 364 bool bDisableBlender; 365 366 // Less useful options 367 bool bDisableObjBG; 368 bool bDisableTextureCRC; 369 bool bIncTexRectEdge; 370 bool bZHack; 371 bool bTextureScaleHack; 372 bool bFastLoadTile; 373 bool bUseSmallerTexture; 374 bool bPrimaryDepthHack; 375 bool bTexture1Hack; 376 bool bDisableCulling; 377 int VIWidth; 378 int VIHeight; 379 uint32_t UseCIWidthAndRatio; 380 381 uint32_t dwFullTMEM; 382 bool bTxtSizeMethod2; 383 bool bEnableTxtLOD; 384 } GameSetting, *LPGAMESETTING; 385 386 typedef struct 387 { 388 int8_t nCountryID; 389 char* szName; 390 uint32_t nTvType; 391 } CountryIDInfo; 392 393 #define TV_SYSTEM_NTSC 1 394 #define TV_SYSTEM_PAL 0 395 396 extern GlobalOptions options; 397 extern FrameBufferOptions frameBufferOptions; 398 extern RomOptions defaultRomOptions; 399 extern RomOptions currentRomOptions; 400 extern const CountryIDInfo g_CountryCodeInfo[]; 401 extern GameSetting g_curRomInfo; 402 extern bool bIniIsChanged; 403 extern char szIniFileName[300]; 404 405 extern bool InitConfiguration(void); 406 extern bool LoadConfiguration(void); 407 extern void WriteIniFile(); 408 extern bool ReadIniFile(); 409 extern void OutputSectionDetails(uint32_t i, FILE * fh); 410 extern void GenerateCurrentRomOptions(); 411 extern void Ini_GetRomOptions(LPGAMESETTING pGameSetting); 412 extern void Ini_StoreRomOptions(LPGAMESETTING pGameSetting); 413 extern uint32_t CountryCodeToTVSystem(uint32_t countryCode); 414 extern void ROM_GetRomNameFromHeader(unsigned char * szName, ROMHeader * pHdr); 415 416 #endif 417 418