Updated Cxbx Reloaded overview (markdown)
parent
de50a530bd
commit
4323be7c3c
|
@ -1,14 +1,14 @@
|
|||
Here some technical details on how Cxbx-Reloaded works.
|
||||
Here's some technical details on how Cxbx-Reloaded works.
|
||||
|
||||
# Executable launch modes
|
||||
Cxbx-Reloaded is a single executable which operates in two different modes:
|
||||
|
||||
1. If launched normally (without any command-line arguments), it will show a user-interface then wait for user inputs.
|
||||
* However, if drag and drop an xbe file on top of executable. It will automatic run xbe file.
|
||||
* However, if you drag and drop an xbe file on top of the executable, it will automatic run said xbe file.
|
||||
2. To emulate Xbox software, Cxbx-Reloaded relaunches itself (with the path to the Xbox executable to run on the command-line).
|
||||
The emulated Xbox screen is then put over the user-interface.
|
||||
At the end of emulation, the second instance terminates and the user-interface reappears.
|
||||
* If want to start standalone emulation. Then the following argument should be input `> cxbx.exe /load "path to xbe"` via command prompt.
|
||||
* If you want to start standalone emulation, than the following argument should be input `cxbx.exe /load "path to xbe"` via command prompt.
|
||||
|
||||
If another process launches Cxbx-Reloaded (for instance, a user starts a shortcut via Windows Explorer) with a command-line argument, there's no parent process, so when emulation ends in this scenario, the Cxbx-Reloaded process terminates entirely.
|
||||
|
||||
|
@ -22,26 +22,26 @@ Cxbx-Reloaded currently runs on 64-bit Windows 7 and up.
|
|||
## CPU 'emulation'
|
||||
Cxbx-Reloaded emulates the Xbox using direct code execution.
|
||||
|
||||
This means most of the CPU instructions the Xbox would execute, are executed directly on the host machine, without any modification or interpretation.
|
||||
This means most of the CPU instructions the Xbox would execute are executed directly on the host machine without any modification or interpretation.
|
||||
|
||||
_This restricts running Cxbx-Reloaded to CPU's that are compatible with the Xbox Pentium 3 Coppermine CPU!_
|
||||
|
||||
The advantage of this approach is that Cxbx doesn't need to emulate the CPU at all, and offers native, 'faster-than-real-hardware' emulation speeds.
|
||||
|
||||
Admittedly, executing Xbox code as-is does bring with it a few complexities:
|
||||
* some opcodes are prohibited to be executed in user-mode on Windows
|
||||
* Some opcodes are prohibited to be executed in user-mode on Windows
|
||||
* IN/OUT opcodes must be emulated
|
||||
* CPU-specific opcodes (like CPUID) still need to be emulated
|
||||
* the FS segment layout differs between Xbox and Windows
|
||||
* mapping physical to virtual addresses (using the MMU) isn't allowed
|
||||
* The FS segment layout differs between Xbox and Windows
|
||||
* Mapping physical to virtual addresses using the MMU isn't allowed
|
||||
(More on this later, under _[Hardware accesses](#hardware-accesses)_ and _[Contiguous memory](#contiguous-memory)_.)
|
||||
|
||||
## Xbox Kernel (BIOS)
|
||||
Cxbx-Reloaded contains it's own implementation of the Xbox kernel, which means there's no need to acquire a dump from your Xbox.
|
||||
|
||||
In it's current form, the Cxbx-Reloaded kernel forwards many of the 378 kernel API's towards the host Windows kernel API's.
|
||||
In it's current form, the Cxbx-Reloaded kernel forwards many of the 378 kernel APIs towards the host Windows kernel APIs.
|
||||
|
||||
__This restricts running Cxbx-Reloaded to operating systems that contain the Win32 API's, so far Windows only!__
|
||||
__This restricts running Cxbx-Reloaded to operating systems that contain the Win32 APIs, so far Windows only!__
|
||||
|
||||
Because many of the kernel API's are just forwards, some aspects of the Xbox kernel are not emulated well enough.
|
||||
|
||||
|
@ -71,7 +71,7 @@ APU and JIT LLE are disabled due to being unimplemented.
|
|||
For now, Cxbx-Reloaded only reliably supports HLE and LLE GPU.
|
||||
|
||||
## Emulating Xbox memory layout
|
||||
Cxbx-Reloaded emulates the Xbox memory layout using a trick that allows so-called 'fast path' memory access, by mimicking the memory layout of the Xbox on the host OS.
|
||||
Cxbx-Reloaded emulates the Xbox memory layout using a trick that allows 'fast path' memory access by mimicking the memory layout of the Xbox on the host OS.
|
||||
|
||||
This involves the following steps:
|
||||
|
||||
|
@ -87,20 +87,18 @@ The downside to this is that the Cxbx-Reloaded is quite big (more than 67 MiB cu
|
|||
|
||||
Since Cxbx-Reloaded launches itself a second time for actual emulation, memory-requirements on the host are doubled to at least 256 MiB of memory.
|
||||
|
||||
Expect swapping when the host has less than 1 GiB of physical memory installed.
|
||||
|
||||
## Hardware accesses
|
||||
Most Xbox hardware is mapped from 0xF0000000 to 0xFFFFFFFF.
|
||||
|
||||
Cxbx-Reloaded reserves this memory-region using so-called 'guard-pages' which guarantees this memory range isn't used for anything else, and causes so-called access violations (or more accurately, guard-page exceptions).
|
||||
Cxbx-Reloaded reserves this memory-region using so-called 'guard-pages' which guarantees this memory range isn't used for anything else, and causes so-called access violations,or more accurately, guard-page exceptions.
|
||||
|
||||
When Cxbx-Reloaded emulates an Xbox instruction that accesses a hardware component (reading or writing to one of the MMIO memory-addresses), this access is trapped using a so-called 'exception handler'.
|
||||
When Cxbx-Reloaded emulates an Xbox instruction that accesses a hardware component (reading or writing to one of the MMIO memory-addresses), this access is trapped using an 'exception handler'.
|
||||
|
||||
This allows us to capture and emulate hardware accesses that aren't present on the host.
|
||||
|
||||
When Cxbx-Reloaded operates entirely in HLE mode which is the current default, most if not all hardware accesses are prevented entirely.
|
||||
|
||||
So normally, this is mostly a moot point, and you won't see slow-down in emulation because of this.
|
||||
Normally, this is mostly a moot point, and you won't see slow-down in emulation because of this.
|
||||
|
||||
However, when it happens, exception handling is slow, as it incurs a context-switch (storing and restoring the entire state of a thread) and has to figure out which address needs which handling.
|
||||
|
||||
|
@ -133,11 +131,11 @@ Xbox renders using the Nvidia NV2A GPU.
|
|||
|
||||
Most software written for the Xbox was developed with some version of the official "Xbox Development Kit" (XDK for short), which offered Direct3D 8 like features.
|
||||
|
||||
Therefore, Cxbx-Reloaded uses Direct3D 8.1 as its rendering API, although it's planned to port to Direct3D 9 (for HLE) and OpenGL (for LLE).
|
||||
Therefore, Cxbx-Reloaded uses Direct3D 9 as its rendering API.
|
||||
|
||||
Vulkan is currently not under consideration.
|
||||
|
||||
Some features the NV2A offered are unavailable on Direct3D 8 or even 9, so for those Cxbx-Reloaded tries to convert it to be host-compatible.
|
||||
Some features the NV2A offered are unavailable on Direct3D 8 and 9; For those Cxbx-Reloaded tries to convert it to be host-compatible.
|
||||
|
||||
For example, some texture-formats like P8, R8B8 and others are not available on host Direct3D, and are thus converted into ARGB, the most widely supported texture format.
|
||||
|
||||
|
|
Loading…
Reference in New Issue