Improve formatting, fix spelling/grammar/punctuation errors.

Margen67 2018-04-26 10:44:33 -07:00
parent 50f4c572d8
commit cc0a7e622f
1 changed files with 80 additions and 62 deletions

@ -1,107 +1,125 @@
# Cxbx-Reloaded rationale # Cxbx-Reloaded rationale
Cxbx has been around since 2002, gained a spin-off with Dxbx in 2008-2011, but both attempts are Cxbx has been around since 2002. It gained a spin-off with Dxbx in 2008-2011, but both attempts had a very low compatibility level.
currently still at a very low compatibility-level. Cxbx-Reloaded is an attempt to bring back live
into the Cxbx codebase and improve it, so it will support (much) more software than ever before. Cxbx-Reloaded is an attempt to bring back life into the Cxbx codebase and improve it so it can support more software than ever before.
We believe Cxbx-Reloaded has a right to exist as a Hybrid emulator, covering the middle-ground
between the LLE based emulators and the completely HLE based old Cxbx, which offered one remarkable We believe Cxbx-Reloaded has a right to exist as a Hybrid emulator, covering the middle-ground between the LLE based emulators and the completely HLE based old Cxbx, which offered one remarkable feature:
feature : faster-than-original emulation speed. We intent to keep that speed (mainly contributed
by the fact we run code on the native CPU) and improve compatibility by using Hybrid emulation of Faster-than-original emulation speed.
various Xbox hardware components.
We intend to keep that speed (mainly contributed by the fact we run code on the native CPU) and improve compatibility by using Hybrid emulation of various Xbox hardware components.
# Glossary of terms used in this project: # Glossary of terms used in this project:
## LLE ## LLE
Low Level Emulation, a technique in which an emulated piece of software is executed by way of Low Level Emulation, a technique in which an emulated piece of software is executed by way of emulating the original hardware.
emulating the original hardware. This is done by a piece of code that replicates as close as possible
the behavior and state of the emulated hardware. This is done by a piece of code that replicates as close as possible the behavior and state of the emulated hardware.
## HLE ## HLE
High Level Emulation, a technique in which an emulated piece of software is executed without High Level Emulation, a technique in which an emulated piece of software is executed without emulating the original hardware.
emulating the original hardware. This can done when the emulated system and the host use comparable
hardware. In the case of Cxbx, the CPU code is executed as-is most of the time, and hardware accesses This can done when the emulated system and the host use comparable hardware.
to the video, audio and input/output devices is bypassed using Patches over the original Functions.
In the case of Cxbx, the CPU code is executed as-is most of the time, and hardware accesses to the video, audio and input/output devices are bypassed using Patches over the original Functions.
## Hybrid emulation ## Hybrid emulation
A mix of HLE and LLE, in which some parts are HLE'ed, while other parts are LLE'ed. A mix of HLE and LLE, in which some parts are HLE'ed, while other parts are LLE'ed.
In the case of Cxbx, we're underway to emulate the graphics and sound hardware using a form of LLE. In the case of Cxbx, we're underway to emulate the graphics and sound hardware using a form of LLE.
It won't be complete LLE, as we're planning to interpret hardware accesses and replace their
behavior using native hardware using OpenGL for graphics (and possibly something like OpenAL for It won't be complete LLE, as we're planning to interpret hardware accesses and replace their behavior using native hardware with OpenGL for graphics, something like OpenAL for audio, and OpenIO for
audio and OpenIO for input/output). input/output.
## Xbox emulation ## Xbox emulation
Emulation of the Microsoft Xbox console platform. In contrast with many other platforms, In contrast with other platforms, there are not many successful Xbox emulators.
there are not many successful Xbox emulators. The first one was made by Microsoft themselves,
for the Xbox 360. Others are xqemu and the Xbox/Chihiro driver in MAME, which are both quite The first one was made by Microsoft themselves for the Xbox 360.
complete, since they both use LLE, but as a result both are also quite slow.
They also made an emulator for the Xbox One, and Xbox One X.
Others such as xqemu and the Xbox/Chihiro driver in MAME are both quite complete and use LLE, but as a result are also quite slow.
## Xbox hardware ## Xbox hardware
The main Xbox hardware components are: a 733MHz Pentium 3 CPU, a NV2A GPU, and an MCPX APU. The main Xbox hardware components are:
* 733MHz Pentium 3 CPU
* NV2A GPU
* MCPX APU
## Xbox Kernel (BIOS) ## Xbox Kernel (BIOS)
Normally present in the BIOS of the Xbox, the kernel offers more than 360 basic system functions. Normally present in the BIOS of the Xbox, the kernel offers more than 360 basic system functions.
These functions deal with memory reservation, manage kernel objects (like hardware timers,
mutexes, semaphores, storage devices, symbolic links, files, etc.) and accesses to hardware These functions deal with memory reservation, manage kernel objects (like hardware timers, mutexes, semaphores, storage devices, symbolic links, files, etc.) and accesses to hardware (like PCI, EEPROM, etc.).
(like PCI, EEPROM, etc.). Cxbx contains it's own implementation of the Kernel, as we need our
emulator to create it's own 'sandbox' environment, so it's native code execution doesn't escape Cxbx contains it's own implementation of the Kernel, as we need our emulator to create it's own sandbox environment so it's native code execution doesn't escape the sandbox and overloads, or otherwise wreaks havoc on the native system.
the sandbox and overloads, or otherwise wreaks havoc on the native system.
## Xbox Development Kit (XDK) ## Xbox Development Kit (XDK)
A package full of resources (documentation, tools, source code, etc.) as once distributed by Microsoft to Xbox developers. A package full of resources (documentation, tools, source code, etc.) as once distributed by Microsoft to Xbox developers.
## Xbox Executable (XBE) ## Xbox Executable (XBE)
A binary file containing all code for a piece of software that can be run on the Xbox. A binary file containing all code for a piece of software that can be run on the Xbox.
An XBE file is generated using a compiler toolchain of either a XDK or an Open Source alternative (like OpenXDK).
An XBE file is generated using a compiler toolchain of either an XDK or an Open Source alternative (like OpenXDK).
## Library ## Library
A binary object file distributed with an XDK, containing Symbols - code and data needed for specific tasks. A binary object file distributed with an XDK, containing Symbols - code and data needed for specific tasks.
Libraries are linked (inserted) into XBE files. Older XDK's contained Libraries with different versions.
Later XDK's used only one Version for all it's contained Libraries. Libraries are linked (inserted) into XBE files.
Older XDKs contained Libraries with different versions.
Later XDKs used only one Version for all it's contained Libraries.
## Version ## Version
A four-digit number, indicating the release number of a Library (thus, also of all Symbols originating from it) A four-digit number, indicating the release number of a Library (also all of the Symbols originating from it)
## Location ## Location
A unique memory address with contents of an XBE loaded into memory, ready for execution or read/write access A unique memory address with contents of an XBE loaded into memory, ready for execution or read/write access.
## Symbol ## Symbol
A unique label, indicating either a Global or a Function. A unique label, indicating either a Global or a Function.
## Global ## Global
A piece of data, uniquely identified by a Symbol (thus, Globals are a subset of all Symbols) A piece of data, uniquely identified by a Symbol. (thus, Globals are a subset of all Symbols)
## Function ## Function
A piece of code, uniquely identified by a Symbol (thus, Functions are a subset of all Symbols) A piece of code, uniquely identified by a Symbol. (thus, Functions are a subset of all Symbols)
## XRef ## XRef
A cross-referenced Symbol Location from within a Function A cross-referenced Symbol Location from within a Function.
## OOVPA ## OOVPA
A data structure used as a 'thumbprint' for searching for the Location of a Function A data structure used as a 'thumbprint' for searching for the Location of a Function.
## Symbol detection ## Symbol detection
A method that tries to find Symbol Locations in an XBE, in case of Cxbx using OOVPA's. A method that tries to find Symbol Locations in an XBE, in the case of Cxbx using OOVPA's.
## Patch ## Patch
A piece of emulation code, used as a replacement, written over the Location of a Function. A piece of emulation code, used as a replacement, written over the Location of a Function.
This original Function is found using an OOVPA, resulting in the Location of both Functions
and in some cases also XRef-erenced Symbols (thus: either Functions or Globals). This original Function is found using an OOVPA, resulting in the Location of both Functions and in some cases also XRef-erenced Symbols (thus: either Functions or Globals).
Patch are written over the found Function Locations, so a wrongly detected Location
will result in incorrectly placed Patches, resulting in incorrect emulation behavior and Patches are written over the found Function Locations, so an incorrectly detected Location will lead to incorrectly placed Patches, resulting in incorrect emulation and potential crashes.
potential crashes. Also, the implementation of a Patch greatly influences the level of
accurateness of emulation. Some Patches don't do anything, whilst others try to mimic the The implementation of a Patch greatly influences the accuracy of emulation.
behavior of the original Function as closely as possible. The end result is sometimes
very noticeable (beeps & pops, graphics artifacts, etc) and sometimes you can't tell Some Patches don't do anything, whilst others try to mimic the behavior of the original Function as closely as possible.
the difference.
The end result is sometimes very noticeable (beeps & pops, graphical artifacts, etc) and other times you can't tell the difference.
## AliasOovpa ## AliasOovpa
An alternative OOVPA, used when a Patch may also be applied to another OOVPA 'thumbprint' An alternative OOVPA, used when a Patch may also be applied to another OOVPA 'thumbprint.'
This is mainly used for XBE's generated with LTCG, which mangles Function contents somewhat.
This is mainly used for XBE's generated with LTCG which mangles Function contents somewhat.
## LTCG ## LTCG
An optimizing linking technique sometimes used when compiling XBE's, resulting in faster code. An optimizing linking technique sometimes used when compiling XBE's, resulting in faster code.
This results in slight deviations in the way Functions are represented in the XBE. This results in slight deviations in the way Functions are represented in the XBE.
This makes Function detection unreliable, resulting in unused Patches, cause emulation errors.
This makes Function detection unreliable, resulting in unused Patches, and emulation errors.
## Name ## Name
A string used for debugging, associated with a combination of a Symbol (via an Oovpa) and Version. A string used for debugging, associated with a combination of a Symbol (via an Oovpa) and Version.
In some cases expanded with additional information
In some cases expanded with additional information.