@@@@@@@@@ CONTENTS @@@@@@@@@ @ 1. Key pad defines @ 2. Display @ 3. Sprites @ 4. Background @ 5. Sound @@@@@@@@@ 1. 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 @@@@@@@@@ 2. 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 @ @@@@@@@@@ 3. 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 @@@@@@@@@ 4. 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 @@@@@@@@@ 5. 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