[Xboxkrnl/Xconfig] - add xboxkrnl_xconfig.h
- Add xboxkrnl_xconfig.h to hold known Xconfig flags - Implement more xeExGetXConfigSetting cases
This commit is contained in:
parent
b7b707ddd2
commit
180be3664e
|
@ -7,6 +7,7 @@
|
|||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h"
|
||||
#include "xenia/base/logging.h"
|
||||
#include "xenia/cpu/processor.h"
|
||||
#include "xenia/kernel/kernel_state.h"
|
||||
|
@ -79,14 +80,15 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||
setting_size = 4;
|
||||
switch (cvars::video_standard) {
|
||||
case 1: // NTSCM
|
||||
xe::store_and_swap<uint32_t>(value, 0x00400100);
|
||||
xe::store_and_swap<uint32_t>(value, X_AV_REGION::NTSCM);
|
||||
break;
|
||||
case 2: // NTSCJ
|
||||
xe::store_and_swap<uint32_t>(value, 0x00400200);
|
||||
xe::store_and_swap<uint32_t>(value, X_AV_REGION::NTSCJ);
|
||||
break;
|
||||
case 3: // PAL
|
||||
xe::store_and_swap<uint32_t>(
|
||||
value, cvars::use_50Hz_mode ? 0x00800300 : 0x00400400);
|
||||
xe::store_and_swap<uint32_t>(value, cvars::use_50Hz_mode
|
||||
? X_AV_REGION::PAL_50
|
||||
: X_AV_REGION::PAL);
|
||||
break;
|
||||
default:
|
||||
xe::store_and_swap<uint32_t>(value, 0);
|
||||
|
@ -121,10 +123,9 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||
break;
|
||||
case 0x000A: // XCONFIG_USER_VIDEO_FLAGS
|
||||
setting_size = 4;
|
||||
// 0x00040000 normal
|
||||
// 0x00050000 widescreen
|
||||
xe::store_and_swap<uint32_t>(
|
||||
value, cvars::widescreen ? 0x00050000 : 0x00040000);
|
||||
value, cvars::widescreen ? X_VIDEO_ASPECT_RATIO::Widescreen
|
||||
: X_VIDEO_ASPECT_RATIO::RatioNormal);
|
||||
break;
|
||||
case 0x000B: // XCONFIG_USER_AUDIO_FLAGS
|
||||
setting_size = 4;
|
||||
|
@ -139,6 +140,18 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||
setting_size = 1;
|
||||
value[0] = static_cast<uint8_t>(cvars::user_country);
|
||||
break;
|
||||
case 0x000F: // XCONFIG_USER_PC_FLAGS
|
||||
setting_size = 1;
|
||||
xe::store_and_swap<uint8_t>(value, 0);
|
||||
break;
|
||||
case 0x001B: // XCONFIG_USER_PC_HINT
|
||||
setting_size = 1;
|
||||
xe::store_and_swap<uint8_t>(value, 0);
|
||||
break;
|
||||
case 0x0029: // XCONFIG_USER_VIDEO_OUTPUT_BLACK_LEVELS
|
||||
setting_size = 4;
|
||||
xe::store_and_swap<uint32_t>(value, X_BLACK_LEVEL::LevelNormal);
|
||||
break;
|
||||
default:
|
||||
XELOGW("An unimplemented setting 0x{:04X} in XCONFIG USER CATEGORY",
|
||||
static_cast<uint16_t>(setting));
|
||||
|
@ -146,6 +159,35 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||
return X_STATUS_INVALID_PARAMETER_2;
|
||||
}
|
||||
break;
|
||||
case 0x0007:
|
||||
// XCONFIG_CONSOLE_SETTINGS
|
||||
switch (setting) {
|
||||
case 0x0001: // XCONFIG_CONSOLE_SCREENSAVER
|
||||
setting_size = 2;
|
||||
xe::store_and_swap<int16_t>(value, X_SCREENSAVER::ScreensaverOff);
|
||||
break;
|
||||
case 0x0002: // XCONFIG_CONSOLE_AUTO_SHUTDOWN
|
||||
setting_size = 2;
|
||||
xe::store_and_swap<int16_t>(value, X_AUTO_SHUTDOWN::AutoShutdownOff);
|
||||
break;
|
||||
case 0x0004: // XCONFIG_CONSOLE_CAMERA_SETTINGS
|
||||
// Camera Flags are added together and last byte is always 0x1
|
||||
setting_size = 4;
|
||||
xe::store_and_swap<uint32_t>(value, X_CAMERA_FLAGS::AutoAll);
|
||||
break;
|
||||
case 0x0007: // XCONFIG_CONSOLE_KEYBOARD_LAYOUT
|
||||
setting_size = 2;
|
||||
xe::store_and_swap<int16_t>(value,
|
||||
X_KEYBOARD_LAYOUT::KeyboardDefault);
|
||||
break;
|
||||
default:
|
||||
XELOGW(
|
||||
"An unimplemented setting 0x{:04X} in XCONFIG CONSOLE CATEGORY",
|
||||
static_cast<uint16_t>(setting));
|
||||
assert_unhandled_case(setting);
|
||||
return X_STATUS_INVALID_PARAMETER_2;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
XELOGW("An unimplemented category 0x{:04X}",
|
||||
static_cast<uint16_t>(category));
|
||||
|
|
|
@ -0,0 +1,138 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2025 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XBOXKRNL_XBOXKRNL_XCONFIG_H_
|
||||
#define XENIA_KERNEL_XBOXKRNL_XBOXKRNL_XCONFIG_H_
|
||||
|
||||
#include "xenia/kernel/util/shim_utils.h"
|
||||
#include "xenia/xbox.h"
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xboxkrnl {
|
||||
|
||||
// XCONFIG_SECURED_AV_REGION
|
||||
enum X_AV_REGION : uint32_t {
|
||||
NTSCM = 0x00400100,
|
||||
NTSCJ = 0x00400200,
|
||||
PAL = 0x00400400,
|
||||
PAL_50 = 0x00800300,
|
||||
};
|
||||
|
||||
// XCONFIG_USER_VIDEO_FLAGS
|
||||
enum X_VIDEO_ASPECT_RATIO : uint32_t {
|
||||
RatioNormal = 0x00400100,
|
||||
Widescreen = 0x00400200,
|
||||
};
|
||||
|
||||
// XCONFIG_USER_AUDIO_FLAGS
|
||||
enum X_AUDIO_FLAGS : uint32_t {
|
||||
// Audio Mode Analog
|
||||
DolbyProLogic = 0x00000001,
|
||||
AnalogMono = 0x00000002,
|
||||
// Audio Mode Digital
|
||||
DigitalStereo = 0x00000000,
|
||||
DolbyDigital = 0x00010000,
|
||||
DolbyDigitalWithWMAPRO = 0x00030000,
|
||||
// Special Flags
|
||||
StereoBypass = 0x00000003,
|
||||
LowLatency = 0x80000000,
|
||||
};
|
||||
|
||||
// XCONFIG_USER_RETAIL_FLAGS
|
||||
enum X_RETAIL_FLAGS : uint32_t {
|
||||
// Clock
|
||||
DSTOff = 0x00000002,
|
||||
TwentyFourHourClock = 0x00000008,
|
||||
|
||||
// Startup
|
||||
DashboardStartup = 0x00000080,
|
||||
IPTVStartup = 0x00000800,
|
||||
DiscStartup = 0x00002000,
|
||||
MCXDownloaderStartup = 0x00020000,
|
||||
// IPTV
|
||||
IPTVEnabled = 0x00001000,
|
||||
IPTVDVRENABLED = 0x00080000,
|
||||
IPTVDisabled = 0x02000000,
|
||||
// Kinect
|
||||
KinectInitialized = 0x20000000,
|
||||
KinectDisabled = 0x80000000,
|
||||
|
||||
// Other
|
||||
DashboardInitialized = 0x00000040,
|
||||
BackgroundDownloadOn = 0X00010000,
|
||||
};
|
||||
|
||||
// XCONFIG_USER_PC_FLAGS
|
||||
enum X_PC_FLAGS : uint8_t {
|
||||
XBLAllowed = 0x01,
|
||||
XBLMembershipCreationAllowed = 0x02,
|
||||
PCEnabled = 0x80,
|
||||
};
|
||||
|
||||
enum X_PC_HINTS : uint8_t {
|
||||
FavoriteFictionalCharactar = 0,
|
||||
FavoritePersonFromHistory = 1,
|
||||
FavoriteChildhoodBookOrStory = 2,
|
||||
FavoriteMovie = 3,
|
||||
FavoriteFood = 4
|
||||
};
|
||||
|
||||
// XCONFIG_USER_VIDEO_OUTPUT_BLACK_LEVELS
|
||||
enum X_BLACK_LEVEL : uint32_t {
|
||||
High = 0x00000100,
|
||||
Intermediate = 0x00000200,
|
||||
LevelNormal = 0x00000300,
|
||||
};
|
||||
|
||||
// XCONFIG_CONSOLE_SCREENSAVER
|
||||
enum X_SCREENSAVER : uint32_t {
|
||||
ScreensaverOn = 0x000A,
|
||||
ScreensaverOff = 0X1000,
|
||||
};
|
||||
|
||||
// XCONFIG_CONSOLE_AUTO_SHUTDOWN
|
||||
enum X_AUTO_SHUTDOWN : uint32_t {
|
||||
AutoShutdownOff = 0x0000,
|
||||
AutoShutdownOneHr = 0x003C,
|
||||
AutoShutdownSixHr = 0x0168,
|
||||
};
|
||||
|
||||
// XCONFIG_CONSOLE_CAMERA_SETTINGS
|
||||
enum X_CAMERA_FLAGS : uint32_t {
|
||||
// Room
|
||||
RoomAuto = 0x00000000,
|
||||
DarkWall = 0x00000001,
|
||||
LightWall = 0x00000002,
|
||||
// Lighting
|
||||
LightingAuto = 0x00000000,
|
||||
Incandescent = 0x00000004,
|
||||
Flourescent = 0x00000008,
|
||||
Daylight = 0x0000000C,
|
||||
// Flourescent Anti-Flicker
|
||||
AntiFlickerAuto = 0x00000000,
|
||||
AntiFlickerOn = 0x00000001,
|
||||
AntiFlickerOff = 0x00000002,
|
||||
// Default
|
||||
AutoAll = 0x00000001,
|
||||
};
|
||||
|
||||
// XCONFIG_CONSOLE_KEYBOARD_LAYOUT
|
||||
enum X_KEYBOARD_LAYOUT : uint16_t {
|
||||
KeyboardDefault = 0x0000,
|
||||
EnglishQWERTY = 0x0001,
|
||||
};
|
||||
|
||||
// XCONFIG_CONSOLE_KEYBOARD_LAYOUT
|
||||
|
||||
} // namespace xboxkrnl
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
#endif // XENIA_KERNEL_XBOXKRNL_XBOXKRNL_XCONFIG_H_
|
Loading…
Reference in New Issue