No$gba Gameboy Advance / Nintendo DS Debugger Homepage

A thousand may keep a secret if ninehundredninetynine are dead.
Lock the frontdoor, lock the backdoor, and trust nobody.

  Gaming History Screenshots Contact Price List Links Home  

No$gba is a software based development tool for testing and debugging of Gameboy Advance and Nintendo DS software, running on Windows 95 platforms (and also on less efficient windows versions), programmed by Martin Korth. It supports source level debugging (which would be important only for HLL programmers). And covers an overload of features and options (which are described in the funny colored boxes below), whilst still maintaining an uncomplicated user interface and highest performance even on low-end computers.
In short,
no$gba is a full moon after midnight.
Real.

The debug version has been exclusively designed for professional developers.
It is not a toy. It is not freeware. And it is completely useless for gamers.
Back to no$gba freeware page for gamers.

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.

Previews
  Click here for some screenshots of the no$gba debug screens, vram viewer, warning messages, configuration screens, etc. That link also includes descriptions for each picture, and points out important features. That introduction may be worth to have a look at even if you've already registered the program.   Click here for downloading no$gmb, my previous emulator/debugger for older 8bit monochrome and color gameboys. Aside from some newer improvements such like support for larger monitors and source level debugging, no$gba covers the same debugging features and accuracy as no$gmb.  
Because of the risk of cracks (for a console emulator of that quality: 100% one week after release) there's no no$gba demonstration version available. Very sorry, I've tried to, but it didn't work.

No$gba Price List EmulatorDebuggerProfilerSourceLevelCheatsSingle UserSite Licence
Freeware Gamers Yes - - - Yeah! 0 -
Shareware Home-useYes Yes - - - US$15 -
Commercial use proYes Yes Yes - - US$750 US$3000
Commercial use hllYes Yes Yes Yes - US$1750 US$5000
All registered versions include free support, updates, and bug-fixes for at least 12 months.
Be sure to compare the support and price and features and anything else with any other tools.
Home-use version is meant to support hobby programmers for non-commercial use only.
Payment MethodsCashMoney OrdersChequesMoney TransfersPayPal
HowPer mail.Per mail.Per mail.Per Bank Account.Online.
For Home-usePlease no coins.Please no US Postal Service money orders.Please no canadian cheques.From inside europe only (due to transfer fees).
Commercial use-Same as above.Okay, worldwide.Okay, worldwide.-
Any currency accepted, best use your own local currency, according to current exchange rates.
For home-use, if you don't know the rates, send somewhat US$ 15 or EUR 15 or CA$/AU$ 20 or GBP 10 or YEN 2000.
Include your email address and the word "no$gba" (both required to receive a no$gba registration key)!
Hotmail users please read info for hotmail users. Click here for my bank details & mailing address. Mark cheques/money orders to be paid to Martin Korth only.

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

Support, Updates
  No$gba has been updated quite regulary since programming was started about three years ago (see release notes). The complete timeline for the nocash project is longer, I've started working on the debugging engine about 1994 (initially for DOS programs), and written my first emulator back in 1995, finally, about 1998 I've started working fulltime on emulation and debugging projects.   The facilites of the current versions are surpassing everybodys expections, including for my own. And I am still not tired of adding more and more 'final details'. I've meanwhile reached the level where people are hesitating to buy the program because they cannot believe that it really includes all of the announced features ;-) For me, work becomes more fun when receiving feedback; that implies best support for the users.  
Questions, comments, suggestions, requests, and bug-reports are always welcome.

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.