File: gba.inc - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

@@@@@@@@@ KEY PAD DEFINES @@@@@@@@@
KEY_A       = 1
KEY_B       = 2
KEY_SELECT  = 4
KEY_START   = 8
KEY_RIGHT   = 16
KEY_LEFT    = 32
KEY_UP      = 64
KEY_DOWN    = 128
KEY_R       = 256
KEY_L       = 512
KEYS        = 0x04000130
KEYS_HIGH   = 0x04000000
KEYS_LOW    = 0x00000130

@@@@@@@@@ Display @@@@@@@@@
MODE_0 = 0x00
MODE_1 = 0x01
MODE_2 = 0x02
MODE_3 = 0x03
MODE_4 = 0x04
MODE_5 = 0x05

BACKBUFFER = 0x010
H_BLANK_OAM = 0x020

OBJ_MAP_2D = 0x000
OBJ_MAP_1D = 0x040

FORCE_BLANK = 0x080

BG0_ENABLE = 0x0100
BG1_ENABLE = 0x0200
BG2_ENABLE = 0x0400
BG3_ENABLE = 0x0800
OBJ_ENABLE = 0x01000        @ = SPRITES_ENABLE: enable sprites
WIN1_ENABLE = 0x02000
WIN2_ENABLE = 0x04000
WINOBJ_ENABLE = 0x08000
VRAM = 0x06000000
VPAL = 0x05000000
REG_DISPCNT = 0x04000000    @

@@@@@@@@@ SPRITES @@@@@@@@@

@*** Attribute 0 ***
@ F E D C  B A 9 8  7 6 5 4  3 2 1 0
@ S S A M  T T D R  J J J J  J J J J
@ 0-7   (J) = Y coordinate of the sprite (pixels)
@ 8     (R) = Rotation/Scaling on/off
@ 9     (D) = 0 - sprite is single sized;
@             1 - sprite is virtually double sized
@ A-B   (T) = 00 - normal
@             01 - semi-transparent
@             10 - obj window
@ C     (M) = enables mosaic for this sprite.
@ D     (A) = 256 color if on, 16 color if off
@ E-F   (S) = Size, MSB in attribute 0, LSB in attribute 1

@ Byte 1 = Y coordinate of the sprite, in pixels
@ Byte 2
ROTATION_FLAG   =  0x100
SIZE_DOUBLE     =  0x200
MODE_NORMAL     =  0x000
MODE_TRANSPERANT=  0x400
MODE_WINDOWED   =  0x800
MOSAIC          = 0x1000
COLOR_16        = 0x0000
COLOR_256       = 0x2000
SIZE_8          = 0x0000 @ Only valid for SQUARE
SIZE_16         = 0x4000
SIZE_32         = 0x8000
SIZE_64         = 0xC000

@*** Atribute 1 ***
@ FEDC BA98 7654 3210
@ SSVH XXXI IIII IIII   (standard sprites)
@ SSFF FFFI IIII IIII   (rotation/scaling on)
@ 0-8 (I) = X coordinate of the sprite (pixels)
@ C   (H) = flip horizinal bit
@ D   (V) = flip vertical bit
@ 9-D (F) = rotation index (0-31). rotation/scaling data in OAM attribute 3
@ E-F (S) = Size of the sprite (LSB)
@           4-bit value which sets the size of the sprite in the following way:
@           00 00: 8  x 8       10 00: 8  x 16
@           00 01: 16 x 16      10 01: 8  x 32
@           00 10: 32 x 32      10 10: 16 x 32
@           00 11: 64 x 64      10 11: 32 x 64
@           01 00: 16 x 8       11 00: Not used
@           01 01: 32 x 8       11 01: Not used
@           01 10: 32 x 16      11 10: Not used
@           01 11: 64 x 32      11 11: Not used

@ Byte 3+1 bit = X coordinate of the sprite, in pixels (9-bit value)
@ Byte 4
SQUARE          = 0x0000
WIDE            = 0x4000
TALL            = 0x8000
HORIZONTAL_FLIP = 0x1000
VERTICAL_FLIP   = 0x2000
OAM             = 0x07000000
OBJPAL          = 0x5000200
CHARMEM         = 0x6010000
CHARMEM_MODE3   = 0x6012BFD

@@@@@@@@@ Background @@@@@@@@@

REG_BG0CNT  = 0x4000008
REG_BG1CNT  = 0x400000A
REG_BG2CNT  = 0x400000C
REG_BG3CNT  = 0x400000E
REG_BG0HOFS = 0x4000010
REG_BG0VOFS = 0x4000012
REG_BG1HOFS = 0x4000014
REG_BG1VOFS = 0x4000016
REG_BG2HOFS = 0x4000018
REG_BG2VOFS = 0x400001A
REG_BG3HOFS = 0x400001C
REG_BG3VOFS = 0x400001E
REG_BG2PA   = 0x4000020
REG_BG2PB   = 0x4000022
REG_BG2PC   = 0x4000024
REG_BG2PD   = 0x4000026
REG_BG2X    = 0x4000028
REG_BG2X_L  = 0x4000028
REG_BG2X_H  = 0x400002A
REG_BG2Y    = 0x400002C
REG_BG2Y_L  = 0x400002C
REG_BG2Y_H  = 0x400002E
REG_BG3PA   = 0x4000030
REG_BG3PB   = 0x4000032
REG_BG3PC   = 0x4000034
REG_BG3PD   = 0x4000036
REG_BG3X    = 0x4000038
REG_BG3X_L  = 0x4000038
REG_BG3X_H  = 0x400003A
REG_BG3Y    = 0x400003C
REG_BG3Y_L  = 0x400003C
REG_BG3Y_H  = 0x400003E

BG_MOSAIC_ENABLE = 0x40
BG_COLOR_256 = 0x80
BG_COLOR_16 = 0x0

TEXTBG_SIZE_256x256 = 0x0
TEXTBG_SIZE_256x512 = 0x8000
TEXTBG_SIZE_512x256 = 0x4000
TEXTBG_SIZE_512x512 = 0xC000

ROTBG_SIZE_128x128 = 0x0
ROTBG_SIZE_256x256 = 0x4000
ROTBG_SIZE_512x512 = 0x8000
ROTBG_SIZE_1024x1024 = 0xC000

WRAPAROUND = 0x2000

CHAR_SHIFT = 2 @ Used to shift the number over to the right place in REG_BGxCNT
SCREEN_SHIFT = 8

@ Defines for all 32 screen (map data) blocks and 4 character (bitmap data) blocks
@ Some of this might not be correct
CHAR_BLOCK_0 = 0x6000000
CHAR_BLOCK_1 = 0x6004000
CHAR_BLOCK_2 = 0x6008000
CHAR_BLOCK_3 = 0x600C000
SCREEN_BLOCK_0 = 0x6000000
SCREEN_BLOCK_1 = 0x6000800
SCREEN_BLOCK_2 = 0x6001000
SCREEN_BLOCK_3 = 0x6001800
SCREEN_BLOCK_4 = 0x6002000
SCREEN_BLOCK_5 = 0x6002800
SCREEN_BLOCK_6 = 0x6003000
SCREEN_BLOCK_7 = 0x6003800
SCREEN_BLOCK_8 = 0x6004000
SCREEN_BLOCK_9 = 0x6004800
SCREEN_BLOCK_10 = 0x6005000
SCREEN_BLOCK_11 = 0x6005800
SCREEN_BLOCK_12 = 0x6006000
SCREEN_BLOCK_13 = 0x6006800
SCREEN_BLOCK_14 = 0x6007000
SCREEN_BLOCK_15 = 0x6007800
SCREEN_BLOCK_16 = 0x6008000
SCREEN_BLOCK_17 = 0x6008800
SCREEN_BLOCK_18 = 0x6009000
SCREEN_BLOCK_19 = 0x6009800
SCREEN_BLOCK_20 = 0x600A000
SCREEN_BLOCK_21 = 0x600A800
SCREEN_BLOCK_22 = 0x600B000
SCREEN_BLOCK_23 = 0x600B800
SCREEN_BLOCK_24 = 0x600C000
SCREEN_BLOCK_25 = 0x600C800
SCREEN_BLOCK_26 = 0x600D000
SCREEN_BLOCK_27 = 0x600D800
SCREEN_BLOCK_28 = 0x600E000
SCREEN_BLOCK_29 = 0x600E800
SCREEN_BLOCK_30 = 0x600F000
SCREEN_BLOCK_31 = 0x600F800

@@@@@@@@@ Sound @@@@@@@@@
@ To turn sound on:
@   ldr r1,=REG_SOUNDCNT_X
@   ldr r0,=0x0081
@   str r0,[r1]

REG_SOUND1CNT_L = 0x04000060 @ Sound 1 Sweep control
REG_SOUND1CNT_H = 0x04000062 @ Sound 1 Length, wave duty and envelope control
REG_SOUND1CNT_X = 0x04000064 @ Sound 1 Frequency, reset and loop control
REG_SOUND2CNT_L = 0x04000068 @ Sound 2 Length, wave duty and envelope control
REG_SOUND2CNT_H = 0x0400006C @ Sound 2 Frequency, reset and loop control
REG_SOUND3CNT_L = 0x04000070 @ Sound 3 Enable and wave ram bank control
REG_SOUND3CNT_H = 0x04000072 @ Sound 3 Sound Length and output level control
REG_SOUND3CNT_X = 0x04000074 @ Sound 3 Frequency, reset and loop control
REG_SOUND4CNT_L = 0x04000078 @ Sound 4 Length, output level and envelope control
REG_SOUND4CNT_H = 0x0400007C @ Sound 4 Noise parameters, reset and loop control
REG_SOUNDCNT_L  = 0x04000080 @ Sound 1-4 Output level and Stereo control
REG_SOUNDCNT_H  = 0x04000082 @ Direct Sound control and Sound 1-4 output ratio
REG_SOUNDCNT_X  = 0x04000084 @ Master sound enable and Sound 1-4 play status
REG_SOUNDBIAS   = 0x04000088 @ Sound bias and Amplitude resolution control
REG_WAVE_RAM0_L = 0x04000090 @ Sound 3 samples 0-3
REG_WAVE_RAM0_H = 0x04000092 @ Sound 3 samples 4-7
REG_WAVE_RAM1_L = 0x04000094 @ Sound 3 samples 8-11
REG_WAVE_RAM1_H = 0x04000096 @ Sound 3 samples 12-15
REG_WAVE_RAM2_L = 0x04000098 @ Sound 3 samples 16-19
REG_WAVE_RAM2_H = 0x0400009A @ Sound 3 samples 20-23
REG_WAVE_RAM3_L = 0x0400009C @ Sound 3 samples 23-27
REG_WAVE_RAM3_H = 0x0400009E @ Sound 3 samples 28-31
REG_FIFO_A_L    = 0x040000A0 @ Direct Sound channel A samples 0-1
REG_FIFO_A_H    = 0x040000A2 @ Direct Sound channel A samples 2-3
REG_FIFO_B_L    = 0x040000A4 @ Direct Sound channel B samples 0-1
REG_FIFO_B_H    = 0x040000A6 @ Direct Sound channel B samples 2-3