The Main Debug Screen consists of
Code, Data, Stack, and Registers windows.
|
|
The Code window displays disassembled code and/or source
code, the built-in assembler allows to modify, or NOP-out,
single opcodes.
The status bar gives additional information on the currently
selected opcode, for example: "[3001248h]=0114h" for a "ldrh r0,[r1]"
opcode.
Arrow up/down symbols indicate the jump direction
(backwards/forwards, ie. loop/skip) for any branch opcodes, the arrow
right symbol indicates jumps to sub-routines.
Automatic 'true/false' comments are generated when the current
instruction is a conditional opcode, making it much easier to
determine if a jump opcode is about to be executed.
The memory addresses of code/data/stack windows can be changed by
cursor keys, mouse scroll bars, by search function, or by goto
address (or goto label) functions.
|
|
Another very comfortable feature is the 'follow' function: Pushing
right cursor key moves the code window to the target address of the
currently selected branch opcode. On load or store opcodes it moves the data
window to the target address. Left cursor key moves the window back to the
old location(s). That feature also works with return values in stack
window.
The Stack window gives a list of pushed and allocated words,
including detailed stack information for each word, for example:
"pushed r7", "allocated [1Ch]", or "return from game_initialization".
The Data window allows to view (and modify) a memory dump in
hexadecimal and ascii text format.
The Registers window displays the CPU registers and flags.
|
|
|
The debug user interface is based on nine years of programming, experience,
fine tuning, and feedback from users.
|
Source Level Debugging and Profiling
|
|
The no$gba disassembler displays any labels that are used in
source code (and of course, that labels are also recognized in user
input). Mixed Thumb and Arm opcodes are automatically disassembled
as such.
Additionally, your source code can be displayed in stacked
view mode, that is, the associated disassembled opcodes are displayed
below of each line of source code. For better legibitly, the source
lines are drawn by light blue background color, moving the cursor onto
a source line displays the corresponding line number and source
filename in status bar.
No$gba supports debug info in .ELF, DWARF2, and .SYM formats.
|
|
No$gba displays the execution time in clock cycles each time when
starting and stopping the emulation, eg. after executing a sub-routine.
The power gauge displays the current CPU load (assuming that unused
CPU time is spent in low power state).
The nocash clock cycle comments display the execution time for each
disassembled opcode, different view modes are available - it can display
formulas (eg. "1N+3S+1I") (optionally split into separate code and data
cycles), and it can resolve that formula into actual number of clock
cycles (by automatically recursing the current address and waitstate
configuration, etc. - the results are kinda interesting: some
opcodes take only 1 cycle, others may eat up about 100 cycles).
And, it can calculate the sum of cycles for a sequence of instructions.
|
|
|
Profiling and clock cycle counting allows to make faster and smoother
software, and to free up more CPU time - either for battery power saving,
or for additional effects.
|
Conditional Breakpoints & Automatic Warnings
|
|
The debugger covers a wide range of breakpoints, which are able
to 'freeze' the emulation - even when debugging interrupt handlers.
Aside from normal 'stop' breaks, it also supports conditional breaks
(for example when writing a specific value to specific address, or
when writing or changing a value inside of a specified memory area).
Also, there's possibilty to define breakpoints (and text messages) in
source code. Of course, basic operations like tracing (either single
opcodes, or complete sub-routines) and stopping when reaching the
currently selected line are supported as well.
|
|
Aside from user configured breaks, the debugger also includes built-in
warning messages which are (optionally) notifying the user of
suspicious operations, such like writes into ROM, accesses of invalid
or mis-aligned memory addresses, etc. These features are helpful to
locate both 'obvious crashes' as well as 'hidden bugs' which may show up
only in certain situations, or only in later builts - or not until the
game is released (in fact, no$gba finds bugs in most distributed
commercial titles).
|
|
|
NB. Such features are likely to be found only in software debuggers -
which are more flexible than hardware debuggers.
|
General Emulation Features
|
In multi-player mode, up to four GBAs can be linked together
by emulating normal, multiplay, or automatic cable connection, this feature
also supports single gamepak software.
The video engine supports real blurred colors and dark
intensities, giving the same picture as on real GBA/NDS displays, the
screenshot function allows to capture the current picture to
clipboard or file.
The stereo sound emulation provides exact reproduction of all six
sound channels. The snapshot function allows to save and restore the
state of the complete hardware to or from file.
No$gba emulates most GBA/NDS BIOS functions, and can be upgraded by
installation of the BIOS rom-image (details here),
which provides complete emulation of all functions and highest
timing accuracy. Of course, no$gba can skip the BIOS intro sequence -
you can to start your cartridge directly, without having to see the nintendo
logo each time when testing a new built.
|
Forget everything that you have experienced with normal emulators.
No$gba is not like that.
|
I/O Map and VRAM Viewer
|
|
The I/O Map Window lists the name, address, and content of all
hardware registers, including undocumented ports. Additionally,
the separate control bits are resolved for each register (eg. Bit6 Irq=On,
Bit7 Start=Off). All values are, optionally, updated also when the
emulation is running.
The information can be viewed either in a tabbed window (with tabs for
Video, BG0-3, Sound, DMA, Timers, and Other registers), or in all at once in one
huge single window, (requires at least 1024x768 pixels screen resolution).
|
|
The built-in VRAM Viewer allows to view the various BG layers,
the BG and OBJ tile memory, OAM content, and color palettes. Moving the
mouse arrow onto a specific OBJ or BG tile displays a zoomed copy of that
tile, as well as associated attributes (screen position, memory address,
color depth and palette, OBJ mode and size, flip or scaling parameters,
etc.) BG layers can be viewed with/without grid. A 'laser arrow'
indicates the screen position of the currently selected OAM entry.
|
|
|
That is punk rock software debugging - it's a bit more than a gameboy
connected to a PC user interface by some cables.
|
Related info & tools & links
|
release notes
Info about newer (and older) no$gba updates.
|
gba-xboo - Updated 15th August 2002 - new function for downloading the GBA BIOS to file
Stand-alone DOS version of the 'multiboot' upload program and instructions
on how to built the cable, use that for testing games on real hardware,
the new version should be also working with fast >100MHz computers.
|
gbatek.htm and gbatek.txt
- New Feb 2006 with NDS specs
Standalone version of the no$gba tech docs in Html and Text format (ca. 500
KBytes each). Describes the complete GBA/NDS hardware, memory map, I/O ports,
BIOS functions, cartridge header, undocumented features, CPU instruction set, etc.
|
magicflr
Magic Floor, freeware puzzle game for the GBA, includes assembler source code.
Aside from playing with it, I hope this will delight some programmers whom seem
to be confused about terms such like interrupts, sound, halts, and multiboot.
|
gbadev.org
gbaemu.com
devrs.com/gba
Links related with news in gba programming scene. Tools, docs, emulators,
jobs, competitions, freeware games, demos, examples, etc.
|
pdroms.de
Big collection of freeware games. Also check the games/demos section at gbadev.org (see link above).
|
no$gmb
Emulator/debugger for the old 8bit monochrome gameboy, super gameboy, and color
gameboy, some of the users killed the program, but it's netherless still a
useful dev tool with similiar features as no$gba.
|
gbapub
The public opinion. Feedback & lyrics on no$gba project...
"YOu SuCK MAn!!!I'm ThE EVIl!!, and i want to cook your soulI WANT TO MURDER
YOUyour fucking emulators are PURE TRASH!!!SHUTDOWN YOUR SITE NOW, and use
another emulator!!!LOSER!!!"
|
ereader.zip - New (June 2007)
Contains four dotcode games/demos: Magic Floor, e-Reader Camera Viewer demo,
Yarin's Rotris, and Snowbro's Bomb Sweeper. Including some sample source code.
|