Update documentation.

- Convert http to https, provide archive link when possible.
- Made CPU-JIT.png more readable on dark themes;
Added a white background so there isn't black text on a black
background.
This commit is contained in:
Margen67 2018-11-22 07:20:09 -08:00 committed by Rick Gibbed
parent 3beb9093ac
commit 896ac4a682
68 changed files with 164 additions and 156 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
# IF YOU HAVE A QUESTION THAT ISN'T A BUG REPORT, GO TO http://reddit.com/r/xenia # IF YOU HAVE A QUESTION THAT ISN'T A BUG REPORT, GO TO https://reddit.com/r/xenia
# #
# DO NOT CREATE ISSUES ABOUT SPECIFIC GAMES IN THIS REPOSITORY! # DO NOT CREATE ISSUES ABOUT SPECIFIC GAMES IN THIS REPOSITORY!
# a game specific issue would be e.g. "Game X crashes after you hit a character a certain way" # a game specific issue would be e.g. "Game X crashes after you hit a character a certain way"

View File

@ -2,11 +2,11 @@ Xenia - Xbox 360 Emulator Research Project
========================================== ==========================================
Xenia is an experimental emulator for the Xbox 360. For more information see the Xenia is an experimental emulator for the Xbox 360. For more information see the
[main xenia website](http://xenia.jp/). [main xenia website](https://xenia.jp/).
Come chat with us about **emulator-related topics** on [Discord](https://discord.gg/Q9mxZf9). Come chat with us about **emulator-related topics** on [Discord](https://discord.gg/Q9mxZf9).
For developer chat join `#dev` but stay on topic. Lurking is fine. For developer chat join `#dev` but stay on topic. Lurking is fine.
Please check the [frequently asked questions](http://xenia.jp/faq/) page before Please check the [frequently asked questions](https://xenia.jp/faq/) page before
asking questions. We've got jobs/lives/etc, so don't expect instant answers. asking questions. We've got jobs/lives/etc, so don't expect instant answers.
Discussing illegal activities will get you banned. No warnings. Discussing illegal activities will get you banned. No warnings.
@ -35,7 +35,7 @@ legally purchased devices and games and information made public on the internet
Windows 8.1+ with Python 3.4 and [Visual Studio 2017](https://www.visualstudio.com/downloads/) and the Windows SDKs installed: Windows 8.1+ with Python 3.4 and [Visual Studio 2017](https://www.visualstudio.com/downloads/) and the Windows SDKs installed:
> git clone https://github.com/benvanik/xenia.git > git clone https://github.com/xenia-project/xenia.git
> cd xenia > cd xenia
> xb setup > xb setup
@ -76,16 +76,16 @@ For general rules and guidelines please see [CONTRIBUTING.md](.github/CONTRIBUTI
Fixes and optimizations are always welcome (please!), but in addition to Fixes and optimizations are always welcome (please!), but in addition to
that there are some major work areas still untouched: that there are some major work areas still untouched:
* Help work through missing functionality/bugs in game [compat](https://github.com/benvanik/xenia/issues?labels=compat) * Help work through missing functionality/bugs in game [compat](https://github.com/xenia-project/xenia/issues?labels=compat)
* Add input drivers for [PS4 controllers](https://github.com/benvanik/xenia/issues/60) (or anything else) * Add input drivers for [PS4 controllers](https://github.com/xenia-project/xenia/issues/60) (or anything else)
* Skilled with Linux? A strong contributor is needed to [help with porting](https://github.com/benvanik/xenia/labels/cross%20platform) * Skilled with Linux? A strong contributor is needed to [help with porting](https://github.com/xenia-project/xenia/labels/cross%20platform)
See more projects [good for contributors](https://github.com/benvanik/xenia/labels/good%20first%20issue). It's a good idea to ask on Discord/the bugs before beginning work See more projects [good for contributors](https://github.com/xenia-project/xenia/labels/good%20first%20issue). It's a good idea to ask on Discord/the bugs before beginning work
on something. on something.
## FAQ ## FAQ
For more see the main [frequently asked questions](http://xenia.jp/faq/) page. For more see the main [frequently asked questions](https://xenia.jp/faq/) page.
### Can I get an exe? ### Can I get an exe?

View File

@ -12,7 +12,7 @@ video drivers for your card.
* Visual Studio 2017 * Visual Studio 2017
* Windows Universal CRT SDK * Windows Universal CRT SDK
* [Python 3.4+](https://www.python.org/downloads/) * [Python 3.4+](https://www.python.org/downloads/)
* You will also need the [Windows 8.1 SDK](http://msdn.microsoft.com/en-us/windows/desktop/bg162891) * You will also need the [Windows 8.1 SDK](https://msdn.microsoft.com/en-us/windows/desktop/bg162891)
* (for VS2017 just click the Windows 8.1 SDK option in the Individual Components section in the Visual Studio Installer) * (for VS2017 just click the Windows 8.1 SDK option in the Individual Components section in the Visual Studio Installer)
Ensure Python is in your PATH. Ensure Python is in your PATH.
@ -41,7 +41,7 @@ Linux support is extremely experimental and presently incomplete.
The build script uses LLVM/Clang 3.8. GCC should also work, but is not easily The build script uses LLVM/Clang 3.8. GCC should also work, but is not easily
swappable right now. swappable right now.
[CodeLite](http://codelite.org) is the IDE of choice and `xb premake` will spit [CodeLite](https://codelite.org) is the IDE of choice and `xb premake` will spit
out files for that. Make also works via `xb build`. out files for that. Make also works via `xb build`.
To get the latest Clang on an ubuntu system: To get the latest Clang on an ubuntu system:

View File

@ -123,16 +123,16 @@ The CPU is largely similar to the PPC part in the PS3, so Cell documents
often line up for the core instructions. The 360 adds some additional AltiVec often line up for the core instructions. The 360 adds some additional AltiVec
instructions, though, which are only documented in a few places (like the gcc source code, etc). instructions, though, which are only documented in a few places (like the gcc source code, etc).
* [Free60 Info](http://www.free60.org/Xenon_\(CPU\)) * [Free60 Info](https://free60project.github.io/wiki/Xenon_(CPU))
* [Power ISA docs](https://www.power.org/wp-content/uploads/2012/07/PowerISA_V2.06B_V2_PUBLIC.pdf) (aka 'PowerISA') * [Power ISA docs](https://web.archive.org/web/20140603115759/https://www.power.org/wp-content/uploads/2012/07/PowerISA_V2.06B_V2_PUBLIC.pdf) (aka 'PowerISA')
* [PowerPC Programming Environments Manual](https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/F7E732FF811F783187256FDD004D3797/$file/pem_64bit_v3.0.2005jul15.pdf) (aka 'pem_64') * [PowerPC Programming Environments Manual](https://web.archive.org/web/20141028181028/https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/F7E732FF811F783187256FDD004D3797/$file/pem_64bit_v3.0.2005jul15.pdf) (aka 'pem_64')
* [PowerPC Vector PEM](https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/C40E4C6133B31EE8872570B500791108/$file/vector_simd_pem_v_2.07c_26Oct2006_cell.pdf) * [PowerPC Vector PEM](https://web.archive.org/web/20130502201029/https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/C40E4C6133B31EE8872570B500791108/$file/vector_simd_pem_v_2.07c_26Oct2006_cell.pdf)
* [AltiVec PEM](http://cache.freescale.com/files/32bit/doc/ref_manual/ALTIVECPEM.pdf) * [AltiVec PEM](https://web.archive.org/web/20151110180336/https://cache.freescale.com/files/32bit/doc/ref_manual/ALTIVECPEM.pdf)
* [VMX128 Opcodes](http://biallas.net/doc/vmx128/vmx128.txt) * [VMX128 Opcodes](http://biallas.net/doc/vmx128/vmx128.txt)
* [AltiVec Decoding](https://github.com/kakaroto/ps3ida/blob/master/plugins/PPCAltivec/src/main.cpp) * [AltiVec Decoding](https://github.com/kakaroto/ps3ida/blob/master/plugins/PPCAltivec/src/main.cpp)
### x64 ### x64
* [Intel Manuals](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) * [Intel Manuals](https://software.intel.com/en-us/articles/intel-sdm)
* [Combined Intel Manuals](http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf) * [Combined Intel Manuals](https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf)
* [Apple AltiVec/SSE Migration Guide](https://developer.apple.com/legacy/library/documentation/Performance/Conceptual/Accelerate_sse_migration/Accelerate_sse_migration.pdf) * [Apple AltiVec/SSE Migration Guide](https://developer.apple.com/legacy/library/documentation/Performance/Conceptual/Accelerate_sse_migration/Accelerate_sse_migration.pdf)

View File

@ -121,6 +121,6 @@ PM4 commands documented at [src/xenia/gpu/xenos.h](../src/xenia/gpu/xenos.h#L521
### Shaders ### Shaders
* [LLVM R600 Tables](http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/R600Instructions.td) * [LLVM R600 Tables](https://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/R600Instructions.td)
** The opcode formats don't match, but the name->psuedo code is correct. ** The opcode formats don't match, but the name->psuedo code is correct.
* [xemit](https://github.com/gligli/libxemit/blob/master/xemitops.c) * [xemit](https://github.com/gligli/libxemit/blob/master/xemitops.c)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -58,13 +58,13 @@ think about tabs and wrapping and such.
To use the `xb format` auto-formatter, you need to have a `clang-format` on your To use the `xb format` auto-formatter, you need to have a `clang-format` on your
PATH. If you're on Windows you can do this by installing an LLVM binary package PATH. If you're on Windows you can do this by installing an LLVM binary package
from [the LLVM downloads page](http://llvm.org/releases/download.html). If you from [the LLVM downloads page](https://llvm.org/releases/download.html). If you
install it to the default location the `xb format` command will find it install it to the default location the `xb format` command will find it
automatically even if you don't choose to put all of LLVM onto your PATH. automatically even if you don't choose to put all of LLVM onto your PATH.
#### Visual Studio #### Visual Studio
Grab the official [experimental Visual Studio plugin](http://llvm.org/builds/). Grab the official [experimental Visual Studio plugin](https://llvm.org/builds/).
To switch to the Google style go Tools -> Options -> LLVM/Clang -> ClangFormat To switch to the Google style go Tools -> Options -> LLVM/Clang -> ClangFormat
and set Style to Google. Then use ctrl-r/ctrl-f to trigger the formatting. and set Style to Google. Then use ctrl-r/ctrl-f to trigger the formatting.
Unfortunately it only does the cursor by default, so you'll have to select the Unfortunately it only does the cursor by default, so you'll have to select the
@ -74,7 +74,7 @@ If you have a better option, let me know!
#### Xcode #### Xcode
Install [Alcatraz](http://alcatraz.io/) to get the [ClangFormat](https://github.com/travisjeffery/ClangFormat-Xcode) Install [Alcatraz](https://github.com/alcatraz/Alcatraz) to get the [ClangFormat](https://github.com/travisjeffery/ClangFormat-Xcode)
package. Set it to use the Google style and format on save. Never think about package. Set it to use the Google style and format on save. Never think about
tabs or linefeeds or whatever again. tabs or linefeeds or whatever again.

View File

@ -260,7 +260,7 @@ bool EmulatorWindow::Initialize() {
std::bind(&EmulatorWindow::ShowHelpWebsite, this))); std::bind(&EmulatorWindow::ShowHelpWebsite, this)));
help_menu->AddChild(MenuItem::Create( help_menu->AddChild(MenuItem::Create(
MenuItem::Type::kString, L"&About...", MenuItem::Type::kString, L"&About...",
[this]() { LaunchBrowser("http://xenia.jp/about/"); })); [this]() { LaunchBrowser("https://xenia.jp/about/"); }));
} }
main_menu->AddChild(std::move(help_menu)); main_menu->AddChild(std::move(help_menu));
@ -384,7 +384,7 @@ void EmulatorWindow::ToggleFullscreen() {
} }
} }
void EmulatorWindow::ShowHelpWebsite() { LaunchBrowser("http://xenia.jp"); } void EmulatorWindow::ShowHelpWebsite() { LaunchBrowser("https://xenia.jp"); }
void EmulatorWindow::UpdateTitle() { void EmulatorWindow::UpdateTitle() {
std::wstring title(base_title_); std::wstring title(base_title_);

View File

@ -25,7 +25,7 @@
// Helpful resources: // Helpful resources:
// https://github.com/koolkdev/libertyv/blob/master/libav_wrapper/xma2dec.c // https://github.com/koolkdev/libertyv/blob/master/libav_wrapper/xma2dec.c
// http://hcs64.com/mboard/forum.php?showthread=14818 // https://hcs64.com/mboard/forum.php?showthread=14818
// https://github.com/hrydgard/minidx9/blob/master/Include/xma2defs.h // https://github.com/hrydgard/minidx9/blob/master/Include/xma2defs.h
// Forward declarations // Forward declarations
@ -41,7 +41,7 @@ namespace apu {
// We load and swap the whole thing to splat here so that we can // We load and swap the whole thing to splat here so that we can
// use bitfields. // use bitfields.
// This could be important: // This could be important:
// http://www.fmod.org/questions/question/forum-15859 // https://www.fmod.org/questions/question/forum-15859
// Appears to be dumped in order (for the most part) // Appears to be dumped in order (for the most part)
struct XMA_CONTEXT_DATA { struct XMA_CONTEXT_DATA {

View File

@ -17,7 +17,8 @@
namespace xe { namespace xe {
// These functions are modeled off of the Apple OSAtomic routines // These functions are modeled off of the Apple OSAtomic routines
// http://developer.apple.com/library/mac/#documentation/DriversKernelHardware/Reference/libkern_ref/OSAtomic_h/ // https://developer.apple.com/documentation/kernel/osatomic_h (?)
// Original link (dead): https://developer.apple.com/library/mac/#documentation/DriversKernelHardware/Reference/libkern_ref/OSAtomic_h/
#if XE_PLATFORM_MAC #if XE_PLATFORM_MAC

View File

@ -44,8 +44,8 @@ LONG CALLBACK ExceptionHandlerCallback(PEXCEPTION_POINTERS ex_info) {
std::memcpy(thread_context.xmm_registers, &ex_info->ContextRecord->Xmm0, std::memcpy(thread_context.xmm_registers, &ex_info->ContextRecord->Xmm0,
sizeof(thread_context.xmm_registers)); sizeof(thread_context.xmm_registers));
// http://msdn.microsoft.com/en-us/library/ms679331(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/ms679331(v=vs.85).aspx
// http://msdn.microsoft.com/en-us/library/aa363082(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/aa363082(v=vs.85).aspx
Exception ex; Exception ex;
switch (ex_info->ExceptionRecord->ExceptionCode) { switch (ex_info->ExceptionRecord->ExceptionCode) {
case STATUS_ILLEGAL_INSTRUCTION: case STATUS_ILLEGAL_INSTRUCTION:

View File

@ -15,9 +15,13 @@
namespace xe { namespace xe {
// TODO(benvanik): fancy AVX versions. // TODO(benvanik): fancy AVX versions.
// http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/cb32b70b79f430456208a2cd521d028e0ece5d5b/entry/volk/kernels/volk/volk_16u_byteswap.h // https://github.com/gnuradio/volk/blob/master/kernels/volk/volk_16u_byteswap.h
// http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/f2bc76cc65ffba51a141950f98e75364e49df874/entry/volk/kernels/volk/volk_32u_byteswap.h // https://github.com/gnuradio/volk/blob/master/kernels/volk/volk_32u_byteswap.h
// http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/2c4c371885c31222362f70a1cd714415d1398021/entry/volk/kernels/volk/volk_64u_byteswap.h // https://github.com/gnuradio/volk/blob/master/kernels/volk/volk_64u_byteswap.h
// Original links:
// https://gnuradio.org/redmine/projects/gnuradio/repository/revisions/cb32b70b79f430456208a2cd521d028e0ece5d5b/entry/volk/kernels/volk/volk_16u_byteswap.h
// https://gnuradio.org/redmine/projects/gnuradio/repository/revisions/f2bc76cc65ffba51a141950f98e75364e49df874/entry/volk/kernels/volk/volk_32u_byteswap.h
// https://gnuradio.org/redmine/projects/gnuradio/repository/revisions/2c4c371885c31222362f70a1cd714415d1398021/entry/volk/kernels/volk/volk_64u_byteswap.h
void copy_128_aligned(void* dest, const void* src, size_t count) { void copy_128_aligned(void* dest, const void* src, size_t count) {
std::memcpy(dest, src, count * 16); std::memcpy(dest, src, count * 16);

View File

@ -19,7 +19,8 @@
// NOTE: ordering matters here as sometimes multiple flags are defined on // NOTE: ordering matters here as sometimes multiple flags are defined on
// certain platforms. // certain platforms.
// //
// Great resource on predefined macros: http://predef.sourceforge.net/preos.html // Great resource on predefined macros: https://sourceforge.net/p/predef/wiki/OperatingSystems/
// Original link: https://predef.sourceforge.net/preos.html
#if defined(__APPLE__) #if defined(__APPLE__)
#include <TargetConditionals.h> #include <TargetConditionals.h>

View File

@ -114,7 +114,7 @@ void Profiler::ThreadEnter(const char* name) {
void Profiler::ThreadExit() { MicroProfileOnThreadExit(); } void Profiler::ThreadExit() { MicroProfileOnThreadExit(); }
bool Profiler::OnKeyDown(int key_code) { bool Profiler::OnKeyDown(int key_code) {
// http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
switch (key_code) { switch (key_code) {
case VK_OEM_3: // ` case VK_OEM_3: // `
MicroProfileTogglePause(); MicroProfileTogglePause();

View File

@ -29,7 +29,7 @@ uint32_t current_thread_system_id() {
return static_cast<uint32_t>(GetCurrentThreadId()); return static_cast<uint32_t>(GetCurrentThreadId());
} }
// http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx // https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
#pragma pack(push, 8) #pragma pack(push, 8)
struct THREADNAME_INFO { struct THREADNAME_INFO {
DWORD dwType; // Must be 0x1000. DWORD dwType; // Must be 0x1000.

View File

@ -187,7 +187,7 @@ uint64_t ReadCapstoneReg(X64Context* context, x86_reg reg) {
#define X86_EFLAGS_SF 0x00000080 // Sign Flag #define X86_EFLAGS_SF 0x00000080 // Sign Flag
#define X86_EFLAGS_OF 0x00000800 // Overflow Flag #define X86_EFLAGS_OF 0x00000800 // Overflow Flag
bool TestCapstoneEflags(uint32_t eflags, uint32_t insn) { bool TestCapstoneEflags(uint32_t eflags, uint32_t insn) {
// http://www.felixcloutier.com/x86/Jcc.html // https://www.felixcloutier.com/x86/Jcc.html
switch (insn) { switch (insn) {
case X86_INS_JAE: case X86_INS_JAE:
// CF=0 && ZF=0 // CF=0 && ZF=0

View File

@ -37,7 +37,7 @@ namespace cpu {
namespace backend { namespace backend {
namespace x64 { namespace x64 {
// http://msdn.microsoft.com/en-us/library/ssa62fwe.aspx // https://msdn.microsoft.com/en-us/library/ssa62fwe.aspx
typedef enum _UNWIND_OP_CODES { typedef enum _UNWIND_OP_CODES {
UWOP_PUSH_NONVOL = 0, /* info == register number */ UWOP_PUSH_NONVOL = 0, /* info == register number */
UWOP_ALLOC_LARGE, /* no info, alloc size in next 2 slots */ UWOP_ALLOC_LARGE, /* no info, alloc size in next 2 slots */
@ -242,7 +242,7 @@ void Win32X64CodeCache::InitializeUnwindEntry(uint8_t* unwind_entry_address,
UNWIND_CODE* unwind_code = nullptr; UNWIND_CODE* unwind_code = nullptr;
if (!stack_size) { if (!stack_size) {
// http://msdn.microsoft.com/en-us/library/ddssxxy8.aspx // https://msdn.microsoft.com/en-us/library/ddssxxy8.aspx
unwind_info->Version = 1; unwind_info->Version = 1;
unwind_info->Flags = 0; unwind_info->Flags = 0;
unwind_info->SizeOfProlog = 0; unwind_info->SizeOfProlog = 0;
@ -252,7 +252,7 @@ void Win32X64CodeCache::InitializeUnwindEntry(uint8_t* unwind_entry_address,
} else if (stack_size <= 128) { } else if (stack_size <= 128) {
uint8_t prolog_size = 4; uint8_t prolog_size = 4;
// http://msdn.microsoft.com/en-us/library/ddssxxy8.aspx // https://msdn.microsoft.com/en-us/library/ddssxxy8.aspx
unwind_info->Version = 1; unwind_info->Version = 1;
unwind_info->Flags = 0; unwind_info->Flags = 0;
unwind_info->SizeOfProlog = prolog_size; unwind_info->SizeOfProlog = prolog_size;
@ -260,7 +260,7 @@ void Win32X64CodeCache::InitializeUnwindEntry(uint8_t* unwind_entry_address,
unwind_info->FrameRegister = 0; unwind_info->FrameRegister = 0;
unwind_info->FrameOffset = 0; unwind_info->FrameOffset = 0;
// http://msdn.microsoft.com/en-us/library/ck9asaa9.aspx // https://msdn.microsoft.com/en-us/library/ck9asaa9.aspx
unwind_code = &unwind_info->UnwindCode[unwind_info->CountOfCodes++]; unwind_code = &unwind_info->UnwindCode[unwind_info->CountOfCodes++];
unwind_code->CodeOffset = unwind_code->CodeOffset =
14; // end of instruction + 1 == offset of next instruction 14; // end of instruction + 1 == offset of next instruction
@ -270,7 +270,7 @@ void Win32X64CodeCache::InitializeUnwindEntry(uint8_t* unwind_entry_address,
// TODO(benvanik): take as parameters? // TODO(benvanik): take as parameters?
uint8_t prolog_size = 7; uint8_t prolog_size = 7;
// http://msdn.microsoft.com/en-us/library/ddssxxy8.aspx // https://msdn.microsoft.com/en-us/library/ddssxxy8.aspx
unwind_info->Version = 1; unwind_info->Version = 1;
unwind_info->Flags = 0; unwind_info->Flags = 0;
unwind_info->SizeOfProlog = prolog_size; unwind_info->SizeOfProlog = prolog_size;
@ -278,7 +278,7 @@ void Win32X64CodeCache::InitializeUnwindEntry(uint8_t* unwind_entry_address,
unwind_info->FrameRegister = 0; unwind_info->FrameRegister = 0;
unwind_info->FrameOffset = 0; unwind_info->FrameOffset = 0;
// http://msdn.microsoft.com/en-us/library/ck9asaa9.aspx // https://msdn.microsoft.com/en-us/library/ck9asaa9.aspx
unwind_code = &unwind_info->UnwindCode[unwind_info->CountOfCodes++]; unwind_code = &unwind_info->UnwindCode[unwind_info->CountOfCodes++];
unwind_code->CodeOffset = unwind_code->CodeOffset =
7; // end of instruction + 1 == offset of next instruction 7; // end of instruction + 1 == offset of next instruction

View File

@ -82,7 +82,7 @@ X64Emitter::X64Emitter(X64Backend* backend, XbyakAllocator* allocator)
if (!cpu_.has(Xbyak::util::Cpu::tAVX)) { if (!cpu_.has(Xbyak::util::Cpu::tAVX)) {
xe::FatalError( xe::FatalError(
"Your CPU is too old to support Xenia. See the FAQ for system " "Your CPU is too old to support Xenia. See the FAQ for system "
"requirements at http://xenia.jp"); "requirements at https://xenia.jp");
return; return;
} }
} }
@ -160,7 +160,7 @@ bool X64Emitter::Emit(HIRBuilder* builder, size_t* out_stack_size) {
// Function prolog. // Function prolog.
// Must be 16b aligned. // Must be 16b aligned.
// Windows is very strict about the form of this and the epilog: // Windows is very strict about the form of this and the epilog:
// http://msdn.microsoft.com/en-us/library/tawsa7cb.aspx // https://msdn.microsoft.com/en-us/library/tawsa7cb.aspx
// IMPORTANT: any changes to the prolog must be kept in sync with // IMPORTANT: any changes to the prolog must be kept in sync with
// X64CodeCache, which dynamically generates exception information. // X64CodeCache, which dynamically generates exception information.
// Adding or changing anything here must be matched! // Adding or changing anything here must be matched!
@ -738,7 +738,7 @@ Xbyak::Address X64Emitter::GetXmmConstPtr(XmmConst id) {
} }
void X64Emitter::LoadConstantXmm(Xbyak::Xmm dest, const vec128_t& v) { void X64Emitter::LoadConstantXmm(Xbyak::Xmm dest, const vec128_t& v) {
// http://www.agner.org/optimize/optimizing_assembly.pdf // https://www.agner.org/optimize/optimizing_assembly.pdf
// 13.4 Generating constants // 13.4 Generating constants
if (!v.low && !v.high) { if (!v.low && !v.high) {
// 0000... // 0000...

View File

@ -3367,7 +3367,8 @@ EMITTER_ASSOCIATIVE_COMPARE_XX(ULE, setbe, setae);
EMITTER_ASSOCIATIVE_COMPARE_XX(UGT, seta, setb); EMITTER_ASSOCIATIVE_COMPARE_XX(UGT, seta, setb);
EMITTER_ASSOCIATIVE_COMPARE_XX(UGE, setae, setbe); EMITTER_ASSOCIATIVE_COMPARE_XX(UGE, setae, setbe);
// http://x86.renejeschke.de/html/file_module_x86_id_288.html // https://web.archive.org/web/20171129015931/https://x86.renejeschke.de/html/file_module_x86_id_288.html
// Original link: https://x86.renejeschke.de/html/file_module_x86_id_288.html
#define EMITTER_ASSOCIATIVE_COMPARE_FLT_XX(op, instr) \ #define EMITTER_ASSOCIATIVE_COMPARE_FLT_XX(op, instr) \
struct COMPARE_##op##_F32 \ struct COMPARE_##op##_F32 \
: Sequence<COMPARE_##op##_F32, \ : Sequence<COMPARE_##op##_F32, \
@ -3793,7 +3794,7 @@ struct VECTOR_ADD
// If result is smaller than either of the inputs, we've // If result is smaller than either of the inputs, we've
// overflowed (only need to check one input) // overflowed (only need to check one input)
// if (src1 > res) then overflowed // if (src1 > res) then overflowed
// http://locklessinc.com/articles/sat_arithmetic/ // https://locklessinc.com/articles/sat_arithmetic/
e.vpxor(e.xmm2, src1, e.GetXmmConstPtr(XMMSignMaskI32)); e.vpxor(e.xmm2, src1, e.GetXmmConstPtr(XMMSignMaskI32));
e.vpxor(e.xmm0, e.xmm1, e.GetXmmConstPtr(XMMSignMaskI32)); e.vpxor(e.xmm0, e.xmm1, e.GetXmmConstPtr(XMMSignMaskI32));
e.vpcmpgtd(e.xmm0, e.xmm2, e.xmm0); e.vpcmpgtd(e.xmm0, e.xmm2, e.xmm0);
@ -3804,7 +3805,7 @@ struct VECTOR_ADD
// Overflow results if two inputs are the same sign and the // Overflow results if two inputs are the same sign and the
// result isn't the same sign. if ((s32b)(~(src1 ^ src2) & // result isn't the same sign. if ((s32b)(~(src1 ^ src2) &
// (src1 ^ res)) < 0) then overflowed // (src1 ^ res)) < 0) then overflowed
// http://locklessinc.com/articles/sat_arithmetic/ // https://locklessinc.com/articles/sat_arithmetic/
e.vpxor(e.xmm2, src1, src2); e.vpxor(e.xmm2, src1, src2);
e.vpxor(e.xmm3, src1, e.xmm1); e.vpxor(e.xmm3, src1, e.xmm1);
e.vpandn(e.xmm2, e.xmm2, e.xmm3); e.vpandn(e.xmm2, e.xmm2, e.xmm3);
@ -3950,7 +3951,7 @@ struct VECTOR_SUB
// If result is greater than either of the inputs, we've // If result is greater than either of the inputs, we've
// underflowed (only need to check one input) // underflowed (only need to check one input)
// if (res > src1) then underflowed // if (res > src1) then underflowed
// http://locklessinc.com/articles/sat_arithmetic/ // https://locklessinc.com/articles/sat_arithmetic/
e.vpxor(e.xmm2, src1, e.GetXmmConstPtr(XMMSignMaskI32)); e.vpxor(e.xmm2, src1, e.GetXmmConstPtr(XMMSignMaskI32));
e.vpxor(e.xmm0, e.xmm1, e.GetXmmConstPtr(XMMSignMaskI32)); e.vpxor(e.xmm0, e.xmm1, e.GetXmmConstPtr(XMMSignMaskI32));
e.vpcmpgtd(e.xmm0, e.xmm0, e.xmm2); e.vpcmpgtd(e.xmm0, e.xmm0, e.xmm2);
@ -3962,7 +3963,7 @@ struct VECTOR_SUB
// opposite. If signs are opposite and result sign isn't the // opposite. If signs are opposite and result sign isn't the
// same as src1's sign, we've overflowed. if ((s32b)((src1 ^ // same as src1's sign, we've overflowed. if ((s32b)((src1 ^
// src2) & (src1 ^ res)) < 0) then overflowed // src2) & (src1 ^ res)) < 0) then overflowed
// http://locklessinc.com/articles/sat_arithmetic/ // https://locklessinc.com/articles/sat_arithmetic/
e.vpxor(e.xmm2, src1, src2); e.vpxor(e.xmm2, src1, src2);
e.vpxor(e.xmm3, src1, e.xmm1); e.vpxor(e.xmm3, src1, e.xmm1);
e.vpand(e.xmm2, e.xmm2, e.xmm3); e.vpand(e.xmm2, e.xmm2, e.xmm3);
@ -5062,7 +5063,7 @@ EMITTER_OPCODE_TABLE(OPCODE_RECIP, RECIP_F32, RECIP_F64, RECIP_V128);
// OPCODE_POW2 // OPCODE_POW2
// ============================================================================ // ============================================================================
// TODO(benvanik): use approx here: // TODO(benvanik): use approx here:
// http://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html // https://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html
struct POW2_F32 : Sequence<POW2_F32, I<OPCODE_POW2, F32Op, F32Op>> { struct POW2_F32 : Sequence<POW2_F32, I<OPCODE_POW2, F32Op, F32Op>> {
static __m128 EmulatePow2(void*, __m128 src) { static __m128 EmulatePow2(void*, __m128 src) {
float src_value; float src_value;
@ -5112,7 +5113,7 @@ EMITTER_OPCODE_TABLE(OPCODE_POW2, POW2_F32, POW2_F64, POW2_V128);
// OPCODE_LOG2 // OPCODE_LOG2
// ============================================================================ // ============================================================================
// TODO(benvanik): use approx here: // TODO(benvanik): use approx here:
// http://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html // https://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html
// TODO(benvanik): this emulated fn destroys all xmm registers! don't do it! // TODO(benvanik): this emulated fn destroys all xmm registers! don't do it!
struct LOG2_F32 : Sequence<LOG2_F32, I<OPCODE_LOG2, F32Op, F32Op>> { struct LOG2_F32 : Sequence<LOG2_F32, I<OPCODE_LOG2, F32Op, F32Op>> {
static __m128 EmulateLog2(void*, __m128 src) { static __m128 EmulateLog2(void*, __m128 src) {
@ -5166,7 +5167,7 @@ struct DOT_PRODUCT_3_V128
: Sequence<DOT_PRODUCT_3_V128, : Sequence<DOT_PRODUCT_3_V128,
I<OPCODE_DOT_PRODUCT_3, F32Op, V128Op, V128Op>> { I<OPCODE_DOT_PRODUCT_3, F32Op, V128Op, V128Op>> {
static void Emit(X64Emitter& e, const EmitArgType& i) { static void Emit(X64Emitter& e, const EmitArgType& i) {
// http://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx // https://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx
EmitCommutativeBinaryXmmOp(e, i, EmitCommutativeBinaryXmmOp(e, i,
[](X64Emitter& e, Xmm dest, Xmm src1, Xmm src2) { [](X64Emitter& e, Xmm dest, Xmm src1, Xmm src2) {
// TODO(benvanik): apparently this is very slow // TODO(benvanik): apparently this is very slow
@ -5184,7 +5185,7 @@ struct DOT_PRODUCT_4_V128
: Sequence<DOT_PRODUCT_4_V128, : Sequence<DOT_PRODUCT_4_V128,
I<OPCODE_DOT_PRODUCT_4, F32Op, V128Op, V128Op>> { I<OPCODE_DOT_PRODUCT_4, F32Op, V128Op, V128Op>> {
static void Emit(X64Emitter& e, const EmitArgType& i) { static void Emit(X64Emitter& e, const EmitArgType& i) {
// http://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx // https://msdn.microsoft.com/en-us/library/bb514054(v=vs.90).aspx
EmitCommutativeBinaryXmmOp(e, i, EmitCommutativeBinaryXmmOp(e, i,
[](X64Emitter& e, Xmm dest, Xmm src1, Xmm src2) { [](X64Emitter& e, Xmm dest, Xmm src1, Xmm src2) {
// TODO(benvanik): apparently this is very slow // TODO(benvanik): apparently this is very slow
@ -7003,7 +7004,7 @@ struct PACK : Sequence<PACK, I<OPCODE_PACK, V128Op, V128Op, V128Op>> {
} }
static void EmitFLOAT16_2(X64Emitter& e, const EmitArgType& i) { static void EmitFLOAT16_2(X64Emitter& e, const EmitArgType& i) {
assert_true(i.src2.value->IsConstantZero()); assert_true(i.src2.value->IsConstantZero());
// http://blogs.msdn.com/b/chuckw/archive/2012/09/11/directxmath-f16c-and-fma.aspx // https://blogs.msdn.com/b/chuckw/archive/2012/09/11/directxmath-f16c-and-fma.aspx
// dest = [(src1.x | src1.y), 0, 0, 0] // dest = [(src1.x | src1.y), 0, 0, 0]
Xmm src; Xmm src;
@ -7398,10 +7399,10 @@ struct UNPACK : Sequence<UNPACK, I<OPCODE_UNPACK, V128Op, V128Op>> {
// 1 bit sign, 5 bit exponent, 10 bit mantissa // 1 bit sign, 5 bit exponent, 10 bit mantissa
// D3D10 half float format // D3D10 half float format
// TODO(benvanik): // TODO(benvanik):
// http://blogs.msdn.com/b/chuckw/archive/2012/09/11/directxmath-f16c-and-fma.aspx // https://blogs.msdn.com/b/chuckw/archive/2012/09/11/directxmath-f16c-and-fma.aspx
// Use _mm_cvtph_ps -- requires very modern processors (SSE5+) // Use _mm_cvtph_ps -- requires very modern processors (SSE5+)
// Unpacking half floats: // Unpacking half floats:
// http://fgiesen.wordpress.com/2012/03/28/half-to-float-done-quic/ // https://fgiesen.wordpress.com/2012/03/28/half-to-float-done-quic/
// Packing half floats: https://gist.github.com/rygorous/2156668 // Packing half floats: https://gist.github.com/rygorous/2156668
// Load source, move from tight pack of X16Y16.... to X16...Y16... // Load source, move from tight pack of X16Y16.... to X16...Y16...
// Also zero out the high end. // Also zero out the high end.

View File

@ -489,7 +489,7 @@ int CompareValueUse(const Value::Use* a, const Value::Use* b) {
} // namespace } // namespace
void RegisterAllocationPass::SortUsageList(Value* value) { void RegisterAllocationPass::SortUsageList(Value* value) {
// Modified in-place linked list sort from: // Modified in-place linked list sort from:
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.c // https://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.c
if (!value->use_head) { if (!value->use_head) {
return; return;
} }

View File

@ -316,7 +316,7 @@ bool TryDecodeMov(const uint8_t* p, DecodedMov* mov) {
} }
if (p[i] == 0x0F && p[i + 1] == 0x38 && p[i + 2] == 0xF1) { if (p[i] == 0x0F && p[i + 1] == 0x38 && p[i + 2] == 0xF1) {
// MOVBE m32, r32 (store) // MOVBE m32, r32 (store)
// http://www.tptp.cc/mirrors/siyobik.info/instruction/MOVBE.html // https://web.archive.org/web/20170629091435/https://www.tptp.cc/mirrors/siyobik.info/instruction/MOVBE.html
// 44 0f 38 f1 a4 02 00 movbe DWORD PTR [rdx+rax*1+0x0],r12d // 44 0f 38 f1 a4 02 00 movbe DWORD PTR [rdx+rax*1+0x0],r12d
// 42 0f 38 f1 8c 22 00 movbe DWORD PTR [rdx+r12*1+0x0],ecx // 42 0f 38 f1 8c 22 00 movbe DWORD PTR [rdx+r12*1+0x0],ecx
// 0f 38 f1 8c 02 00 00 movbe DWORD PTR [rdx + rax * 1 + 0x0], ecx // 0f 38 f1 8c 02 00 00 movbe DWORD PTR [rdx + rax * 1 + 0x0], ecx
@ -325,7 +325,7 @@ bool TryDecodeMov(const uint8_t* p, DecodedMov* mov) {
i += 3; i += 3;
} else if (p[i] == 0x0F && p[i + 1] == 0x38 && p[i + 2] == 0xF0) { } else if (p[i] == 0x0F && p[i + 1] == 0x38 && p[i + 2] == 0xF0) {
// MOVBE r32, m32 (load) // MOVBE r32, m32 (load)
// http://www.tptp.cc/mirrors/siyobik.info/instruction/MOVBE.html // https://web.archive.org/web/20170629091435/https://www.tptp.cc/mirrors/siyobik.info/instruction/MOVBE.html
// 44 0f 38 f0 a4 02 00 movbe r12d,DWORD PTR [rdx+rax*1+0x0] // 44 0f 38 f0 a4 02 00 movbe r12d,DWORD PTR [rdx+rax*1+0x0]
// 42 0f 38 f0 8c 22 00 movbe ecx,DWORD PTR [rdx+r12*1+0x0] // 42 0f 38 f0 8c 22 00 movbe ecx,DWORD PTR [rdx+r12*1+0x0]
// 46 0f 38 f0 a4 22 00 movbe r12d,DWORD PTR [rdx+r12*1+0x0] // 46 0f 38 f0 a4 22 00 movbe r12d,DWORD PTR [rdx+r12*1+0x0]
@ -336,7 +336,7 @@ bool TryDecodeMov(const uint8_t* p, DecodedMov* mov) {
i += 3; i += 3;
} else if (p[i] == 0x89) { } else if (p[i] == 0x89) {
// MOV m32, r32 (store) // MOV m32, r32 (store)
// http://www.tptp.cc/mirrors/siyobik.info/instruction/MOV.html // https://web.archive.org/web/20170629072136/https://www.tptp.cc/mirrors/siyobik.info/instruction/MOV.html
// 44 89 24 02 mov DWORD PTR[rdx + rax * 1], r12d // 44 89 24 02 mov DWORD PTR[rdx + rax * 1], r12d
// 42 89 0c 22 mov DWORD PTR[rdx + r12 * 1], ecx // 42 89 0c 22 mov DWORD PTR[rdx + r12 * 1], ecx
// 89 0c 02 mov DWORD PTR[rdx + rax * 1], ecx // 89 0c 02 mov DWORD PTR[rdx + rax * 1], ecx
@ -345,7 +345,7 @@ bool TryDecodeMov(const uint8_t* p, DecodedMov* mov) {
++i; ++i;
} else if (p[i] == 0x8B) { } else if (p[i] == 0x8B) {
// MOV r32, m32 (load) // MOV r32, m32 (load)
// http://www.tptp.cc/mirrors/siyobik.info/instruction/MOV.html // https://web.archive.org/web/20170629072136/https://www.tptp.cc/mirrors/siyobik.info/instruction/MOV.html
// 44 8b 24 02 mov r12d, DWORD PTR[rdx + rax * 1] // 44 8b 24 02 mov r12d, DWORD PTR[rdx + rax * 1]
// 42 8b 0c 22 mov ecx, DWORD PTR[rdx + r12 * 1] // 42 8b 0c 22 mov ecx, DWORD PTR[rdx + r12 * 1]
// 46 8b 24 22 mov r12d, DWORD PTR[rdx + r12 * 1] // 46 8b 24 22 mov r12d, DWORD PTR[rdx + r12 * 1]
@ -355,7 +355,7 @@ bool TryDecodeMov(const uint8_t* p, DecodedMov* mov) {
++i; ++i;
} else if (p[i] == 0xC7) { } else if (p[i] == 0xC7) {
// MOV m32, simm32 // MOV m32, simm32
// http://www.asmpedia.org/index.php?title=MOV // https://web.archive.org/web/20161017042413/https://www.asmpedia.org/index.php?title=MOV
// C7 04 02 02 00 00 00 mov dword ptr [rdx+rax],2 // C7 04 02 02 00 00 00 mov dword ptr [rdx+rax],2
mov->is_load = false; mov->is_load = false;
mov->byte_swap = false; mov->byte_swap = false;

View File

@ -31,7 +31,7 @@ Value* CalculateEA_0(PPCHIRBuilder& f, uint32_t ra, uint32_t rb);
// Most of this file comes from: // Most of this file comes from:
// http://biallas.net/doc/vmx128/vmx128.txt // http://biallas.net/doc/vmx128/vmx128.txt
// https://github.com/kakaroto/ps3ida/blob/master/plugins/PPCAltivec/src/main.cpp // https://github.com/kakaroto/ps3ida/blob/master/plugins/PPCAltivec/src/main.cpp
// http://sannybuilder.com/forums/viewtopic.php?id=190 // https://sannybuilder.com/forums/viewtopic.php?id=190
#define OP(x) ((((uint32_t)(x)) & 0x3f) << 26) #define OP(x) ((((uint32_t)(x)) & 0x3f) << 26)
#define VX128(op, xop) (OP(op) | (((uint32_t)(xop)) & 0x3d0)) #define VX128(op, xop) (OP(op) | (((uint32_t)(xop)) & 0x3d0))
@ -2068,7 +2068,7 @@ int InstrEmit_vpkd3d128(PPCHIRBuilder& f, const InstrData& i) {
assert_unhandled_case(type); assert_unhandled_case(type);
return 1; return 1;
} }
// http://hlssmod.net/he_code/public/pixelwriter.h // https://hlssmod.net/he_code/public/pixelwriter.h
// control = prev:0123 | new:4567 // control = prev:0123 | new:4567
uint32_t control = kIdentityPermuteMask; // original uint32_t control = kIdentityPermuteMask; // original
switch (pack) { switch (pack) {
@ -2141,7 +2141,8 @@ int InstrEmit_vpkd3d128(PPCHIRBuilder& f, const InstrData& i) {
int InstrEmit_vupkd3d128(PPCHIRBuilder& f, const InstrData& i) { int InstrEmit_vupkd3d128(PPCHIRBuilder& f, const InstrData& i) {
// Can't find many docs on this. Best reference is // Can't find many docs on this. Best reference is
// http://worldcraft.googlecode.com/svn/trunk/src/qylib/math/xmmatrix.inl, // https://code.google.com/archive/p/worldcraft/source/default/source?page=4
// (qylib/math/xmmatrix.inl)
// which shows how it's used in some cases. Since it's all intrinsics, // which shows how it's used in some cases. Since it's all intrinsics,
// finding it in code is pretty easy. // finding it in code is pretty easy.
const uint32_t vd = i.VX128_3.VD128l | (i.VX128_3.VD128h << 5); const uint32_t vd = i.VX128_3.VD128l | (i.VX128_3.VD128h << 5);

View File

@ -26,7 +26,7 @@ using xe::cpu::hir::RoundMode;
using xe::cpu::hir::Value; using xe::cpu::hir::Value;
// Good source of information: // Good source of information:
// http://mamedev.org/source/src/emu/cpu/powerpc/ppc_ops.c // https://github.com/mamedev/historic-mame/blob/master/src/emu/cpu/powerpc/ppc_ops.c
// The correctness of that code is not reflected here yet -_- // The correctness of that code is not reflected here yet -_-
// Enable rounding numbers to single precision as required. // Enable rounding numbers to single precision as required.

View File

@ -347,8 +347,8 @@ void CommandProcessor::MakeCoherent() {
// some way to check for dest coherency (what all the COHER_DEST_BASE_* // some way to check for dest coherency (what all the COHER_DEST_BASE_*
// registers are for). // registers are for).
// Best docs I've found on this are here: // Best docs I've found on this are here:
// http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/10/R6xx_R7xx_3D.pdf // https://web.archive.org/web/20160711162346/https://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/10/R6xx_R7xx_3D.pdf
// http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/tree/src/r6xx_accel.c?id=3f8b6eccd9dba116cc4801e7f80ce21a879c67d2#n454 // https://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/tree/src/r6xx_accel.c?id=3f8b6eccd9dba116cc4801e7f80ce21a879c67d2#n454
RegisterFile* regs = register_file_; RegisterFile* regs = register_file_;
auto status_host = regs->values[XE_GPU_REG_COHER_STATUS_HOST].u32; auto status_host = regs->values[XE_GPU_REG_COHER_STATUS_HOST].u32;
@ -1392,7 +1392,7 @@ bool CommandProcessor::ExecutePacketType3_VIZ_QUERY(RingBuffer* reader,
uint32_t packet, uint32_t packet,
uint32_t count) { uint32_t count) {
// begin/end initiator for viz query extent processing // begin/end initiator for viz query extent processing
// http://www.google.com/patents/US20050195186 // https://www.google.com/patents/US20050195186
assert_true(count == 1); assert_true(count == 1);
uint32_t dword0 = reader->ReadAndSwap<uint32_t>(); uint32_t dword0 = reader->ReadAndSwap<uint32_t>();

View File

@ -131,8 +131,8 @@ struct VertexData {
}; };
)"); )");
// http://www.nvidia.com/object/cube_map_ogl_tutorial.html // https://www.nvidia.com/object/cube_map_ogl_tutorial.html
// http://developer.amd.com/wordpress/media/2012/10/R600_Instruction_Set_Architecture.pdf // https://developer.amd.com/wordpress/media/2012/10/R600_Instruction_Set_Architecture.pdf
// src0 = Rn.zzxy, src1 = Rn.yxzz // src0 = Rn.zzxy, src1 = Rn.yxzz
// dst.W = FaceId; // dst.W = FaceId;
// dst.Z = 2.0f * MajorAxis; // dst.Z = 2.0f * MajorAxis;

View File

@ -26,8 +26,8 @@ namespace gpu {
// Nvidia Optimus/AMD PowerXpress support. // Nvidia Optimus/AMD PowerXpress support.
// These exports force the process to trigger the discrete GPU in multi-GPU // These exports force the process to trigger the discrete GPU in multi-GPU
// systems. // systems.
// http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf // https://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf
// http://stackoverflow.com/questions/17458803/amd-equivalent-to-nvoptimusenablement // https://stackoverflow.com/questions/17458803/amd-equivalent-to-nvoptimusenablement
#if XE_PLATFORM_WIN32 #if XE_PLATFORM_WIN32
extern "C" { extern "C" {
__declspec(dllexport) uint32_t NvOptimusEnablement = 0x00000001; __declspec(dllexport) uint32_t NvOptimusEnablement = 0x00000001;
@ -74,7 +74,7 @@ X_STATUS GraphicsSystem::Setup(cpu::Processor* processor,
"Ensure you have the latest drivers for your GPU and " "Ensure you have the latest drivers for your GPU and "
"that it supports Vulkan.\n" "that it supports Vulkan.\n"
"\n" "\n"
"See http://xenia.jp/faq/ for more information and a list of " "See https://xenia.jp/faq/ for more information and a list of "
"supported GPUs."); "supported GPUs.");
return X_STATUS_UNSUCCESSFUL; return X_STATUS_UNSUCCESSFUL;
} }

View File

@ -40,7 +40,7 @@ using namespace ucode;
// https://github.com/freedreno/freedreno/blob/master/util/disasm-a2xx.c // https://github.com/freedreno/freedreno/blob/master/util/disasm-a2xx.c
// //
// Lots of naming comes from the disassembly spit out by the XNA GS compiler // Lots of naming comes from the disassembly spit out by the XNA GS compiler
// and dumps of d3dcompiler and games: http://pastebin.com/i4kAv7bB // and dumps of d3dcompiler and games: https://pastebin.com/i4kAv7bB
ShaderTranslator::ShaderTranslator() = default; ShaderTranslator::ShaderTranslator() = default;

View File

@ -48,7 +48,7 @@ void CopySwapBlock(Endian endian, void* output, const void* input,
void ConvertTexelCTX1ToR8G8(Endian endian, void* output, const void* input, void ConvertTexelCTX1ToR8G8(Endian endian, void* output, const void* input,
size_t length) { size_t length) {
// http://fileadmin.cs.lth.se/cs/Personal/Michael_Doggett/talks/unc-xenos-doggett.pdf // https://fileadmin.cs.lth.se/cs/Personal/Michael_Doggett/talks/unc-xenos-doggett.pdf
union { union {
uint8_t data[8]; uint8_t data[8];
struct { struct {

View File

@ -26,7 +26,7 @@ using namespace xe::gpu::xenos;
bool TextureInfo::Prepare(const xe_gpu_texture_fetch_t& fetch, bool TextureInfo::Prepare(const xe_gpu_texture_fetch_t& fetch,
TextureInfo* out_info) { TextureInfo* out_info) {
// http://msdn.microsoft.com/en-us/library/windows/desktop/cc308051(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/cc308051(v=vs.85).aspx
// a2xx_sq_surfaceformat // a2xx_sq_surfaceformat
std::memset(out_info, 0, sizeof(TextureInfo)); std::memset(out_info, 0, sizeof(TextureInfo));

View File

@ -17,7 +17,7 @@
#include "xenia/gpu/xenos.h" #include "xenia/gpu/xenos.h"
// Closest AMD doc: // Closest AMD doc:
// http://developer.amd.com/wordpress/media/2012/10/R600_Instruction_Set_Architecture.pdf // https://developer.amd.com/wordpress/media/2012/10/R600_Instruction_Set_Architecture.pdf
// Microcode format differs, but most fields/enums are the same. // Microcode format differs, but most fields/enums are the same.
// This code comes from the freedreno project: // This code comes from the freedreno project:
@ -701,7 +701,7 @@ static_assert_size(TextureFetchInstruction, 12);
// R600 docs that have a near 1:1 with the instructions available in the xenos // R600 docs that have a near 1:1 with the instructions available in the xenos
// GPU. Some of the behavior has been experimentally verified. Some has been // GPU. Some of the behavior has been experimentally verified. Some has been
// guessed. // guessed.
// Docs: http://www.x.org/docs/AMD/old/r600isa.pdf // Docs: https://www.x.org/docs/AMD/old/r600isa.pdf
// //
// Conventions: // Conventions:
// - All temporary registers are vec4s. // - All temporary registers are vec4s.

View File

@ -660,7 +660,7 @@ bool PipelineCache::SetDynamicState(VkCommandBuffer command_buffer,
} }
// Whether each of the viewport settings are enabled. // Whether each of the viewport settings are enabled.
// http://www.x.org/docs/AMD/old/evergreen_3D_registers_v2.pdf // https://www.x.org/docs/AMD/old/evergreen_3D_registers_v2.pdf
bool vport_xscale_enable = (regs.pa_cl_vte_cntl & (1 << 0)) > 0; bool vport_xscale_enable = (regs.pa_cl_vte_cntl & (1 << 0)) > 0;
bool vport_xoffset_enable = (regs.pa_cl_vte_cntl & (1 << 1)) > 0; bool vport_xoffset_enable = (regs.pa_cl_vte_cntl & (1 << 1)) > 0;
bool vport_yscale_enable = (regs.pa_cl_vte_cntl & (1 << 2)) > 0; bool vport_yscale_enable = (regs.pa_cl_vte_cntl & (1 << 2)) > 0;
@ -865,7 +865,7 @@ bool PipelineCache::SetDynamicState(VkCommandBuffer command_buffer,
push_constants.window_scale[3] = (-1280.f / window_height_scalar) + 0.5f; push_constants.window_scale[3] = (-1280.f / window_height_scalar) + 0.5f;
} }
// http://www.x.org/docs/AMD/old/evergreen_3D_registers_v2.pdf // https://www.x.org/docs/AMD/old/evergreen_3D_registers_v2.pdf
// VTX_XY_FMT = true: the incoming XY have already been multiplied by 1/W0. // VTX_XY_FMT = true: the incoming XY have already been multiplied by 1/W0.
// = false: multiply the X, Y coordinates by 1/W0. // = false: multiply the X, Y coordinates by 1/W0.
// VTX_Z_FMT = true: the incoming Z has already been multiplied by 1/W0. // VTX_Z_FMT = true: the incoming Z has already been multiplied by 1/W0.

View File

@ -786,7 +786,7 @@ bool RenderCache::ParseConfiguration(RenderConfiguration* config) {
config->mode_control = regs.rb_modecontrol.edram_mode; config->mode_control = regs.rb_modecontrol.edram_mode;
// RB_SURFACE_INFO // RB_SURFACE_INFO
// http://fossies.org/dox/MesaLib-10.3.5/fd2__gmem_8c_source.html // https://fossies.org/dox/MesaLib-10.3.5/fd2__gmem_8c_source.html
config->surface_pitch_px = regs.rb_surface_info.surface_pitch; config->surface_pitch_px = regs.rb_surface_info.surface_pitch;
config->surface_msaa = regs.rb_surface_info.msaa_samples; config->surface_msaa = regs.rb_surface_info.msaa_samples;

View File

@ -99,7 +99,7 @@ const TextureConfig texture_configs[64] = {
/* k_16_MPEG_INTERLACED */ ___(UNDEFINED), /* k_16_MPEG_INTERLACED */ ___(UNDEFINED),
/* k_16_16_MPEG_INTERLACED */ ___(UNDEFINED), /* k_16_16_MPEG_INTERLACED */ ___(UNDEFINED),
// http://fileadmin.cs.lth.se/cs/Personal/Michael_Doggett/talks/unc-xenos-doggett.pdf // https://fileadmin.cs.lth.se/cs/Personal/Michael_Doggett/talks/unc-xenos-doggett.pdf
/* k_DXN */ ___(BC5_UNORM_BLOCK), // ? /* k_DXN */ ___(BC5_UNORM_BLOCK), // ?
/* k_8_8_8_8_AS_16_16_16_16 */ ___(R8G8B8A8_UNORM), /* k_8_8_8_8_AS_16_16_16_16 */ ___(R8G8B8A8_UNORM),
@ -116,7 +116,7 @@ const TextureConfig texture_configs[64] = {
/* k_DXT3A */ _c_(BC2_UNORM_BLOCK, ___R), /* k_DXT3A */ _c_(BC2_UNORM_BLOCK, ___R),
/* k_DXT5A */ _c_(BC4_UNORM_BLOCK, RRRR), // ATI1N /* k_DXT5A */ _c_(BC4_UNORM_BLOCK, RRRR), // ATI1N
// http://fileadmin.cs.lth.se/cs/Personal/Michael_Doggett/talks/unc-xenos-doggett.pdf // https://fileadmin.cs.lth.se/cs/Personal/Michael_Doggett/talks/unc-xenos-doggett.pdf
/* k_CTX1 */ ___(R8G8_UINT), /* k_CTX1 */ ___(R8G8_UINT),
/* k_DXT3A_AS_1_1_1_1 */ ___(UNDEFINED), /* k_DXT3A_AS_1_1_1_1 */ ___(UNDEFINED),

View File

@ -916,7 +916,7 @@ bool VulkanCommandProcessor::IssueCopy() {
assert_true(copy_regs->copy_mask == 0); assert_true(copy_regs->copy_mask == 0);
// RB_SURFACE_INFO // RB_SURFACE_INFO
// http://fossies.org/dox/MesaLib-10.3.5/fd2__gmem_8c_source.html // https://fossies.org/dox/MesaLib-10.3.5/fd2__gmem_8c_source.html
uint32_t surface_info = regs[XE_GPU_REG_RB_SURFACE_INFO].u32; uint32_t surface_info = regs[XE_GPU_REG_RB_SURFACE_INFO].u32;
uint32_t surface_pitch = surface_info & 0x3FFF; uint32_t surface_pitch = surface_info & 0x3FFF;
auto surface_msaa = static_cast<MsaaSamples>((surface_info >> 16) & 0x3); auto surface_msaa = static_cast<MsaaSamples>((surface_info >> 16) & 0x3);

View File

@ -68,7 +68,7 @@ enum class TextureSign : uint32_t {
kUnsigned = 0, kUnsigned = 0,
// Two's complement texture data. // Two's complement texture data.
kSigned = 1, kSigned = 1,
// 2*color-1 - http://xboxforums.create.msdn.com/forums/t/107374.aspx // 2*color-1 - https://xboxforums.create.msdn.com/forums/t/107374.aspx
kUnsignedBiased = 2, kUnsignedBiased = 2,
// Linearized when sampled. // Linearized when sampled.
kGamma = 3, kGamma = 3,

View File

@ -70,7 +70,7 @@ struct X_INPUT_CAPABILITIES {
static_assert_size(X_INPUT_CAPABILITIES, static_assert_size(X_INPUT_CAPABILITIES,
sizeof(X_INPUT_GAMEPAD) + sizeof(X_INPUT_VIBRATION) + 4); sizeof(X_INPUT_GAMEPAD) + sizeof(X_INPUT_VIBRATION) + 4);
// http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinput_keystroke(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinput_keystroke(v=vs.85).aspx
struct X_INPUT_KEYSTROKE { struct X_INPUT_KEYSTROKE {
be<uint16_t> virtual_key; be<uint16_t> virtual_key;
be<uint16_t> unicode; be<uint16_t> unicode;

View File

@ -99,7 +99,7 @@ X_RESULT XInputInputDriver::GetKeystroke(uint32_t user_index, uint32_t flags,
// XInputGetKeystroke on Windows has a bug where it will return // XInputGetKeystroke on Windows has a bug where it will return
// ERROR_SUCCESS (0) even if the device is not connected: // ERROR_SUCCESS (0) even if the device is not connected:
// http://stackoverflow.com/questions/23669238/xinputgetkeystroke-returning-error-success-while-controller-is-unplugged // https://stackoverflow.com/questions/23669238/xinputgetkeystroke-returning-error-success-while-controller-is-unplugged
// //
// So we first check if the device is connected via XInputGetCapabilities, so // So we first check if the device is connected via XInputGetCapabilities, so
// we are not passing back an uninitialized X_INPUT_KEYSTROKE structure: // we are not passing back an uninitialized X_INPUT_KEYSTROKE structure:

View File

@ -579,7 +579,7 @@ void KernelState::RegisterNotifyListener(NotifyListener* listener) {
// Games seem to expect a few notifications on startup, only for the first // Games seem to expect a few notifications on startup, only for the first
// listener. // listener.
// http://cs.rin.ru/forum/viewtopic.php?f=38&t=60668&hilit=resident+evil+5&start=375 // https://cs.rin.ru/forum/viewtopic.php?f=38&t=60668&hilit=resident+evil+5&start=375
if (!has_notified_startup_ && listener->mask() & 0x00000001) { if (!has_notified_startup_ && listener->mask() & 0x00000001) {
has_notified_startup_ = true; has_notified_startup_ = true;
// XN_SYS_UI (on, off) // XN_SYS_UI (on, off)

View File

@ -19,8 +19,8 @@ namespace xe {
namespace kernel { namespace kernel {
namespace util { namespace util {
// http://freestyledash.googlecode.com/svn/trunk/Freestyle/Tools/XEX/SPA.h // https://github.com/oukiar/freestyledash/blob/master/Freestyle/Tools/XEX/SPA.h
// http://freestyledash.googlecode.com/svn/trunk/Freestyle/Tools/XEX/SPA.cpp // https://github.com/oukiar/freestyledash/blob/master/Freestyle/Tools/XEX/SPA.cpp
enum class XdbfSection : uint16_t { enum class XdbfSection : uint16_t {
kMetadata = 0x0001, kMetadata = 0x0001,
@ -49,7 +49,7 @@ struct XdbfBlock {
}; };
// Wraps an XBDF (XboxDataBaseFormat) in-memory database. // Wraps an XBDF (XboxDataBaseFormat) in-memory database.
// http://www.free60.org/wiki/XDBF // https://free60project.github.io/wiki/XDBF.html
class XdbfWrapper { class XdbfWrapper {
public: public:
XdbfWrapper(const uint8_t* data, size_t data_size); XdbfWrapper(const uint8_t* data, size_t data_size);

View File

@ -25,7 +25,7 @@ namespace xam {
namespace apps { namespace apps {
// Only source of docs for a lot of these functions: // Only source of docs for a lot of these functions:
// http://freestyledash.googlecode.com/svn-history/r1/trunk/Freestyle/Scenes/Media/Music/ScnMusic.cpp // https://github.com/oukiar/freestyledash/blob/master/Freestyle/Scenes/Media/Music/ScnMusic.cpp
class XmpApp : public App { class XmpApp : public App {
public: public:

View File

@ -21,7 +21,7 @@ UserProfile::UserProfile() {
xuid_ = 0xBABEBABEBABEBABE; xuid_ = 0xBABEBABEBABEBABE;
name_ = "User"; name_ = "User";
// http://cs.rin.ru/forum/viewtopic.php?f=38&t=60668&hilit=gfwl+live&start=195 // https://cs.rin.ru/forum/viewtopic.php?f=38&t=60668&hilit=gfwl+live&start=195
// https://github.com/arkem/py360/blob/master/py360/constants.py // https://github.com/arkem/py360/blob/master/py360/constants.py
// XPROFILE_GAMER_YAXIS_INVERSION // XPROFILE_GAMER_YAXIS_INVERSION
AddSetting(std::make_unique<Int32Setting>(0x10040002, 0)); AddSetting(std::make_unique<Int32Setting>(0x10040002, 0));

View File

@ -128,7 +128,7 @@ dword_result_t XamContentResolve(dword_t user_index, lpvoid_t content_data_ptr,
} }
DECLARE_XAM_EXPORT1(XamContentResolve, kContent, kStub); DECLARE_XAM_EXPORT1(XamContentResolve, kContent, kStub);
// http://gameservice.googlecode.com/svn-history/r14/trunk/ContentManager.cpp // https://github.com/MrColdbird/gameservice/blob/master/ContentManager.cpp
// https://github.com/LestaD/SourceEngine2007/blob/master/se2007/engine/xboxsystem.cpp#L499 // https://github.com/LestaD/SourceEngine2007/blob/master/se2007/engine/xboxsystem.cpp#L499
dword_result_t XamContentCreateEnumerator(dword_t user_index, dword_t device_id, dword_result_t XamContentCreateEnumerator(dword_t user_index, dword_t device_id,
dword_t content_type, dword_t content_type,

View File

@ -38,7 +38,7 @@ dword_result_t XamEnableInactivityProcessing(dword_t unk, dword_t enable) {
} }
DECLARE_XAM_EXPORT1(XamEnableInactivityProcessing, kInput, kStub); DECLARE_XAM_EXPORT1(XamEnableInactivityProcessing, kInput, kStub);
// http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputgetcapabilities(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputgetcapabilities(v=vs.85).aspx
dword_result_t XamInputGetCapabilities(dword_t user_index, dword_t flags, dword_result_t XamInputGetCapabilities(dword_t user_index, dword_t flags,
pointer_t<X_INPUT_CAPABILITIES> caps) { pointer_t<X_INPUT_CAPABILITIES> caps) {
if (!caps) { if (!caps) {
@ -84,7 +84,7 @@ dword_result_t XamInputGetCapabilitiesEx(dword_t unk, dword_t user_index,
} }
DECLARE_XAM_EXPORT1(XamInputGetCapabilitiesEx, kInput, kSketchy); DECLARE_XAM_EXPORT1(XamInputGetCapabilitiesEx, kInput, kSketchy);
// http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputgetstate(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputgetstate(v=vs.85).aspx
dword_result_t XamInputGetState(dword_t user_index, dword_t flags, dword_result_t XamInputGetState(dword_t user_index, dword_t flags,
pointer_t<X_INPUT_STATE> input_state) { pointer_t<X_INPUT_STATE> input_state) {
// Games call this with a NULL state ptr, probably as a query. // Games call this with a NULL state ptr, probably as a query.
@ -105,7 +105,7 @@ dword_result_t XamInputGetState(dword_t user_index, dword_t flags,
} }
DECLARE_XAM_EXPORT1(XamInputGetState, kInput, kImplemented); DECLARE_XAM_EXPORT1(XamInputGetState, kInput, kImplemented);
// http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputsetstate(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputsetstate(v=vs.85).aspx
dword_result_t XamInputSetState(dword_t user_index, dword_t unk, dword_result_t XamInputSetState(dword_t user_index, dword_t unk,
pointer_t<X_INPUT_VIBRATION> vibration) { pointer_t<X_INPUT_VIBRATION> vibration) {
if (!vibration) { if (!vibration) {
@ -123,10 +123,10 @@ dword_result_t XamInputSetState(dword_t user_index, dword_t unk,
} }
DECLARE_XAM_EXPORT1(XamInputSetState, kInput, kImplemented); DECLARE_XAM_EXPORT1(XamInputSetState, kInput, kImplemented);
// http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputgetkeystroke(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinputgetkeystroke(v=vs.85).aspx
dword_result_t XamInputGetKeystroke(dword_t user_index, dword_t flags, dword_result_t XamInputGetKeystroke(dword_t user_index, dword_t flags,
pointer_t<X_INPUT_KEYSTROKE> keystroke) { pointer_t<X_INPUT_KEYSTROKE> keystroke) {
// http://ffplay360.googlecode.com/svn/Test/Common/AtgXime.cpp // https://github.com/CodeAsm/ffplay360/blob/master/Common/AtgXime.cpp
// user index = index or XUSER_INDEX_ANY // user index = index or XUSER_INDEX_ANY
// flags = XINPUT_FLAG_GAMEPAD (| _ANYUSER | _ANYDEVICE) // flags = XINPUT_FLAG_GAMEPAD (| _ANYUSER | _ANYDEVICE)

View File

@ -483,7 +483,7 @@ dword_result_t NetDll_XNetInAddrToXnAddr(dword_t caller, lpvoid_t in_addr,
} }
DECLARE_XAM_EXPORT1(NetDll_XNetInAddrToXnAddr, kNetworking, kStub); DECLARE_XAM_EXPORT1(NetDll_XNetInAddrToXnAddr, kNetworking, kStub);
// http://www.google.com/patents/WO2008112448A1?cl=en // https://www.google.com/patents/WO2008112448A1?cl=en
// Reserves a port for use by system link // Reserves a port for use by system link
dword_result_t NetDll_XNetSetSystemLinkPort(dword_t caller, dword_t port) { dword_result_t NetDll_XNetSetSystemLinkPort(dword_t caller, dword_t port) {
return 1; return 1;

View File

@ -32,7 +32,7 @@ dword_result_t XamNotifyCreateListener(qword_t mask, dword_t one) {
} }
DECLARE_XAM_EXPORT1(XamNotifyCreateListener, kNone, kImplemented); DECLARE_XAM_EXPORT1(XamNotifyCreateListener, kNone, kImplemented);
// http://ffplay360.googlecode.com/svn/Test/Common/AtgSignIn.cpp // https://github.com/CodeAsm/ffplay360/blob/master/Common/AtgSignIn.cpp
dword_result_t XNotifyGetNext(dword_t handle, dword_t match_id, dword_result_t XNotifyGetNext(dword_t handle, dword_t match_id,
lpdword_t id_ptr, lpdword_t param_ptr) { lpdword_t id_ptr, lpdword_t param_ptr) {
if (!handle) { if (!handle) {

View File

@ -83,7 +83,7 @@ class MessageBoxDialog : public xe::ui::ImGuiDialog {
uint32_t* out_chosen_button_ = nullptr; uint32_t* out_chosen_button_ = nullptr;
}; };
// http://www.se7ensins.com/forums/threads/working-xshowmessageboxui.844116/?jdfwkey=sb0vm // https://www.se7ensins.com/forums/threads/working-xshowmessageboxui.844116/
dword_result_t XamShowMessageBoxUI(dword_t user_index, lpwstring_t title_ptr, dword_result_t XamShowMessageBoxUI(dword_t user_index, lpwstring_t title_ptr,
lpwstring_t text_ptr, dword_t button_count, lpwstring_t text_ptr, dword_t button_count,
lpdword_t button_ptrs, dword_t active_button, lpdword_t button_ptrs, dword_t active_button,
@ -221,7 +221,7 @@ class KeyboardInputDialog : public xe::ui::ImGuiDialog {
size_t max_length_ = 0; size_t max_length_ = 0;
}; };
// http://www.se7ensins.com/forums/threads/release-how-to-use-xshowkeyboardui-release.906568/ // https://www.se7ensins.com/forums/threads/release-how-to-use-xshowkeyboardui-release.906568/
dword_result_t XamShowKeyboardUI(dword_t user_index, dword_t flags, dword_result_t XamShowKeyboardUI(dword_t user_index, dword_t flags,
lpwstring_t default_text, lpwstring_t title, lpwstring_t default_text, lpwstring_t title,
lpwstring_t description, lpwstring_t buffer, lpwstring_t description, lpwstring_t buffer,

View File

@ -108,7 +108,7 @@ typedef struct {
} X_USER_READ_PROFILE_SETTING; } X_USER_READ_PROFILE_SETTING;
static_assert_size(X_USER_READ_PROFILE_SETTING, 40); static_assert_size(X_USER_READ_PROFILE_SETTING, 40);
// http://freestyledash.googlecode.com/svn/trunk/Freestyle/Tools/Generic/xboxtools.cpp // https://github.com/oukiar/freestyledash/blob/master/Freestyle/Tools/Generic/xboxtools.cpp
dword_result_t XamUserReadProfileSettings( dword_result_t XamUserReadProfileSettings(
dword_t title_id, dword_t user_index, dword_t unk_0, dword_t unk_1, dword_t title_id, dword_t user_index, dword_t unk_0, dword_t unk_1,
dword_t setting_count, lpdword_t setting_ids, lpdword_t buffer_size_ptr, dword_t setting_count, lpdword_t setting_ids, lpdword_t buffer_size_ptr,

View File

@ -71,7 +71,7 @@ void RtlRaiseException(pointer_t<X_EXCEPTION_RECORD> record) {
if (record->exception_code == 0xE06D7363) { if (record->exception_code == 0xE06D7363) {
// C++ exception. // C++ exception.
// http://blogs.msdn.com/b/oldnewthing/archive/2010/07/30/10044061.aspx // https://blogs.msdn.com/b/oldnewthing/archive/2010/07/30/10044061.aspx
xe::debugging::Break(); xe::debugging::Break();
return; return;
} }

View File

@ -24,7 +24,7 @@ namespace xe {
namespace kernel { namespace kernel {
namespace xboxkrnl { namespace xboxkrnl {
// http://msdn.microsoft.com/en-us/library/windows/hardware/ff540287.aspx // https://msdn.microsoft.com/en-us/library/windows/hardware/ff540287.aspx
struct X_FILE_FS_VOLUME_INFORMATION { struct X_FILE_FS_VOLUME_INFORMATION {
// FILE_FS_VOLUME_INFORMATION // FILE_FS_VOLUME_INFORMATION
xe::be<uint64_t> creation_time; xe::be<uint64_t> creation_time;
@ -45,7 +45,7 @@ struct X_FILE_FS_SIZE_INFORMATION {
}; };
static_assert_size(X_FILE_FS_SIZE_INFORMATION, 24); static_assert_size(X_FILE_FS_SIZE_INFORMATION, 24);
// http://msdn.microsoft.com/en-us/library/windows/hardware/ff540251(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/hardware/ff540251(v=vs.85).aspx
struct X_FILE_FS_ATTRIBUTE_INFORMATION { struct X_FILE_FS_ATTRIBUTE_INFORMATION {
// FILE_FS_ATTRIBUTE_INFORMATION // FILE_FS_ATTRIBUTE_INFORMATION
xe::be<uint32_t> attributes; xe::be<uint32_t> attributes;
@ -56,7 +56,7 @@ struct X_FILE_FS_ATTRIBUTE_INFORMATION {
static_assert_size(X_FILE_FS_ATTRIBUTE_INFORMATION, 16); static_assert_size(X_FILE_FS_ATTRIBUTE_INFORMATION, 16);
struct CreateOptions { struct CreateOptions {
// http://processhacker.sourceforge.net/doc/ntioapi_8h.html // https://processhacker.sourceforge.io/doc/ntioapi_8h.html
static const uint32_t FILE_DIRECTORY_FILE = 0x00000001; static const uint32_t FILE_DIRECTORY_FILE = 0x00000001;
// Optimization - files access will be sequential, not random. // Optimization - files access will be sequential, not random.
static const uint32_t FILE_SEQUENTIAL_ONLY = 0x00000004; static const uint32_t FILE_SEQUENTIAL_ONLY = 0x00000004;

View File

@ -496,7 +496,7 @@ dword_result_t MmQueryStatistics(
} }
DECLARE_XBOXKRNL_EXPORT1(MmQueryStatistics, kMemory, kImplemented); DECLARE_XBOXKRNL_EXPORT1(MmQueryStatistics, kMemory, kImplemented);
// http://msdn.microsoft.com/en-us/library/windows/hardware/ff554547(v=vs.85).aspx // https://msdn.microsoft.com/en-us/library/windows/hardware/ff554547(v=vs.85).aspx
dword_result_t MmGetPhysicalAddress(dword_t base_address) { dword_result_t MmGetPhysicalAddress(dword_t base_address) {
// PHYSICAL_ADDRESS MmGetPhysicalAddress( // PHYSICAL_ADDRESS MmGetPhysicalAddress(
// _In_ PVOID BaseAddress // _In_ PVOID BaseAddress

View File

@ -26,8 +26,8 @@ X_STATUS xeExGetXConfigSetting(uint16_t category, uint16_t setting,
uint32_t value = 0; uint32_t value = 0;
// TODO(benvanik): have real structs here that just get copied from. // TODO(benvanik): have real structs here that just get copied from.
// http://free60.org/XConfig // https://free60project.github.io/wiki/XConfig.html
// http://freestyledash.googlecode.com/svn/trunk/Freestyle/Tools/Generic/ExConfig.h // https://github.com/oukiar/freestyledash/blob/master/Freestyle/Tools/Generic/ExConfig.h
switch (category) { switch (category) {
case 0x0002: case 0x0002:
// XCONFIG_SECURED_CATEGORY // XCONFIG_SECURED_CATEGORY

View File

@ -33,7 +33,7 @@ namespace xe {
namespace kernel { namespace kernel {
namespace xboxkrnl { namespace xboxkrnl {
// http://msdn.microsoft.com/en-us/library/ff561778 // https://msdn.microsoft.com/en-us/library/ff561778
dword_result_t RtlCompareMemory(lpvoid_t source1, lpvoid_t source2, dword_result_t RtlCompareMemory(lpvoid_t source1, lpvoid_t source2,
dword_t length) { dword_t length) {
uint8_t* p1 = source1; uint8_t* p1 = source1;
@ -54,7 +54,7 @@ dword_result_t RtlCompareMemory(lpvoid_t source1, lpvoid_t source2,
} }
DECLARE_XBOXKRNL_EXPORT1(RtlCompareMemory, kMemory, kImplemented); DECLARE_XBOXKRNL_EXPORT1(RtlCompareMemory, kMemory, kImplemented);
// http://msdn.microsoft.com/en-us/library/ff552123 // https://msdn.microsoft.com/en-us/library/ff552123
dword_result_t RtlCompareMemoryUlong(lpvoid_t source, dword_t length, dword_result_t RtlCompareMemoryUlong(lpvoid_t source, dword_t length,
dword_t pattern) { dword_t pattern) {
// Return 0 if source/length not aligned // Return 0 if source/length not aligned
@ -75,7 +75,7 @@ dword_result_t RtlCompareMemoryUlong(lpvoid_t source, dword_t length,
} }
DECLARE_XBOXKRNL_EXPORT1(RtlCompareMemoryUlong, kMemory, kImplemented); DECLARE_XBOXKRNL_EXPORT1(RtlCompareMemoryUlong, kMemory, kImplemented);
// http://msdn.microsoft.com/en-us/library/ff552263 // https://msdn.microsoft.com/en-us/library/ff552263
void RtlFillMemoryUlong(lpvoid_t destination, dword_t length, dword_t pattern) { void RtlFillMemoryUlong(lpvoid_t destination, dword_t length, dword_t pattern) {
// NOTE: length must be % 4, so we can work on uint32s. // NOTE: length must be % 4, so we can work on uint32s.
uint32_t count = length >> 2; uint32_t count = length >> 2;
@ -138,7 +138,7 @@ dword_result_t RtlCompareStringN(lpstring_t string_1, dword_t string_1_len,
} }
DECLARE_XBOXKRNL_EXPORT1(RtlCompareStringN, kNone, kImplemented); DECLARE_XBOXKRNL_EXPORT1(RtlCompareStringN, kNone, kImplemented);
// http://msdn.microsoft.com/en-us/library/ff561918 // https://msdn.microsoft.com/en-us/library/ff561918
void RtlInitAnsiString(pointer_t<X_ANSI_STRING> destination, void RtlInitAnsiString(pointer_t<X_ANSI_STRING> destination,
lpstring_t source) { lpstring_t source) {
if (source) { if (source) {
@ -153,7 +153,7 @@ void RtlInitAnsiString(pointer_t<X_ANSI_STRING> destination,
} }
DECLARE_XBOXKRNL_EXPORT1(RtlInitAnsiString, kNone, kImplemented); DECLARE_XBOXKRNL_EXPORT1(RtlInitAnsiString, kNone, kImplemented);
// http://msdn.microsoft.com/en-us/library/ff561899 // https://msdn.microsoft.com/en-us/library/ff561899
void RtlFreeAnsiString(pointer_t<X_ANSI_STRING> string) { void RtlFreeAnsiString(pointer_t<X_ANSI_STRING> string) {
if (string->pointer) { if (string->pointer) {
kernel_memory()->SystemHeapFree(string->pointer); kernel_memory()->SystemHeapFree(string->pointer);
@ -163,7 +163,7 @@ void RtlFreeAnsiString(pointer_t<X_ANSI_STRING> string) {
} }
DECLARE_XBOXKRNL_EXPORT1(RtlFreeAnsiString, kNone, kImplemented); DECLARE_XBOXKRNL_EXPORT1(RtlFreeAnsiString, kNone, kImplemented);
// http://msdn.microsoft.com/en-us/library/ff561934 // https://msdn.microsoft.com/en-us/library/ff561934
void RtlInitUnicodeString(pointer_t<X_UNICODE_STRING> destination, void RtlInitUnicodeString(pointer_t<X_UNICODE_STRING> destination,
lpwstring_t source) { lpwstring_t source) {
if (source) { if (source) {
@ -176,7 +176,7 @@ void RtlInitUnicodeString(pointer_t<X_UNICODE_STRING> destination,
} }
DECLARE_XBOXKRNL_EXPORT1(RtlInitUnicodeString, kNone, kImplemented); DECLARE_XBOXKRNL_EXPORT1(RtlInitUnicodeString, kNone, kImplemented);
// http://msdn.microsoft.com/en-us/library/ff561903 // https://msdn.microsoft.com/en-us/library/ff561903
void RtlFreeUnicodeString(pointer_t<X_UNICODE_STRING> string) { void RtlFreeUnicodeString(pointer_t<X_UNICODE_STRING> string) {
if (string->pointer) { if (string->pointer) {
kernel_memory()->SystemHeapFree(string->pointer); kernel_memory()->SystemHeapFree(string->pointer);
@ -220,7 +220,7 @@ void RtlCopyUnicodeString(pointer_t<X_UNICODE_STRING> destination,
} }
DECLARE_XBOXKRNL_EXPORT1(RtlCopyUnicodeString, kNone, kImplemented); DECLARE_XBOXKRNL_EXPORT1(RtlCopyUnicodeString, kNone, kImplemented);
// http://msdn.microsoft.com/en-us/library/ff562969 // https://msdn.microsoft.com/en-us/library/ff562969
dword_result_t RtlUnicodeStringToAnsiString( dword_result_t RtlUnicodeStringToAnsiString(
pointer_t<X_ANSI_STRING> destination_ptr, pointer_t<X_ANSI_STRING> destination_ptr,
pointer_t<X_UNICODE_STRING> source_ptr, dword_t alloc_dest) { pointer_t<X_UNICODE_STRING> source_ptr, dword_t alloc_dest) {
@ -332,9 +332,9 @@ DECLARE_XBOXKRNL_EXPORT1(RtlImageXexHeaderField, kNone, kImplemented);
// into guest memory, as it should be opaque and so long as our size is right // into guest memory, as it should be opaque and so long as our size is right
// the user code will never know. // the user code will never know.
// //
// Ref: http://msdn.microsoft.com/en-us/magazine/cc164040.aspx // Ref: https://web.archive.org/web/20161214022602/https://msdn.microsoft.com/en-us/magazine/cc164040.aspx
// Ref: // Ref:
// http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/critical.c?view=markup // https://github.com/reactos/reactos/blob/master/sdk/lib/rtl/critical.c
// This structure tries to match the one on the 360 as best I can figure out. // This structure tries to match the one on the 360 as best I can figure out.
// Unfortunately some games have the critical sections pre-initialized in // Unfortunately some games have the critical sections pre-initialized in

View File

@ -313,7 +313,7 @@ void KeQuerySystemTime(lpqword_t time_ptr) {
} }
DECLARE_XBOXKRNL_EXPORT1(KeQuerySystemTime, kThreading, kImplemented); DECLARE_XBOXKRNL_EXPORT1(KeQuerySystemTime, kThreading, kImplemented);
// http://msdn.microsoft.com/en-us/library/ms686801 // https://msdn.microsoft.com/en-us/library/ms686801
dword_result_t KeTlsAlloc() { dword_result_t KeTlsAlloc() {
uint32_t slot = kernel_state()->AllocateTLS(); uint32_t slot = kernel_state()->AllocateTLS();
XThread::GetCurrentThread()->SetTLSValue(slot, 0); XThread::GetCurrentThread()->SetTLSValue(slot, 0);
@ -322,7 +322,7 @@ dword_result_t KeTlsAlloc() {
} }
DECLARE_XBOXKRNL_EXPORT1(KeTlsAlloc, kThreading, kImplemented); DECLARE_XBOXKRNL_EXPORT1(KeTlsAlloc, kThreading, kImplemented);
// http://msdn.microsoft.com/en-us/library/ms686804 // https://msdn.microsoft.com/en-us/library/ms686804
dword_result_t KeTlsFree(dword_t tls_index) { dword_result_t KeTlsFree(dword_t tls_index) {
if (tls_index == X_TLS_OUT_OF_INDEXES) { if (tls_index == X_TLS_OUT_OF_INDEXES) {
return 0; return 0;
@ -333,7 +333,7 @@ dword_result_t KeTlsFree(dword_t tls_index) {
} }
DECLARE_XBOXKRNL_EXPORT1(KeTlsFree, kThreading, kImplemented); DECLARE_XBOXKRNL_EXPORT1(KeTlsFree, kThreading, kImplemented);
// http://msdn.microsoft.com/en-us/library/ms686812 // https://msdn.microsoft.com/en-us/library/ms686812
dword_result_t KeTlsGetValue(dword_t tls_index) { dword_result_t KeTlsGetValue(dword_t tls_index) {
// xboxkrnl doesn't actually have an error branch - it always succeeds, even // xboxkrnl doesn't actually have an error branch - it always succeeds, even
// if it overflows the TLS. // if it overflows the TLS.
@ -347,7 +347,7 @@ dword_result_t KeTlsGetValue(dword_t tls_index) {
DECLARE_XBOXKRNL_EXPORT2(KeTlsGetValue, kThreading, kImplemented, DECLARE_XBOXKRNL_EXPORT2(KeTlsGetValue, kThreading, kImplemented,
kHighFrequency); kHighFrequency);
// http://msdn.microsoft.com/en-us/library/ms686818 // https://msdn.microsoft.com/en-us/library/ms686818
dword_result_t KeTlsSetValue(dword_t tls_index, dword_t tls_value) { dword_result_t KeTlsSetValue(dword_t tls_index, dword_t tls_value) {
// xboxkrnl doesn't actually have an error branch - it always succeeds, even // xboxkrnl doesn't actually have an error branch - it always succeeds, even
// if it overflows the TLS. // if it overflows the TLS.

View File

@ -24,17 +24,17 @@ namespace xe {
namespace kernel { namespace kernel {
namespace xboxkrnl { namespace xboxkrnl {
// http://www.tweakoz.com/orkid/ // https://web.archive.org/web/20150805074003/https://www.tweakoz.com/orkid/
// http://www.tweakoz.com/orkid/dox/d3/d52/xb360init_8cpp_source.html // http://www.tweakoz.com/orkid/dox/d3/d52/xb360init_8cpp_source.html
// https://github.com/Free60Project/xenosfb/ // https://github.com/Free60Project/xenosfb/
// https://github.com/Free60Project/xenosfb/blob/master/src/xe.h // https://github.com/Free60Project/xenosfb/blob/master/src/xe.h
// https://github.com/gligli/libxemit // https://github.com/gligli/libxemit
// http://web.archive.org/web/20090428095215/http://msdn.microsoft.com/en-us/library/bb313877.aspx // https://web.archive.org/web/20090428095215/https://msdn.microsoft.com/en-us/library/bb313877.aspx
// http://web.archive.org/web/20100423054747/http://msdn.microsoft.com/en-us/library/bb313961.aspx // https://web.archive.org/web/20100423054747/https://msdn.microsoft.com/en-us/library/bb313961.aspx
// http://web.archive.org/web/20100423054747/http://msdn.microsoft.com/en-us/library/bb313878.aspx // https://web.archive.org/web/20100423054747/https://msdn.microsoft.com/en-us/library/bb313878.aspx
// http://web.archive.org/web/20090510235238/http://msdn.microsoft.com/en-us/library/bb313942.aspx // https://web.archive.org/web/20090510235238/https://msdn.microsoft.com/en-us/library/bb313942.aspx
// http://svn.dd-wrt.com/browser/src/linux/universal/linux-3.8/drivers/gpu/drm/radeon/radeon_ring.c // https://svn.dd-wrt.com/browser/src/linux/universal/linux-3.8/drivers/gpu/drm/radeon/radeon_ring.c?rev=21595
// http://www.microsoft.com/en-za/download/details.aspx?id=5313 -- "Stripped // https://www.microsoft.com/en-za/download/details.aspx?id=5313 -- "Stripped
// Down Direct3D: Xbox 360 Command Buffer and Resource Management" // Down Direct3D: Xbox 360 Command Buffer and Resource Management"
void VdGetCurrentDisplayGamma(lpdword_t type_ptr, lpfloat_t unknown_ptr) { void VdGetCurrentDisplayGamma(lpdword_t type_ptr, lpfloat_t unknown_ptr) {

View File

@ -17,7 +17,7 @@
namespace xe { namespace xe {
namespace kernel { namespace kernel {
// http://www.nirsoft.net/kernel_struct/vista/KEVENT.html // https://www.nirsoft.net/kernel_struct/vista/KEVENT.html
struct X_KEVENT { struct X_KEVENT {
X_DISPATCH_HEADER header; X_DISPATCH_HEADER header;
}; };

View File

@ -19,7 +19,7 @@
namespace xe { namespace xe {
namespace kernel { namespace kernel {
// http://www.nirsoft.net/kernel_struct/vista/LDR_DATA_TABLE_ENTRY.html // https://www.nirsoft.net/kernel_struct/vista/LDR_DATA_TABLE_ENTRY.html
// HMODULE points to this struct! // HMODULE points to this struct!
struct X_LDR_DATA_TABLE_ENTRY { struct X_LDR_DATA_TABLE_ENTRY {
X_LIST_ENTRY in_load_order_links; // 0x0 X_LIST_ENTRY in_load_order_links; // 0x0

View File

@ -385,7 +385,7 @@ object_ref<XObject> XObject::GetNativeObject(KernelState* kernel_state,
return object; return object;
} else { } else {
// First use, create new. // First use, create new.
// http://www.nirsoft.net/kernel_struct/vista/KOBJECTS.html // https://www.nirsoft.net/kernel_struct/vista/KOBJECTS.html
XObject* object = nullptr; XObject* object = nullptr;
switch (as_type) { switch (as_type) {
case 0: // EventNotificationObject case 0: // EventNotificationObject

View File

@ -32,7 +32,7 @@ class KernelState;
template <typename T> template <typename T>
class object_ref; class object_ref;
// http://www.nirsoft.net/kernel_struct/vista/DISPATCHER_HEADER.html // https://www.nirsoft.net/kernel_struct/vista/DISPATCHER_HEADER.html
typedef struct { typedef struct {
struct { struct {
uint8_t type; uint8_t type;
@ -60,7 +60,7 @@ typedef struct {
} X_DISPATCH_HEADER; } X_DISPATCH_HEADER;
static_assert_size(X_DISPATCH_HEADER, 0x10); static_assert_size(X_DISPATCH_HEADER, 0x10);
// http://www.nirsoft.net/kernel_struct/vista/OBJECT_HEADER.html // https://www.nirsoft.net/kernel_struct/vista/OBJECT_HEADER.html
struct X_OBJECT_HEADER { struct X_OBJECT_HEADER {
xe::be<uint32_t> pointer_count; xe::be<uint32_t> pointer_count;
union { union {
@ -82,7 +82,7 @@ struct X_OBJECT_HEADER {
// (There's actually a body field here which is the object itself) // (There's actually a body field here which is the object itself)
}; };
// http://www.nirsoft.net/kernel_struct/vista/OBJECT_CREATE_INFORMATION.html // https://www.nirsoft.net/kernel_struct/vista/OBJECT_CREATE_INFORMATION.html
struct X_OBJECT_CREATE_INFORMATION { struct X_OBJECT_CREATE_INFORMATION {
xe::be<uint32_t> attributes; // 0x0 xe::be<uint32_t> attributes; // 0x0
xe::be<uint32_t> root_directory_ptr; // 0x4 xe::be<uint32_t> root_directory_ptr; // 0x4

View File

@ -82,7 +82,7 @@ class XSocket : public XObject {
IPPROTO_UDP = 17, IPPROTO_UDP = 17,
// LIVE Voice and Data Protocol // LIVE Voice and Data Protocol
// http://blog.csdn.net/baozi3026/article/details/4277227 // https://blog.csdn.net/baozi3026/article/details/4277227
// Format: [cbGameData][GameData(encrypted)][VoiceData(unencrypted)] // Format: [cbGameData][GameData(encrypted)][VoiceData(unencrypted)]
IPPROTO_VDP = 254, IPPROTO_VDP = 254,
}; };

View File

@ -313,7 +313,7 @@ X_STATUS XThread::Create() {
} }
// Allocate thread state block from heap. // Allocate thread state block from heap.
// http://www.microsoft.com/msj/archive/s2ce.aspx // https://web.archive.org/web/20170704035330/https://www.microsoft.com/msj/archive/S2CE.aspx
// This is set as r13 for user code and some special inlined Win32 calls // This is set as r13 for user code and some special inlined Win32 calls
// (like GetLastError/etc) will poke it directly. // (like GetLastError/etc) will poke it directly.
// We try to use it as our primary store of data just to keep things all // We try to use it as our primary store of data just to keep things all
@ -568,8 +568,8 @@ void XThread::EnqueueApc(uint32_t normal_routine, uint32_t normal_context,
} }
void XThread::DeliverAPCs() { void XThread::DeliverAPCs() {
// http://www.drdobbs.com/inside-nts-asynchronous-procedure-call/184416590?pgno=1 // https://www.drdobbs.com/inside-nts-asynchronous-procedure-call/184416590?pgno=1
// http://www.drdobbs.com/inside-nts-asynchronous-procedure-call/184416590?pgno=7 // https://www.drdobbs.com/inside-nts-asynchronous-procedure-call/184416590?pgno=7
auto processor = kernel_state()->processor(); auto processor = kernel_state()->processor();
LockApc(); LockApc();
while (apc_list_.HasPending()) { while (apc_list_.HasPending()) {

View File

@ -34,7 +34,7 @@ std::unique_ptr<VulkanProvider> VulkanProvider::Create(Window* main_window) {
"Ensure you have the latest drivers for your GPU and that it " "Ensure you have the latest drivers for your GPU and that it "
"supports Vulkan.\n" "supports Vulkan.\n"
"\n" "\n"
"See http://xenia.jp/faq/ for more information and a list of supported " "See https://xenia.jp/faq/ for more information and a list of supported "
"GPUs."); "GPUs.");
return nullptr; return nullptr;
} }

View File

@ -403,7 +403,7 @@ void FatalVulkanError(std::string error) {
"Ensure you have the latest drivers for your GPU and that it supports " "Ensure you have the latest drivers for your GPU and that it supports "
"Vulkan.\n" "Vulkan.\n"
"\n" "\n"
"See http://xenia.jp/faq/ for more information and a list of supported " "See https://xenia.jp/faq/ for more information and a list of supported "
"GPUs."); "GPUs.");
} }

View File

@ -253,7 +253,7 @@ void Win32Window::ToggleFullscreen(bool fullscreen) {
DWORD style = GetWindowLong(hwnd_, GWL_STYLE); DWORD style = GetWindowLong(hwnd_, GWL_STYLE);
if (fullscreen) { if (fullscreen) {
// http://blogs.msdn.com/b/oldnewthing/archive/2010/04/12/9994016.aspx // https://blogs.msdn.com/b/oldnewthing/archive/2010/04/12/9994016.aspx
MONITORINFO mi = {sizeof(mi)}; MONITORINFO mi = {sizeof(mi)};
if (GetWindowPlacement(hwnd_, &windowed_pos_) && if (GetWindowPlacement(hwnd_, &windowed_pos_) &&
GetMonitorInfo(MonitorFromWindow(hwnd_, MONITOR_DEFAULTTOPRIMARY), GetMonitorInfo(MonitorFromWindow(hwnd_, MONITOR_DEFAULTTOPRIMARY),

View File

@ -19,7 +19,7 @@
namespace xe { namespace xe {
namespace vfs { namespace vfs {
// http://www.free60.org/wiki/STFS // https://free60project.github.io/wiki/STFS.html
class StfsContainerEntry; class StfsContainerEntry;

View File

@ -34,7 +34,7 @@ namespace vfs {
class Device; class Device;
class File; class File;
// Matches http://source.winehq.org/source/include/winternl.h#1591. // Matches https://source.winehq.org/source/include/winternl.h#1591.
enum class FileAction { enum class FileAction {
kSuperseded = 0, kSuperseded = 0,
kOpened = 1, kOpened = 1,

View File

@ -27,7 +27,7 @@ typedef uint32_t X_HANDLE;
// TODO(benvanik): type all of this so we get some safety. // TODO(benvanik): type all of this so we get some safety.
// NT_STATUS (STATUS_*) // NT_STATUS (STATUS_*)
// http://msdn.microsoft.com/en-us/library/cc704588.aspx // https://msdn.microsoft.com/en-us/library/cc704588.aspx
// Adding as needed. // Adding as needed.
typedef uint32_t X_STATUS; typedef uint32_t X_STATUS;
#define XSUCCEEDED(s) ((s & 0xC0000000) == 0) #define XSUCCEEDED(s) ((s & 0xC0000000) == 0)
@ -160,7 +160,7 @@ enum X_FILE_ATTRIBUTES : uint32_t {
X_FILE_ATTRIBUTE_ENCRYPTED = 0x4000, X_FILE_ATTRIBUTE_ENCRYPTED = 0x4000,
}; };
// http://code.google.com/p/vdash/source/browse/trunk/vdash/include/kernel.h // https://github.com/oukiar/vdash/blob/master/vdash/include/kernel.h
enum X_FILE_INFORMATION_CLASS { enum X_FILE_INFORMATION_CLASS {
XFileDirectoryInformation = 1, XFileDirectoryInformation = 1,
XFileFullDirectoryInformation, XFileFullDirectoryInformation,
@ -324,10 +324,10 @@ struct X_UNICODE_STRING {
}; };
static_assert_size(X_UNICODE_STRING, 8); static_assert_size(X_UNICODE_STRING, 8);
// http://pastebin.com/SMypYikG // https://pastebin.com/SMypYikG
typedef uint32_t XNotificationID; typedef uint32_t XNotificationID;
// http://ffplay360.googlecode.com/svn/trunk/Common/XTLOnPC.h // https://github.com/CodeAsm/ffplay360/blob/master/Common/XTLOnPC.h
struct X_VIDEO_MODE { struct X_VIDEO_MODE {
be<uint32_t> display_width; be<uint32_t> display_width;
be<uint32_t> display_height; be<uint32_t> display_height;
@ -361,7 +361,7 @@ struct X_SINGLE_LIST_ENTRY {
}; };
static_assert_size(X_SINGLE_LIST_ENTRY, 4); static_assert_size(X_SINGLE_LIST_ENTRY, 4);
// http://www.nirsoft.net/kernel_struct/vista/SLIST_HEADER.html // https://www.nirsoft.net/kernel_struct/vista/SLIST_HEADER.html
struct X_SLIST_HEADER { struct X_SLIST_HEADER {
X_SINGLE_LIST_ENTRY next; // 0x0 X_SINGLE_LIST_ENTRY next; // 0x0
be<uint16_t> depth; // 0x4 be<uint16_t> depth; // 0x4

View File

@ -1,5 +1,5 @@
This requires XNA Game Studio 3.1 to be installed (not just the redist): This requires XNA Game Studio 3.1 to be installed (not just the redist):
http://www.microsoft.com/en-us/download/details.aspx?id=39 https://www.microsoft.com/en-us/download/details.aspx?id=39
It's not really compatible with modern VS', but you can open the downloaded It's not really compatible with modern VS', but you can open the downloaded
`XNAGS31_setup.exe` with 7zip and run the included `redists.msi` directly. `XNAGS31_setup.exe` with 7zip and run the included `redists.msi` directly.

View File

@ -304,7 +304,7 @@ def get_clang_format_binary():
if has_bin(binary): if has_bin(binary):
return binary return binary
print('ERROR: clang-format is not on PATH') print('ERROR: clang-format is not on PATH')
print('LLVM is available from http://llvm.org/releases/download.html') print('LLVM is available from https://llvm.org/releases/download.html')
print('At least version 3.8 is required.') print('At least version 3.8 is required.')
print('See docs/style_guide.md for instructions on how to get it.') print('See docs/style_guide.md for instructions on how to get it.')
sys.exit(1) sys.exit(1)