No$gba Gameboy Advance / Nintendo DS Debugger Homepage
  Downloads History Screenshots Contact Links Home  

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.

Accuracy
  Emulation has been programmed with love in detail. Most operations are having a timing accuracy of +/-0 clock cycles. Opcodes and hardware ports are giving 1:1 same results, bits, and flags as real hardware. The emulation covers undocumented ports, and exactly emulated 'garbage' readback from unused memory areas (which is actually required for many - apparently badly debugged - games).   Of course, it is nearly impossible to make a perfect emulator of total accuracy. At least, I am trying to. If you should come accross any details which are not working exactly as one real hardware, please let me know about it! Even if it is only a small glitch and looks unimportant. I'd even love to reproduce the undefined MUL carry flag, even though it is probably not - intentionally - used by any games.  
I'd recommend to run your game frequently on real hardware (eg. by using flash-cards) for 100% proof bug-testing.

Performance
  Most of the user interface was designed, and works smoothly on a 66MHz computer. That guarantees no nasty surprises in case that you don't own one of the latest 16GHz models. And, because the debugger does not need to communicate with external hardware it is likely to be ways faster than hardware debuggers.   Emulation of the GBAs RISC processor takes up more CPU load, most GBA games are working smoothly and at full speed on 500Mhz computers. If you do have a faster PC you may use the additional CPU time to emulate up to four GBAs at once - in multiplayer mode, or to let the emulation run at quad speed on keystroke (eg. to skip intro sequences).  
All no$gba program code, both emulation and user interface, is all hand-crafted and pure assembler code.

Additional Features
The built-in manual contains help about debugging functions (see help html version), as well as complete specifications for the GBA/NDS hardware (see specs html version). The built-in source code assembler provides two-way interfacing with the built-in text editor. The upload function allows to run small programs (max 256K) in Work RAM of attached GBAs by simple xboo cable connection, that feature is significantly faster and more comfortable than 'flash-cards' even though the limited size restricts it to small games (or to fragments of larger games, it might be suitable to test a sound engine or intro sequence, for example). Also, a disassemble to file function is included.

Contacting me (Martin Korth) - Developers only (no gaming questions)
Contact per email
Caution: Emails with attachments are deleted automatically without notice!

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.


Back to nocash mainpage.

2 ^ 10 = 1024 ; C programmers should be careful not to misread this notation as exclusive-or.