At the moment the command list for BootDebug is rather limited, but it will expand as the program is fleshed out. Additionally the parameter parsing is a bit weak and will have to be improved to properly support things like ranges.
All numeric input is in hexadecimal.
There are three different ways to enter an address in a command, depending on what you want to do.
The dump command displays the contents of a given memory location. It should be able to print any memory that accessible inside of the 32-bit address space.
D[b|w|d|q] [Address] [Length]
[b|w|d|q]: Display as Byte data, Word data DWord data or QWord Data. Byte data is the default.
[Address]: The address to begin the dump at. If not provided it will start at the current address.
[Length]: The number of bytes to dump, the default is 0x80.
Searches for data in memory
S[b|w|d|q] Address Length Value
[b|w|d|q]: Search for Byte data, Word data or DWord data. Byte data is the default.
Address: the address to start the search
Length: How many bytes to search over
Value: The data to search for. This can be provided as a quoted string (but only with byte data), or as a list of hex values separated by a space.
Enters data into memory
S[b|w|d|q] Address Value
[b|w|d|q]: Enter Byte data, Word data or DWord data. Byte data is the default.
Address: the address to enter the data
Value: The data to enter. This can be provided as a quoted string (but only with byte data), or as a list of hex values separated by a space.
Displays or modifies system registers.
R CR[0,2-4] [Value]
This version of the command will display the value of the provided CR register.
[Value]: The value to set the register to instead of displaying it.
R MRS Register [Value]
This version of the command will display the value of the provided Machine Specific Register.
Register: The register to display
[Value]: The 64-bit value to set the register to instead of displaying it.
NOTE: If the Register is in valid, the system will generate a GPF fault as well as list an error. This is expected behavior at the moment.
Reads an IO port and displays the value.
I[b|w|d] Port
[b|w|d]: Display as Byte data, Word data or Dword data. Dword data is the default.
Port: The port to read from.
Output:
Writes to an IO port.
O[b|w|d] Port Value
[b|w|d]: Write as Byte data, Word data or Dword data. Dword data is the default.
Port: The port to read from.
Value: The value to write
Displays information on a part of the system and allows some editing if necessary.
N MP
Displays the contents of the Multi-Processor data table.
N PCI [DeviceID] [Register] [Value]
PCI: Enumerates the PCI bus display information about each attached device.
[DeviceID]: Displays all the information about a device based on the ID.
[Register]: Displays the 32-bit value of a configuration register.
[Value]: Sets the Configuration register to this 32-bit value.
N CPUID [ParamID] [Supplemental ParamID]
This displays the CUPID information, if not parameters are provided it will display the decoded information for ParamID 0
[ParamID]: The Parameter ID to display
[Supplemental ParamID]: The Supplemental Parameter ID, used with some calls.
Fill (F): Fills memory
Disassemble (U): Disassembles code in memory
Assemble (A): A (limited) assembler
Expanded Memory (X): Allows swamping of memory above 4G into the 32-bit address space.
Registers (R) Displays and modifies registers GPR registers
Load Data (L): Loads data into memory, possibly from disk or a COM port.
Write Data (W): Writes data out of memory, possibly to a disk or to a COM port.