📄 gba.h
字号:
/*****************************\
* gba.h
* Original by eloist
* Modified by staringmonkey
* Modified by Uze
* Last modified on 29/11/2001
\*****************************/
//////////////////////////////////////////////////////////////////////////////
// GBA.h //
//////////////////////////////////////////////////////////////////////////////
#ifndef _GBA_H
#define _GBA_H
//#ifdef __cplusplus
//extern "C" {
//#endif
/////////////Type Definitions/////////////
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
typedef volatile unsigned char vu8;
typedef volatile unsigned short vu16;
typedef volatile unsigned long vu32;
typedef const unsigned char const_u8;
typedef const unsigned short const_u16;
typedef const unsigned long const_u32;
typedef signed char s8;
typedef signed short s16;
typedef signed long s32;
typedef unsigned char byte;
typedef unsigned short hword;
typedef unsigned long word;
typedef void (*fp)(void); //this is the definition you will find in gba.h. It is just delaring fp to represent a pointer to a function
/////////////////Bits////////////////
#define BIT00 1
#define BIT01 2
#define BIT02 4
#define BIT03 8
#define BIT04 16
#define BIT05 32
#define BIT06 64
#define BIT07 128
#define BIT08 256
#define BIT09 512
#define BIT10 1024
#define BIT11 2048
#define BIT12 4096
#define BIT13 8192
#define BIT14 16384
#define BIT15 32768
///////////////Joystick Keys/////////////////////////////
#define BUTTON_A 0x0001 // A Button
#define BUTTON_B 0x0002 // B Button
#define BUTTON_SELECT 0x0004 // select button
#define BUTTON_START 0x0008 // START button
#define KEYPAD_RIGHT 0x0010 // Right key
#define KEYPAD_LEFT 0x0020 // Left key
#define KEYPAD_UP 0x0040 // Up key
#define KEYPAD_DOWN 0x0080 // Down key
#define BUTTON_RIGHT 0x0100 // R shoulder Button
#define BUTTON_LEFT 0x0200 // L shoulder Button
#define TMR_PRESCALER_1CK 0x0000 // Prescaler 1 Clock
#define TMR_PRESCALER_64CK 0x0001 // 64 clocks
#define TMR_PRESCALER_256CK 0x0002 // 256 clocks
#define TMR_PRESCALER_1024CK 0x0003 // 1024 clocks
#define TMR_IF_ENABLE 0x0040 // Interrupt Request Enable
#define TMR_ENABLE 0x0080 // Run Timer
///////////////Interrupts/////////////////////////////
#define INT_VBLANK 0x0001
#define INT_HBLANK 0x0002
#define INT_VCOUNT 0x0004 //you can set the display to generate an interrupt when it reaches a particular line on the screen
#define INT_TIMER0 0x0008
#define INT_TIMER1 0x0010
#define INT_TIMER2 0x0020
#define INT_TIMER3 0x0040
#define INT_COMUNICATION 0x0080 //serial communication interupt
#define INT_DMA0 0x0100
#define INT_DMA1 0x0200
#define INT_DMA2 0x0400
#define INT_DMA3 0x0800
#define INT_KEYBOARD 0x1000
#define INT_CART 0x2000 //the cart can actually generate an interupt
#define INT_ALL 0x4000 //this is just a flag we can set to allow the my function to enable or disable all interrupts. Doesn't actually correspond to a bit in REG_IE
////////////////sound channels/////////////
#define SOUNDINIT 0x8000 // makes the sound restart
#define SOUNDDUTY87 0x0000 //87.5% wave duty
#define SOUNDDUTY75 0x0040 //75% wave duty
#define SOUNDDUTY50 0x0080 //50% wave duty
#define SOUNDDUTY25 0x00C0 //25% wave duty
#define SOUND1PLAYONCE 0x4000 // play sound once
#define SOUND1PLAYLOOP 0x0000 // play sound looped
#define SOUND1INIT 0x8000 // makes the sound restart
#define SOUND1SWEEPSHIFTS(n) n // number of sweep shifts (0-7)
#define SOUND1SWEEPINC 0x0000 // sweep add (freq increase)
#define SOUND1SWEEPDEC 0x0008 // sweep dec (freq decrese)
#define SOUND1SWEEPTIME(n) (n<<4) // time of sweep (0-7)
#define SOUND1ENVSTEPS(n) (n<<8) // envelope steps (0-7)
#define SOUND1ENVINC 0x0800 // envellope increase
#define SOUND1ENVDEC 0x0000 // envellope decrease
#define SOUND1ENVINIT(n) (n<<12) // initial envelope volume (0-15)
#define SOUND2PLAYONCE 0x4000 // play sound once
#define SOUND2PLAYLOOP 0x0000 // play sound looped
#define SOUND2INIT 0x8000 // makes the sound restart
#define SOUND2ENVSTEPS(n) (n<<8) // envelope steps (0-7)
#define SOUND2ENVINC 0x0800 // envellope increase
#define SOUND2ENVDEC 0x0000 // envellope decrease
#define SOUND2ENVINIT(n) (n<<12) // initial envelope volume (0-15)
#define SOUND3BANK32 0x0000 // Use two banks of 32 steps each
#define SOUND3BANK64 0x0020 // Use one bank of 64 steps
#define SOUND3SETBANK0 0x0000 // Bank to play 0 or 1 (non set bank is written to)
#define SOUND3SETBANK1 0x0040
#define SOUND3PLAY 0x0080 // Output sound
#define SOUND3OUTPUT0 0x0000 // Mute output
#define SOUND3OUTPUT1 0x2000 // Output unmodified
#define SOUND3OUTPUT12 0x4000 // Output 1/2
#define SOUND3OUTPUT14 0x6000 // Output 1/4
#define SOUND3OUTPUT34 0x8000 // Output 3/4
#define SOUND3PLAYONCE 0x4000 // Play sound once
#define SOUND3PLAYLOOP 0x0000 // Play sound looped
#define SOUND3INIT 0x8000 // Makes the sound restart
#define SOUND4PLAYONCE 0x4000 // play sound once
#define SOUND4PLAYLOOP 0x0000 // play sound looped
#define SOUND4INIT 0x8000 // makes the sound restart
#define SOUND4ENVSTEPS(n) (n<<8) // envelope steps (0-7)
#define SOUND4ENVINC 0x0800 // envellope increase
#define SOUND4ENVDEC 0x0000 // envellope decrease
#define SOUND4ENVINIT(n) (n<<12) // initial envelope volume (0-15)
#define SOUND4STEPS7 0x0004
#define SOUND4STEPS15 0x0000
#define SOUND4PLAYONCE 0x4000
#define SOUND4PLAYLOOP 0x0000
#define SOUND4INIT 0x8000
/////////////////Registers/////////////////
#define REG_INTERUPT *(u32*)0x3007FFC //Interrupt Register
#define REG_DISPCNT *(u32*)0x4000000 //Display Control (Mode)
#define REG_DISPCNT_L *(u16*)0x4000000 //???
#define REG_DISPCNT_H *(u16*)0x4000002 //???
#define REG_DISPSTAT *(u16*)0x4000004 //???
#define REG_VCOUNT *(vu16*)0x4000006 //Vertical Control (Sync)
#define REG_BG0CNT *(u16*)0x4000008 //Background 0
#define REG_BG1CNT *(u16*)0x400000A //Background 1
#define REG_BG2CNT *(u16*)0x400000C //Background 2
#define REG_BG3CNT *(u16*)0x400000E //Background 3
#define REG_BG0HOFS *(u16*)0x4000010 //Background 0 Horizontal Offset
#define REG_BG0VOFS *(u16*)0x4000012 //Background 0 Vertical Offset
#define REG_BG1HOFS *(u16*)0x4000014 //Background 1 Horizontal Offset
#define REG_BG1VOFS *(u16*)0x4000016 //Background 1 Vertical Offset
#define REG_BG2HOFS *(u16*)0x4000018 //Background 2 Horizontal Offset
#define REG_BG2VOFS *(u16*)0x400001A //Background 2 Vertical Offset
#define REG_BG3HOFS *(u16*)0x400001C //Background 3 Horizontal Offset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -