# Mednafen Debugger Documentation

Valid as of version 0.7.0

## Quick Key Reference

Key | Action
--- | ---
ALT+1 | CPU debugger view.
ALT+2 | Graphics viewer.
ALT+3 | Memory editor.
CPU Debugger
R | Run
S | Step
T | Toggle disassembly mode. Currently only used for selecting between Intel and AT&T syntaxes for the WonderSwan debugger.
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 and WonderSwan).
CTRL+SHIFT+W | Edit I/O write breakpoints(for PC-FX and WonderSwan).
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.
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 Editor
D | Dump memory from the selected address space to a file.
<, > | Select address space.
Up, Down, Left, Right | Move the cursor around and possibly scroll.
PageUp, PageDown | Scroll up, or scroll down, one page(256 bytes).
Home | Move cursor to address 0.
End | Move cursor to the end of the address space minus 16.
Insert | Enter edit mode.

## 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.
Exception: WonderSwan read/write breakpoints only operate on 20-bit physical addresses for the time being. Furthermore, only the lower 8 bits of WonderSwan I/O breakpoints are considered.

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.

WonderSwan notes:
Segment(16-bit):offset(16-bit) form can also be used with the WonderSwan debugger, but you still need to prefix it with a "*", even though logical address breakpoints aren't supported with WonderSwan emulation currently. Also, the segment:offset pair is internally translated to a 20-bit address, and because segments overlap, you can get breakpoints to occur on writes with other segments than the one you specified.

### Aux Read and Write Breakpoints

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

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

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