Source - Retroguru

no$gba is one of the most accurate GBA emulators for the DOS and Windows32 platforms and is written by noone else than Martin Korth. Since v2.2 it also emulates the NDS partitially. no$gba in it's base version is freeware but for a fee, depending on your legal status (hobbydeveloper or professional developer) you can order a key, which enables a debugger, which is THE item, no$gba is known for. Changes:

22nd January 2006 - version 2.2

<blockquote>help: uploaded new gbatek standalone version v2.2 (with nds specifications)
exe/help: replaced upx compressor by nocash packer (without opcode filters)
nds: applies bottom lcd (touchscreen) video output to correct window-owmer
nds: applies mouse/touchscreen to correct window-owmer (in multi-machine mode)
nds: auto-initializes touchscreen calibration (both with/without firmware.bin)
nds: no$fmw: included nocash firmware xmit binary as overlay in no$gba.exe
help: added notes about new NDS emulation (on things that aren't yet working)
exe: exported windows-help to separate upx-compressed overlay (as in dos ver)
nds: vram viewer: matched user-grid, bg-scyx, oam-redbox to NDS resolution
nds: xboo: saves backup of original firmware header on HDD and in flash memory
nds: xboo: includes crypt key in firmware for NDS-decryption (if BIOS dumped)
nds: xboo: download functions for dumping NDS firmware, BIOSes, and GBA-carts
nds: xboo: patch/restore functions for (un-) installing nocash firmware
nds: xboo: help: xboo-circuit optionally fmw/rfu, and dsub/cntr pin numbers
nds: xboo: high-speed upload connection Dta7bit/Clk1bit (ca. 700 KBytes/sec)
nds: no$fmw: menu: property sheet, check boxes, radio buttons, edit buttons
nds: no$fmw: menu: settings/time, touchscreen/temperature calibration, etc.
nds: no$fmw: gui: joypad, touchscreen (lower), mouse/touchpad (upper) controls
nds: no$fmw: auto adjusts daylight saving time (should work, but not tested)
nds: no$fmw: allows to boot NDS-images from NDS-slot, or from NDS-Xboo-cable
nds: no$fmw: allows to load/boot small NDS-images to/from firmware memory
nds: no$fmw: allows to load/boot NDS/GBA/PASSME-images to/from GBA-flashcards
nds: lcd: re-activated rotscal params, working for GBA and BOTH NDS engines
nds: lcd: emulates extended affine bitmap modes
nds: direct boot: initializes ioports, and cp15, loads newest user settings
help: nds: added DMA chapter, GBA-mode chapter, and keypad chapter
help: nds: rev.engineered/described RTC interrupt (shared with rcnt SI-line)
help: nds: added sound chapters (channels, control, capture, block diagram)
nds: emulates touchscreen, wramstat, vramstat, exmemstat
help: nds: described undoc wramstat, vramstat, exmemstat, dmafill registers
help: nds: added cartridge secure area, icon/title, passme, I/O port chapters
help: nds: described how to interprete touch screen calibration values
nds: help: CpuFastSet: only 1st QUARTER uses FAST 32-byte-blocks, rest is SLOW
nds: resurrecred GBA mode (dis-chains NDS co_vals on NDS to GBA mode switch)
a22i: added ".no_auto_run" directive (don't load non-game-cart files into emu)
nds: emu: emulates ZERO unused/write-only ports (instead GBA-style prefetch)
nds: xboo: replaced 1N4148 diodes by BAT85 diodes for stable SPI connection
nds: xboo: added firmware dump/patch items in gui\utility\remote access menu
nds: xboo: automatically sends reset & provokes lockdown to get a spi free bus
nds: xboo: nocash firmware running in emu, using nds ".pack_lz77/key1/crc16"
a22i: new ".pack_nds_key1" directive (only firmw, rev/down, modulo C, level 2)
a22i: new ".pack_crc16 dest_label[,initial]" directive (start by .pack_org $)
nds: xboo: programmed overall skeleton nocash firmware version
a22i: lz77 compress now working (start by ".pack_org" finish by ".pack_lz77")
a22i: added new desired origin target parameter to ".pack_org" directive
help: corrected length in bit0-20 for CpuSet and CpuFastSet (not in bit0-15)
a22i: accepts ARM instructions "ALU Rd,Rm" (abbreviations for "ALU Rd,Rd,Rm")
a22i: fixed crash on "MOV R0,XX 1" whereas XX 1 invalid formula (unlike XX+1)
cpu: squeeze: ANYMEM removed seq code for areas with same timing as non-seq
cpu: squeeze: ANYMEM/mem_read_breaks checks brks, then executes normal ANYMEM
cpu: speedup: stores memaccess_addr prior to ANYMEM (instead "nnn OR adr")
cpu: speedup: ANYMEM bypasses addr_clks_table for regions with fixed timings
nds: help: added cart filesystem chapter, firmware header/settings chapters
nds: debug version: added NitroROM filesystem viewer window (if any)
nds: direct boot: decrypts 2K secure area (only if rom-image is encrypted)
nds: a22i ".fix" directive (plus .nds) encrypts first 2K secure area (if any)
nds: a22i ".fix" directive (plus .nds) fixes logo,secure,header,icon CRCs
nds: a22i ".nds" directive creates target files with ".NDS" extension
nds: direct boot: optionally bypasses ugly slow bios/firmware intro
nds: timings: recurses cycles per scanline, scanlines per picture & per vblank
nds: dma: moved NDS9 dma-mode bits, DS-gamecart DMA, disabled NDS7 hblank-dma
nds: cartloader detects nds-passme images, direct boot works with diff entry
nds: cartloader identifies NDS gamecarts by header CRC (switches NDS/GBA mode)
nds: help: described cart protocol KEY1-commands in raw/unencrypted format
nds: emulates firmware bootmenu, io_lists: emulates nds gamecart
nds: lcd-core displays second screen in game window, and in debug mode
nds: lcd-core displays second screen, lcd-core handles vram_table
nds: allocated DOUBLE sinline_bufseg in EMP-GSET, for GBA-LCD, for 2 screens
nds: vram viewer: displays second screen (by engine A/B buttons)
nds: vram viewer: supports BG maps, added Engine buttons to all screens
nds: creates second nds-machine, and dis-creates it in gba-mode
nds: lcd: suppresses lcd_refresh_request on NDS7 machine (lcd by NDS9 only)
nds: lcd: emulates OBJs, vram_table, variable boundary, moved dimension bit
nds: lcd: disabled undoc green swap in NDS mode (supported in GBA mode only)
nds: emulates ANYMEM vram bank-switching in 16K units by new vram_table
nds: expanded NDS9 io_lists to 800h+80h (3D_Engine + and 2D_Engine_B area)
nds: allows NDS9 firmware to read from DMA reg 40000B0h at least as dummy
nds: added EXTKEYIN port 4000136h to NDS7 io_lists
nds: expanded NDS7 io_lists to 800h (sound registers), plus dummy WLAN region
nds: added new NDS9 io_list entries 400006xh (video), 40000Exh (dmafilldata)
nds: emulates access to power managment device and touch screen controller
nds: emulates all firmware flash memory commands (write, erase, status, etc)
nds: emulates full SPI bus with different modes, irqs, devices etc.
nds: help: added Power Managment Device, and SPI bus, and IPC chapter
nds: help: added TSC touch screen chapter (touchscr, microphone, temperature)
nds: help: added RTC real time clock chapter (port, time, date, alarm, etc)
nds: emulates rtc real time clock, uses system time/date & own stat/alarm regs
nds: xcept: allows NDS9 firmware to zerofill invalid ports 4000058h/400005Ch
nds: xcept: allows NDS7 user code jump to BIOS addr 2DD4h (irq return addr)
nds: xcept: allows ITCM high-mirror at 1FF8000h (aka 1000000h aka 0000000h)
nds: xcept: allows bios accesses LDR/STR [3FFFFF8h], and LDM [3FFFFD0h],r0-r11
nds: xcept: ignores IntrWait bug with R12=18h (firmware decompression garbage)
nds: xcept: zero-irq-vector-check on NDS addresses (DTCM+3FFCh and 380FFFCh)
nds: xcept: allows/expects nds7 shared ram at (37F8000h aka/instead 3000000h)
nds: xcept: allows bios to execute mis-aligned 32bit write to [40001A1h]
nds: xcept: allows bios to fill last 32K main RAM at 27F8000h (aka 23F8000h)
nds: xcept: allows NDS9 hi_bios jumps FFFF0xxxh and FAKE_TCM 080xxxxh accesses
nds: xcept: allows NDS9 BIOS boot at FFFF0194h to write garbage to 27E57FEh
nds: xcept: allows NDS debug ver-style 4K mirror at 27FF000h (aka 23FF000h)
nds: xcept: allows BIOS-"tricks" memfill/irqvect at 3FFFFxxxh (aka 3800Fxxxh)
nds: reproduced ARM7 execution time R0*4 clks in 80x86-emulated WaitByLoop
nds: emulates ipc fifo control/status/interrupts, and send / receive queues
nds: redirects high ports (4100000h and 4100010h) to nds in_list & out_list
nds: cpu2cpu emulates interrupt send/enable (used later on in firmware)
nds: cpu2cpu provokes instant machine switch (for firmware 232EEF0h/37FFB38h)
nds: emulates nds9 irq/swi exception execution via high-vectors at FFFF0000h
nds: added 2nd FAKE_TCM area for firmware dtcm=3000000h (in shared ram area)
nds: customized adjust_pc for NDS7 host for split ram at 3000000h and 3800000h
nds: customized debug ADJUST_ADDR for NDS7 host (ram at 3000000h and 3800000h)
nds: faked gamecart irq, relocated IF (lcd,timer,dma,sio,etc) to NDS addresses
nds: debugger shows current machine host (NDS7, NDS9, or GBA) in statusbar
nds: emulates FAKE_TCM at fixed/default locations dtcm=0/800000h,itcm=1000000h
nds: mounted ARM9 engine, chained-in 2nd vals with co_machine pointer
nds: created ANYMEM for ARM9, supporting HI_BIOS area, init ARM9 addrbaselist
nds: created NDS9 in_lists and out_lists, emulated SQRT and DIV registers
nds: verified all machine loops for use with 2nd nds-machine (except gba-set)
nds: dummy feedback for CPU2CPU communication, and for ROMCTRL busy flags
nds: mounted new ANYMEM system for NDS7 host, split area nds7 ram/shared ram
nds: created nds7 in_lists, expanded IE and IF to 32bit, emulated firmware bus
nds: bios loader: shows warning on invalid BIOSNDS7.ROM/BIOSNDS9.ROM checksums
webpage: new paypal email address, and new donate page (for freeware projects)
help: removed all "(formerly ..)" names, expanded ports from NNNh to 4000NNNh
xed32: selectable line-wrap length (65 or 77 columns), fixed line-wrap bugv
xed32: scrollbar works with >65535 lines, hex-scroll doesn't end at chr(1Ah)
lcd: speedup: fixed fatal "test_bg_rotated" bitmap BUG (refx/refy exchanged)
cpu: suppressed base-writeback on NDS7:BIOS:1CD4h THUMB ldmia [r0]!,r0,r3
cpu: bugfix: illegal opcode "arm_11_ldmib_usr_wb" acted as STM (instead LDM)
cpu: emulates invalid "stmib [rb]!,rlist^" (userbank/writeback) (nds firmware)
cpu: ignores misaligned thumb target address on "subs r15" (for nds firmware)
memory: mount_system switches between GBA and NDS memory allocation & host
memory: cleaned initaddrbasemask, new memadr_, formerly addr_
bios: debug/disass: added complete BIOS datazones and cpuzones for NDS7/NDS9
bios: debug/disass: added SWI auto-comments and auto-labels for NDS7/NDS9
bios: simulates all NDS7/NDS9 bios SWIs by 80x86 code (except callbacks)
help: bios: nds: described all new and changed NDS7/NDS9 bios SWI functions
bios: simulates IntrWait swi4/swi5 by 80x86 code (no longer using minibios)
anymem: moved memaccess list to vals layer (for gba/nds7/nds9 memory hosts)
anymem: cleaned up source by splitting code into separate anym sub-macros
anymem: exported warnings to non-macro procs, access_abort "exitm" (saves 12K)
help: nds: added firmware flash chip, firmware header, and encryption chapters
windows: allows break-out from emucore even if windows sound timer locked-up
win98: returns zero on WM_ACTIVATE (to regain full keyboard focus under win98)
power saving: HLT opcode in DOS debug/gui/emucore, Sleep(1) in Win98 emucore
internal: recombined frameskip handlers for gmb/gba/retro versions</blockquote>

Download here --> http://nocash.emubase.de/gba.htm