Virtual GameBoy Advance
version 3.0

by Marat Fayzullin

Contents


Disclaimers


New in This Version


History

New in Version 2.1

New in Version 2.0

New in Version 1.7

New in Version 1.6

New in Version 1.5

New in Version 1.4

New in Version 1.3

New in Version 1.2

New in Version 1.1

New in Version 1.0

New in Version 0.6

New in Version 0.5

New in Version 0.4


Introduction

Virtual GameBoy Advance (VGBA) is an emulator of Nintendo's GameBoy Advance handheld videogame console. VGBA can run most commercial GameBoy Advance software on a desktop, palmtop, or any sufficiently fast computing device. It will also run correctly written homebrewn software. You can always get the latest version of VGBA at

http://www.komkon.org/fms/VGBA/

VGBA is a logical continuation of my previous work in videogame emulation, namely, the Virtual GameBoy that emulates GameBoy Classic, GameBoy Pocket, Super GameBoy, and GameBoy Color. VGBA is a completely different program though. It will not run the original GameBoy software, so you will have to use VGB for that.

I am mainly releasing VGBA for game developers and hobbyists who would like to code for GBA but cannot afford to buy an official development kit from Nintendo. VGBA is not a replacement for the real development kit, as it does not contain any real GBA hardware, but it is a cheap and reliable way to test your code and show your work to the publisher.


VGBA Ports

So far, I have ported VGBA to MSDOS, Windows, and Unix. All three ports are maintained by myself. I am also maintaining the PocketPC port, formerly developed by Aaron Oneal. If you wish to port VGBA to another platform, please, let me know.

Windows 95/98/ME/NT/2000/XP

The Windows and MSDOS versions of VGBA are available from me, Marat Fayzullin, for $35US. This fee ensures that you will get you the latest full versions of both VGBA-Windows and VGBA-MSDOS with support and free updates via email as long as I update these programs. For more information, take a look at

http://www.komkon.org/fms/VGBA/VGBAWindows.html

You can register VGBA-Windows and VGBA-MSDOS by one of the following methods:

ORDER BY MAIL
Send $35US in cash, money order, or a US bank check to:
     Marat Fayzullin
     3030 Southview Road
     Ellicott City, MD 21042
     USA
Don't forget to include your email address and mention that you want VGBA-Windows, as I'm selling several other products as well. The software will be emailed to you as soon as I receive the money.

ORDER ON THE WEB
Tell your WWW browser to go to

http://www.digibuy.com/cgi-bin/order.html?296825+99046733021

and use the online form to register VGBA-Windows. You can pay with a credit card. They take MasterCard, Visa, Amex, or Discover and also allow to register over the phone. The software will be emailed to you as soon as I receive the notification from DigiBuy.

MSDOS

The first (<1.0) versions of VGBA were released for MSDOS. You may find them on the Net for free, but they lack the compatibility and features of the later versions. The newer (>1.5) versions of VGBA-MSDOS are sold as part of the VGBA-Windows package. VGBA-MSDOS has been compiled to run with the DOS4GW extender on MSDOS and Windows platforms. It uses a 320x200x16bit VESA screen and therefore requires VESA support. It will fail on your computer if you do not have VESA support for the 320x200x16bit screen mode.

Unix

I have compiled VGBA for several different flavors of Unix and made the binaries available for free at the VGBA homepage. The current VGBA-Unix has several important requirements though:


Registered Users

If you've bought VGBA-Windows, please do not give your copy to anybody. And I do mean anybody. There was a couple of cases when registered users gave my programs away to their friends, relatives, or just "KeWl" characters on the Net, and then I found my work pirated, spread on IRC, put onto WWW pages, and even posted to USENET newsgroups. If I find your personalized copy of VGBA being spread around, your registration gets automatically cancelled which means no support and no more updates.

I understand that the previous paragraph may sound threatening to some people, but this kind of piracy really hurts my profits and feelings. I've put a lot of effort into VGBA, and can only continue working on it if people do not try to cheat on me.

It may also be a good idea to buy a real cartridge for each GameBoy Advance ROM image you use with the emulator. GameBoy Advance software is copyrighted, but as long as you own the real cartridge, you are protected by the law allowing customers to backup bought software.


What is Included

This version of VGBA has emulation for the following: Not emulated: GBA video subsystem is extremely complicated but has now been almost fully emulated in the VGBA. Here is a list of emulated features:

Feature Text BGsRotation BGsMODE 3MODE 4MODE 5Sprites
Variable Size YES YES N/A N/A N/A YES
Tile Flipping YES N/A N/A N/A N/A YES
16/256-Color TilesYES N/A N/A N/A N/A YES
Scrolling YES N/A N/A N/A N/A N/A
Mosaic YES YES YES YES YES rotated sprites only
Rotation N/A YES YES YES YES YES
Window YES YES YES YES YES YES
Color Effects YES YES YES YES YES YES

Including the real Nintendo BIOS with the emulator would be a copyright violation. Therefore, I have tried to simulate GBA BIOS routines by trapping and handling ARM SWI opcodes. GBA BIOS is now fully emulated except for the built-in music player and some networking routines. Here is the list of supported BIOS calls:

Function SWI # Supported
BIOS_SoftReset 0x00 Yes
BIOS_RegisterRAMReset 0x01 Yes
BIOS_Halt 0x02 Yes
BIOS_Stop 0x03 Yes
BIOS_IntrWait 0x04 Yes
BIOS_VBlankIntrWait 0x05 Yes
BIOS_Div 0x06 Yes
BIOS_DivARM 0x07 Yes
BIOS_Sqrt 0x08 Yes
BIOS_ArcTan 0x09 Yes
BIOS_ArcTan2 0x0A Yes
BIOS_CPUSet 0x0B Yes
BIOS_CPUFastSet 0x0C Yes
BIOS_BIOSChecksum 0x0D Yes
BIOS_BgAffineSet 0x0E Yes
BIOS_ObjAffineSet 0x0F Yes
BIOS_BitUnPack 0x10 Yes
BIOS_LZ77UnCompWRAM 0x11 Yes
BIOS_LZ77UnCompVRAM 0x12 Yes
BIOS_HuffUnComp 0x13 Yes
BIOS_RLUnCompWRAM 0x14 Yes
BIOS_RLUnCompVRAM 0x15 Yes
BIOS_Diff8bitUnFilterWRAM 0x16 Yes
BIOS_Diff8bitUnFilterVRAM 0x17 Yes
BIOS_Diff16bitUnFilter 0x18 Yes
BIOS_SoundBiasChange 0x19 No
BIOS_SoundDriverInit 0x1A No
BIOS_SoundDriverMode 0x1B No
BIOS_SoundDriverMain 0x1C No
BIOS_SoundDriverVSync 0x1D No
BIOS_SoundChannelClear 0x1E No
BIOS_MIDIKey2Freq 0x1F No
BIOS_MusicPlayerOpen 0x20 No
BIOS_MusicPlayerStart 0x21 No
BIOS_MusicPlayerStop 0x22 No
BIOS_MusicPlayerContinue 0x23 No
BIOS_MusicPlayerFadeOut 0x24 No
BIOS_MultiBoot 0x25 No
BIOS_HardReset 0x26 No
BIOS_CustomHalt 0x27 No
BIOS_SoundDriverVSyncOff 0x28 No
BIOS_SoundDriverVSyncOn 0x29 No
BIOS_GetJumpList 0x2A Yes

What is not Included

Absolutely no ROM images of commercial GameBoy Advance games are included. These games are copyrighted by the companies which produced them, and therefore, I cannot distribute any of these games. I'm also unable to tell you where to find the games, so do not send me email asking for them. You will have to look for them on your own.

The VGBA WWW page contains some links to GameBoy Advance cartridge copier info. Cartridge copiers can be used to dump GameBoy Advance cartridges into files. I cannot provide you with any additional information about these copiers, so do not send me email asking for this information. Use the copier-related links at the VGBA WWW page.

GameBoy Advance has a BIOS ROM inside with some useful subroutines. Including the real Nintendo BIOS with the emulator would be clearly illegal. Instead, VGBA tries to simulate GBA BIOS routines. It still has an option to use the real BIOS supplied from the GBA.ROM file in the current directory. I cannot tell you where to find the real BIOS, so do not ask me about it. The BIOS simulation is quite functional and becomes better over time. It also runs faster than the real BIOS would on the emulator.


Buttons

These button assignments apply to all three VGBA ports developed by myself. They will work in Windows, Unix, and MSDOS.
  [SPACE]    - A button (also: [LALT],A,S,D,F,G,H,J,K,L)
  [LCONTROL] - B button (also: Z,X,C,V,B,N,M)
  [Q]        - LEFT button (also: E,T,U,O)
  [W]        - RIGHT button (also: R,Y,I,P)
  [TAB]      - SELECT button
  [ENTER]    - START button
  [ESC]      - Quit emulation (also: [F12])
  [F2]       - Turn soundtrack logging on/off
  [F3]       - Turn A button autofire on/off
  [F4]       - Turn B button autofire on/off
  [F5]       - Turn LEFT button autofire on/off
  [F6]       - Turn RIGHT button autofire on/off
  [F7]       - Save emulation state to .STA file
  [F8]       - Load emulation state from .STA file
  [F9]       - Fast-forward emulation (also: [PAGEUP])
  [F11]      - Reset GBA hardware
  [F12]      - Quit emulation (also: [ESC])
  [PAGEUP]   - Fast-forward emulation (also: [F9])
  [5]-[8]    - Turn backgrounds display on/off
  [9]        - Turn sprites display on/off

With #define DEBUG:
  [F1]       - Go into the built-in debugger

With #define SOUND:
  [-]        - Decrease sound volume
  [=]        - Increase sound volume
  [0]        - Turn all sound on/off
  [1]-[4]    - Turn melodic sound channels on/off
  [[],[]]    - Turn direct sound channels on/off

Command Line Options

Start VGBA with the following command line:
vgba [-option1 [-option2...]] [FILENAME.GBA]
When no cartridge name is given, VGBA will print the list of keyboard assignments and available command line options. Following is a list of options supported in VGBA-MSDOS and VGBA-Unix. VGBA-Windows only accepts the cartridge name.
  -uperiod <period>   - Number of interrupts per screen update [1]
  -verbose <level>    - Select debugging messages [1]
                          0 - Silent          1 - Startup messages
                          2 - I/O accesses    4 - Illegal memory accesses
                          8 - DMA transfers  16 - Illegal CPU ops
                         32 - SWI calls      64 - FlashROM/EEEPROM/RTC
                        128 - Sound messages
  -crc/-nocrc         - Check cartridge CRC/CMP [-crc]
  -guesshw/-defaulthw - Guess FlashROM/EEPROM ID and size [-guesshw]
  -flashid <id>       - Set FlashROM maker/device ID [D4BFh]
  -flash <bits>       - Set FlashROM size, ≥16 bits [17]
  -eeprom <bits>      - Set EEPROM size, 6..16 bits [6]
  -logsnd <filename>  - Write soundtrack to a MIDI file [LOG.MID]
  -ds <method>        - Sound rendering method [0]
                        0 - Automatic          1 - Accurate
                        2 - Fast
  -sync <frequency>   - Sync screen updates to <frequency> [-nosync]
                        (<frequency> must be in 20Hz..100Hz range)
  -nosync             - Do not sync screen updates

With #define SOUND:
  -sound [<quality>]  - Sound emulation quality [44100]
                        0 - Off                1 - Adlib (MSDOS)
                        Values >8191 are treated as wave synthesis
                        frequencies.
  -nosound            - Same as '-sound 0'

With #define DEBUG:
  -trap <address>     - Trap execution when PC reaches address [FFFFh]
                        When a keyword 'now' is used in place of the
                        <address>, execution will trap immediately.

With #define MSDOS:
  -vsync              - Sync screen updates to VBlank [-nosync]
  -tv/-notv           - Simulate TV raster lines [-notv]

With #define UNIX:
  -saver/-nosaver     - Save CPU when inactive [-saver]
  -scale <factor>     - Scale window by <factor> [1]

With #define MITSHM:
  -shm/-noshm         - Use MIT SHM extensions for X [-shm]

Frequently Asked Questions

  1. I WANNA PLAY GAMES!!!! WHERE DO I GET GAMES???????
    I do not know. I can't give you any due to both legal and moral reasons. Please, do not mail me asking for games. I will delete your mail right away, and you won't get an answer.

  2. Can I play GameBoy Classic and GameBoy Color games on VGBA?
    No, you can't. GameBoy Advance hardware is completely different from the older GameBoy and GameBoy Color models. To play older games, you may want to consider my other emulator, Virtual GameBoy (VGB) .

  3. How do I copy games from cartridges to a computer?
    You can use a special device called cartridge copier, such as Flash Advance Linker from Lik-Sang. Don't forget to get a rewritable flash card too.

  4. What is GameBoy Advance? How its hardware works?
    GameBoy Advance (GBA) is a handheld videogame machine made by Nintendo. Its hardware has nothing to do with GameBoy and GameBoy Color handhelds previously produced by Nintendo. GBA is built around an ARM7TDMI 32bit CPU running at 16MHz. GBA video subsystem is very similar to that of SNES, but more advanced. The sound subsystem uses direct sample output. GBA also includes the four-channel melodic sound chip from the original GameBoy.

    In order to be compatible with the original GB/GBC, GBA includes the complete set of GBC hardware. This hardware (aside from the sound chip) is not accessible from the GBA side and only used when somebody inserts a GB/GBC cartridge into GBA.

  5. There is no version of VGBA for my Unix!
    I am trying to compile Unix binaries for as many flavors of Unix as possible, but as I do not have access to many machines, do not expect immediate support for every Unix flavor out there. Don't mail me asking for the source either: VGBA source code is not publicly distrbutable, as much as I regret to say this :(.

  6. My favorite game doesn't work on VGBA. What do I do?
    There may be several reasons why a game has problems running on VGBA or does not run at all.

  7. There is no sound!
    Since version 1.2, VGBA emulates both "melodic" (GameBoy-compatible) and "direct" (GBA-specific) sound hardware. When using VGBA-Windows, you will have to turn "Use MIDI for sound" option off to hear the direct sound channels, as MIDI cannot be used to play direct sound. Also make sure that direct sound channels are turned on in the Setup Panel.

  8. Direct sound sounds really bad!
    Use -ds command line option (or corresponding options in the VGBA-Windows Setup Panel) to choose the way VGBA renders direct sound. In Windows, you should also try changing volume, sound rate, and the number of sound buffers. If this doesn't help, you may be out of luck. Hopefully, sound emulation becomes better in the upcoming versions.

  9. Why is VGBA so slow on my machine?
    Because your machine is too slow to run VGBA. My experience shows that you need at least a PentiumII/400 machine with fast video to run VGBA at a reasonable speed. Following are the ways to speed things up:

  10. VGBA is too fast on my machine! How do I slow it down?
    Frankly, when I started writing VGBA, I never expected that it will be too fast on any machine :). But times change...

  11. When starting VGBA-Unix, ld says that some library isn't found.
    This may happen if the versions of your shared libraries are older than the ones for which VGBA has been compiled. A decent way to deal with this is to upgrade your Unix. A quick and dirty way is to make a symbolic link from the existing library to a name required by VGBA.

  12. When starting VGBA-Unix, I get X_ShmAttach error.
    You are probably trying to run VGBA-Unix on a remote Xterminal while it attempts to use shared memory for interfacing with X. Use -noshm option to tell it not to use shared memory.

  13. When starting VGBA-Unix, I get X_PutImage error.
    VGBA-Unix version currently needs 16bit X. Xterminals that do not support 16bit image format will not work.

  14. The sound is distorted in the VGBA-Windows. How do I fix it?
    The wave-synthetized sound in VGBA may become distorted on slow or highly loaded machines (no graphics acceleration, for example). There are several ways you can improve sound:

  15. Does VGBA-Windows support joystick? My joystick doesn't work!
    VGBA-Windows supports joystick. If your joystick does not work, go into Windows Control Panel to see if it is configured and calibrated properly. Also, some new joysticks working in esoteric standards (like GRiP) are known to have problems.

  16. VGBA-Windows starts, but then quits immediately!
    Check the pathname to wherever your VGBA is located. It should not contain spaces. For example, "C:\Program Files\VGBA" is a bad place for VGBA, while "C:\VGBA" will work. This bug is caused by an old version of C compiler I am using. I hope to get rid of it when I switch to a new compiler.
    UPDATE: I have finally switched to a newer compiler in VGBA-Windows 1.7. If you are still encountering this problem, please, let me know.

  17. Colors are all screwed up in VGBA-Windows!
    VGBA-Windows requires Windows to be in 65536-color or better color mode. When running Windows in 256-color mode, it will try to approximate colors to existing ones, but expect results to be dismal.

  18. Black window in VGBA-Windows!
    If you are running Windows in 256-color mode, then this is most likely the cause of a problem. Try switching Windows into 65536-color or better screen mode.

  19. Command line options don't work in VGBA-Windows!
    They shouldn't. The demo version of VGBA-Windows supports no command line interface at all. The full version will only accept the .GBA file name at the command line, but no options. All configuration is done via Setup Panel and VGBA.INI file.

  20. Volume control works strangely in VGBA-Windows!
    It is a result of the volume control being shared between VGBA and other Windows applications. You can usually restore normal volume by leaving VGBA window and then activating it again.

  21. How do I save and load the GBA state during the game?
    The GBA state can be saved by pressing [F7] button. The resulting data file will have the same name as your .GBA file, but its extension is going to be .STA. You can load state from this file by pressing [F8] at any point in the game. This state file will also be loaded automatically next time you start VGBA. The same state file is not guaranteed to work for versions of VGBA running on a different hardware. State saving is not perfect yet, so for some games state may not be correctly saved.

Notes to Demo Authors

This version of VGBA no longer simulates bugs of the previous emulators (such as GBAEmu written by Tim Schuerewegen). This means that many demos that made use of those bugs will not work on VGBA. But then, they would not work on the real GBA hardware either. Following is a list of problems that I've found. If you are a demo author, please, check your demos for these problems and fix them:

Thanks

I would like to thank people from the EFNet #GBADEV IRC channel for their help locating GBA specifications and testing the emulator.
© Copyright by Marat Fayzullin (fms [AT] cs /DOT/ umd <DOT> edu)