# Mednafen Debugger Documentation

Valid as of version 0.7.0

## Quick Key Reference

Key | Action
--- | ---
ALT+1 | CPU debugger view.
ALT+2 | Graphics viewer.
CPU Debugger
R | Run
S | Step
Return | Edit disassembly address, or edit selected register.
SHIFT+Return | Edit watch address.
Space | Toggle opcode breakpoint on selected disassembly address.
SHIFT+R | Edit read breakpoints.
SHIFT+W | Edit write breakpoints.
CTRL+SHIFT+R | Edit I/O read breakpoints(for PC-FX).
CTRL+SHIFT+W | Edit I/O write breakpoints(for PC-FX).
CTRL+R | Edit Aux read breakpoints.
CTRL+W | Edit Aux write breakpoints.
Up, Left, Right, Down, PageUp, PageDown | Select disassembly address or select register.
SHIFT + (Up, Left, Right, Down, PageUp, PageDown) | Select watch address.
M | Toggle watch window between logical and physical(if available) addressing.
P | Poke a value to memory.
D | Dump memory to file, using the CPU's logical memory map. Prefix the first address with a '*' to dump using physical addresses.
SHIFT + D | Dump memory to file, using the video processor's logical memory map.
SHIFT + P | High-level poke a value to the underlying ROM or RAM.
Graphics Viewer
< | Decrease palette bank number.
> | Increase palette bank number.
Up, Down | Scroll up or down.
Left, Right | Select graphics layer.
-/+ | Select line number(not necessarily visible line number...) to decode graphics on.

## Memory Poking

High-level poking will attempt to write the desired value to the underlying storage(ROM or RAM). Normal(low-level) poking will go through the same write handlers as the virtual CPU operates through.

The format for the string to enter when poking memory(highlevel or lowlevel), is "[*]address value [size]", with values in brackets being optional. Prefixing the address with a "*" will cause the address to be treated as a physical address, which is currently only meaningful on systems that have paging registers internal to the CPU, such as the PC Engine/TurboGrafx 16.

## Read and Write Breakpoints

You may enter either a single address to break on, or a range. Read and write breakpoints operate on logical addresses, unless you prefix the address with a "*", or the first address in the case of a range. Multiple entries should be separated by one space character. Examples:

       2000-2007 4014 4015
       0000 1800 2300-23ff
       *1fe000

You may also use "segment:offset" form with absolute addresses with PC Engine emulation, such as:

       *ff:0000-ff:03ff

...which will cause a break on any writes to the VDC, including the ST0, ST1, ST2 instructions. Note that the offset is internally ANDed with 0x1FFF, so 0x2000 and 0x0000 would be equivalent offsets.

### Aux Read and Write Breakpoints

Aux r/w breakpoints operate on secondary storage reads and writes.

PC-FX
00000-3FFFF | KING Bank A/0
40000-7FFFF | KING Bank B/1
80000-8FFFF | VDC-A
90000-9FFFF | VDC-B

PC Engine
0000-7FFF | VDC
10000-17FFF | VDC-B(SuperGrafx only!)