diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.cc index 34bc37c11..562f46607 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.cc @@ -139,7 +139,10 @@ X_STATUS xeExGetXConfigSetting(X_CONFIG_CATEGORY category, uint16_t setting, break; case XCONFIG_USER_PC_FLAGS: setting_size = 1; - value[0] = static_cast(0); + // All related flags must be set for PC to function + // Both flags set even when PC are off + value[0] = + X_PC_FLAGS::XBLAllowed | X_PC_FLAGS::XBLMembershipCreationAllowed; break; case XCONFIG_USER_AV_COMPONENT_SCREENSZ: setting_size = 4; @@ -165,9 +168,74 @@ X_STATUS xeExGetXConfigSetting(X_CONFIG_CATEGORY category, uint16_t setting, xe::store_and_swap(value, 0); } break; + case XCONFIG_USER_PC_GAME: + setting_size = 4; + xe::store_and_swap(value, + X_PC_GAMES_FLAGS::NoGameRestrictions); + break; + case XCONFIG_USER_PC_PASSWORD: + setting_size = 4; + std::memset(value, 0, 4); + break; + case XCONFIG_USER_PC_MOVIE: + setting_size = 4; + xe::store_and_swap(value, + X_PC_MOVIE_FLAGS::NoMovieRestrictions); + break; + case XCONFIG_USER_PC_GAME_RATING: + setting_size = 4; + xe::store_and_swap(value, + X_PC_GAME_RATING_FLAGS::DefaultGame); + break; + case XCONFIG_USER_PC_MOVIE_RATING: + setting_size = 4; + xe::store_and_swap(value, + X_PC_MOVIE_RATING_FLAGS::DefaultMovie); + break; case XCONFIG_USER_PC_HINT: - setting_size = 1; - value[0] = static_cast(0); + // ExSetXConfigSetting and ExGetXConfigSetting request size of 0x40 + setting_size = 0x40; + store_and_swap(value, ""); + break; + case XCONFIG_USER_PC_HINT_ANSWER: + setting_size = 0x20; + store_and_swap(value, ""); + break; + case XCONFIG_USER_ARCADE_FLAGS: + setting_size = 4; + xe::store_and_swap(value, X_ARCADE_FLAGS::AutoDownloadOff); + break; + case XCONFIG_USER_PC_VERSION: + setting_size = 4; + xe::store_and_swap(value, X_PC_VERSION::VersionOne); + break; + case XCONFIG_USER_PC_TV: + setting_size = 4; + xe::store_and_swap(value, X_PC_TV::NoTVRestrictions); + break; + case XCONFIG_USER_PC_TV_RATING: + setting_size = 4; + xe::store_and_swap(value, X_PC_TV_RATING::DefaultTV); + break; + case XCONFIG_USER_PC_EXPLICIT_VIDEO: + setting_size = 4; + xe::store_and_swap( + value, X_PC_EXPLICIT_VIDEO::ExplicitVideoAllowed); + break; + case XCONFIG_USER_PC_EXPLICIT_VIDEO_RATING: + setting_size = 4; + xe::store_and_swap( + value, X_PC_EXPLICIT_VIDEO_RATING::ExplicitAllowed); + break; + case XCONFIG_USER_PC_UNRATED_VIDEO: + setting_size = 4; + xe::store_and_swap(value, + X_PC_EXPLICIT_UNRATED::UnratedALL); + break; + case XCONFIG_USER_PC_UNRATED_VIDEO_RATING: + setting_size = 4; + xe::store_and_swap( + value, X_PC_EXPLICIT_UNRATED_RATING::DefaultExplicitUnrated); break; case XCONFIG_USER_VIDEO_OUTPUT_BLACK_LEVELS: setting_size = 4; diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h b/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h index 7d99144cd..d9d79c0c7 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h @@ -249,15 +249,98 @@ enum X_RETAIL_FLAGS : uint32_t { enum X_PC_FLAGS : uint8_t { XBLAllowed = 0x01, XBLMembershipCreationAllowed = 0x02, + XboxOneGameAllowed = 0x04, PCEnabled = 0x80, }; -enum X_PC_HINTS : uint8_t { - FavoriteFictionalCharactar = 0, - FavoritePersonFromHistory = 1, - FavoriteChildhoodBookOrStory = 2, - FavoriteMovie = 3, - FavoriteFood = 4 +// XCONFIG_USER_PC_GAMES +enum X_PC_GAMES_FLAGS : uint32_t { + EarlyChildhoodMax = 0x00000000, + EveryoneMax = 0x00000002, + Everyone_10Max = 0x00000004, + TeenMax = 0x00000006, + MatureMax = 0x00000008, + NoGameRestrictions = 0x000000FF, +}; + +// XCONFIG_USER_PC_PASSWORD +enum X_PC_PASSWORD_FLAGS : uint32_t { + XButton = 0x00000001, + YButton = 0x00000002, + LeftButton = 0x00000003, + RightButton = 0x00000004, + UPButton = 0x00000005, + DownButton = 0x00000006, + LTButton = 0x00000009, + RTButton = 0x0000000A, + LBButton = 0x0000000B, + RBButton = 0x0000000C, +}; + +// XCONFIG_USER_PC_MOVIE +enum X_PC_MOVIE_FLAGS : uint32_t { + GeneralAudiences = 0x00000001, + ParentalGuidance = 0x00000003, + ParentalGuidance13 = 0x00000004, + Restricted = 0x00000006, + NoMovieRestrictions = 0x000000FF, +}; + +// XCONFIG_USER_PC_GAME_RATING +enum X_PC_GAME_RATING_FLAGS : uint32_t { + DefaultGame = 0x00000000, +}; + +// XCONFIG_USER_PC_MOVIE_RATING +enum X_PC_MOVIE_RATING_FLAGS : uint32_t { + DefaultMovie = 0x00000000, +}; + +// XCONFIG_USER_ARCADE_FLAGS +enum X_ARCADE_FLAGS : uint32_t { + AutoDownloadOff = 0x00000000, + AutoDownloadNewReleases = 0x00000001, +}; + +// XCONFIG_USER_PC_VERSION +enum X_PC_VERSION : uint32_t { + VersionOne = 0x00000001, +}; + +// XCONFIG_USER_PC_TV +enum X_PC_TV : uint32_t { + TVG = 0X00000006, + TVPG = 0X00000008, + TV14 = 0X0000000a, + TVMatureAudience = 0x0000000C, + NoTVRestrictions = 0X000000FF, +}; + +// XCONFIG_USER_PC_TV_RATING +enum X_PC_TV_RATING : uint32_t { + DefaultTV = 0X00000000, +}; + +// XCONFIG_USER_PC_EXPLICIT_VIDEO +enum X_PC_EXPLICIT_VIDEO : uint32_t { + ExplicitVideoAllowed = 0X000000FF, + ExplicitVideoBanned = 0X00000000, +}; + +// XCONFIG_USER_PC_EXPLICIT_VIDEO_RATING +enum X_PC_EXPLICIT_VIDEO_RATING : uint32_t { + ExplicitAllowed = 0X00000000, +}; + +// XCONFIG_USER_PC_UNRATED_VIDEO +enum X_PC_EXPLICIT_UNRATED : uint32_t { + ExplicitUnratedBanned = 0X00000000, + UnratedALL = 0X000000FF, +}; + +// XCONFIG_USER_PC_UNRATED_VIDEO_RATING +enum X_PC_EXPLICIT_UNRATED_RATING : uint32_t { + DefaultExplicitUnrated = 0X00000000, }; // XCONFIG_USER_VIDEO_OUTPUT_BLACK_LEVELS