[Xboxkrnl/Xconfig] - add xboxkrnl_xconfig.h
- Add xboxkrnl_xconfig.h to hold known Xconfig flags - Implement more xeExGetXConfigSetting cases
This commit is contained in:
committed by
Radosław Gliński
parent
b7b707ddd2
commit
180be3664e
@@ -7,6 +7,7 @@
|
|||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h"
|
||||||
#include "xenia/base/logging.h"
|
#include "xenia/base/logging.h"
|
||||||
#include "xenia/cpu/processor.h"
|
#include "xenia/cpu/processor.h"
|
||||||
#include "xenia/kernel/kernel_state.h"
|
#include "xenia/kernel/kernel_state.h"
|
||||||
@@ -79,14 +80,15 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||||||
setting_size = 4;
|
setting_size = 4;
|
||||||
switch (cvars::video_standard) {
|
switch (cvars::video_standard) {
|
||||||
case 1: // NTSCM
|
case 1: // NTSCM
|
||||||
xe::store_and_swap<uint32_t>(value, 0x00400100);
|
xe::store_and_swap<uint32_t>(value, X_AV_REGION::NTSCM);
|
||||||
break;
|
break;
|
||||||
case 2: // NTSCJ
|
case 2: // NTSCJ
|
||||||
xe::store_and_swap<uint32_t>(value, 0x00400200);
|
xe::store_and_swap<uint32_t>(value, X_AV_REGION::NTSCJ);
|
||||||
break;
|
break;
|
||||||
case 3: // PAL
|
case 3: // PAL
|
||||||
xe::store_and_swap<uint32_t>(
|
xe::store_and_swap<uint32_t>(value, cvars::use_50Hz_mode
|
||||||
value, cvars::use_50Hz_mode ? 0x00800300 : 0x00400400);
|
? X_AV_REGION::PAL_50
|
||||||
|
: X_AV_REGION::PAL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
xe::store_and_swap<uint32_t>(value, 0);
|
xe::store_and_swap<uint32_t>(value, 0);
|
||||||
@@ -121,10 +123,9 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||||||
break;
|
break;
|
||||||
case 0x000A: // XCONFIG_USER_VIDEO_FLAGS
|
case 0x000A: // XCONFIG_USER_VIDEO_FLAGS
|
||||||
setting_size = 4;
|
setting_size = 4;
|
||||||
// 0x00040000 normal
|
|
||||||
// 0x00050000 widescreen
|
|
||||||
xe::store_and_swap<uint32_t>(
|
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;
|
break;
|
||||||
case 0x000B: // XCONFIG_USER_AUDIO_FLAGS
|
case 0x000B: // XCONFIG_USER_AUDIO_FLAGS
|
||||||
setting_size = 4;
|
setting_size = 4;
|
||||||
@@ -139,6 +140,18 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||||||
setting_size = 1;
|
setting_size = 1;
|
||||||
value[0] = static_cast<uint8_t>(cvars::user_country);
|
value[0] = static_cast<uint8_t>(cvars::user_country);
|
||||||
break;
|
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:
|
default:
|
||||||
XELOGW("An unimplemented setting 0x{:04X} in XCONFIG USER CATEGORY",
|
XELOGW("An unimplemented setting 0x{:04X} in XCONFIG USER CATEGORY",
|
||||||
static_cast<uint16_t>(setting));
|
static_cast<uint16_t>(setting));
|
||||||
@@ -146,6 +159,35 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
|
|||||||
return X_STATUS_INVALID_PARAMETER_2;
|
return X_STATUS_INVALID_PARAMETER_2;
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
XELOGW("An unimplemented category 0x{:04X}",
|
XELOGW("An unimplemented category 0x{:04X}",
|
||||||
static_cast<uint16_t>(category));
|
static_cast<uint16_t>(category));
|
||||||
|
|||||||
138
src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h
Normal file
138
src/xenia/kernel/xboxkrnl/xboxkrnl_xconfig.h
Normal file
@@ -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_
|
||||||
Reference in New Issue
Block a user