-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgba.h
More file actions
132 lines (118 loc) · 6.37 KB
/
gba.h
File metadata and controls
132 lines (118 loc) · 6.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// 3DSage GBA template header file
#include <stdint.h>
#define CHANGE_CAP 3
#define TERRAIN_SIZE 600
#define ORE_SIZE 432
#define BIOME_SIZE 69
#define BIOME_CHUNKS 3
#define CHUNK_SIZE 1204 // ... i made the chunk array 8 bits but still saved it as 16 bits which broke things again...
#define UNDERGROUND 14
//---rename unsigned byte short and long---
typedef uint8_t u8;
typedef unsigned short u16;
typedef unsigned long u32;
//---Video buffer---
u16 *VRAM;
#define VRAM_F (u16*)0x6000000
#define VRAM_B (u16*)0x600A000
#define DISPCNT *(u32*)0x4000000
#define BACKB 0x10
volatile u16* Scanline=(volatile u16*)0x4000006;
//---Scale mode 5 screen---
#define REG_BG2PA *(volatile unsigned short *)0x4000020
#define REG_BG2PD *(volatile unsigned short *)0x4000026
//---Buttons---
#define KEY_STATE (*(volatile u16*)0x4000130)
#define KEY_A !(KEY_STATE & 1)
#define KEY_B !(KEY_STATE & 2)
#define KEY_SL !(KEY_STATE & 4)
#define KEY_ST !(KEY_STATE & 8)
#define KEY_R !(KEY_STATE & 16)
#define KEY_L !(KEY_STATE & 32)
#define KEY_U !(KEY_STATE & 64)
#define KEY_D !(KEY_STATE & 128)
#define KEY_RS !(KEY_STATE & 256)
#define KEY_LS !(KEY_STATE & 512)
//---Timer for FPS---
#define REG_TM2D *(volatile u16*)0x4000108
//--Fast Iwram and Ewram
#define IN_IWRAM __attribute__ ((section (".iwram")))
#define IN_EWRAM __attribute__ ((section (".ewram")))
//--Game Pak SRAM Persistent Memory
#define GAMEPAK_RAM ((u8*)0x0E000000)
u8 *saveMemory = GAMEPAK_RAM;
#define REG_SOUNDCNT_X *(volatile u16*)0x4000084 //Extended sound control
#define REG_SOUNDCNT_L *(volatile u16*)0x4000080 //DMG sound control
#define REG_SOUNDCNT_H *(volatile u16*)0x4000082 //Direct sound control
#define REG_SOUND3CNT_L *(volatile u16*)0x4000070
#define SOUND3BANK32 0x0000 //Use two banks of 32 steps each
#define SOUND3SETBANK1 0x0040
#define REG_WAVE_RAM0 *(volatile u32*)0x4000090
#define REG_WAVE_RAM1 *(volatile u32*)0x4000094
#define REG_WAVE_RAM2 *(volatile u32*)0x4000098
#define REG_WAVE_RAM3 *(volatile u32*)0x400009C
#define SOUND3SETBANK0 0x0000 //Bank to play 0 or 1 (non set bank is written to)
#define SOUND3PLAY 0x0080 //Output sound
#define REG_SOUND3CNT_H *(volatile u16*)0x4000072
#define SOUND3OUTPUT1 0x2000 //Output unmodified
#define REG_SOUND3CNT_X *(volatile u16*)0x4000074
#define SOUND3INIT 0x8000 //Makes the sound restart
#define SOUND3PLAYONCE 0x4000 //Play sound once
void playNote( u16 frequency, unsigned char length ){
unsigned char adjustedLength = 0xFF - length;
REG_SOUNDCNT_X = 0x80;
REG_SOUNDCNT_L=0xFF77;
REG_SOUNDCNT_H = 2;
REG_SOUND3CNT_L = SOUND3BANK32 | SOUND3SETBANK1;
REG_WAVE_RAM0=0x10325476;
REG_WAVE_RAM1=0x98badcfe;
REG_WAVE_RAM2=0x10325476;
REG_WAVE_RAM3=0x98badcfe;
REG_SOUND3CNT_L = SOUND3BANK32 | SOUND3SETBANK0;
REG_SOUND3CNT_L |= SOUND3PLAY;
REG_SOUND3CNT_H = SOUND3OUTPUT1 | adjustedLength;
REG_SOUND3CNT_X=SOUND3INIT|SOUND3PLAYONCE| frequency ;
}
//example 458*sin(90) would be written as (458*LUT_Sin[90])>>8
const int LUT_Sin[] =
{
0,4,9,13,18,22,27,31,36,40,44,49,53,58,62,66,71,75,79,83,88,
92,96,100,104,108,112,116,120,124,128,132,136,139,143,147,150,154,158,161,165,
168,171,175,178,181,184,187,190,193,196,199,202,204,207,210,212,215,217,219,222,
224,226,228,230,232,234,236,237,239,241,242,243,245,246,247,248,249,250,251,252,
253,254,254,255,255,255,256,256,256,256,256,256,256,255,255,255,254,254,253,252,
251,250,249,248,247,246,245,243,242,241,239,237,236,234,232,230,228,226,224,222,
219,217,215,212,210,207,204,202,199,196,193,190,187,184,181,178,175,171,168,165,
161,158,154,150,147,143,139,136,132,128,124,120,116,112,108,104,100,96,92,88,
83,79,75,71,66,62,58,53,49,44,40,36,31,27,22,18,13,9,4,0,
-4,-9,-13,-18,-22,-27,-31,-36,-40,-44,-49,-53,-58,-62,-66,-71,-75,-79,-83,-88,
-92,-96,-100,-104,-108,-112,-116,-120,-124,-128,-132,-136,-139,-143,-147,-150,-154,-158,-161,-165,
-168,-171,-175,-178,-181,-184,-187,-190,-193,-196,-199,-202,-204,-207,-210,-212,-215,-217,-219,-222,
-224,-226,-228,-230,-232,-234,-236,-237,-239,-241,-242,-243,-245,-246,-247,-248,-249,-250,-251,-252,
-253,-254,-254,-255,-255,-255,-256,-256,-256,-256,-256,-256,-256,-255,-255,-255,-254,-254,-253,-252,
-251,-250,-249,-248,-247,-246,-245,-243,-242,-241,-239,-237,-236,-234,-232,-230,-228,-226,-224,-222,
-219,-217,-215,-212,-210,-207,-204,-202,-199,-196,-193,-190,-187,-184,-181,-178,-175,-171,-168,-165,
-161,-158,-154,-150,-147,-143,-139,-136,-132,-128,-124,-120,-116,-112,-108,-104,-100,-96,-92,-88,
-83,-79,-75,-71,-66,-62,-58,-53,-49,-44,-40,-36,-31,-27,-22,-18,-13,-9,-4,
};
const int LUT_Cos[] =
{
256,256,256,256,255,255,255,254,254,253,252,251,250,249,248,247,246,245,243,242,241,
239,237,236,234,232,230,228,226,224,222,219,217,215,212,210,207,204,202,199,196,
193,190,187,184,181,178,175,171,168,165,161,158,154,150,147,143,139,136,132,128,
124,120,116,112,108,104,100,96,92,88,83,79,75,71,66,62,58,53,49,44,
40,36,31,27,22,18,13,9,4,0,-4,-9,-13,-18,-22,-27,-31,-36,-40,-44,
-49,-53,-58,-62,-66,-71,-75,-79,-83,-88,-92,-96,-100,-104,-108,-112,-116,-120,-124,-128,
-132,-136,-139,-143,-147,-150,-154,-158,-161,-165,-168,-171,-175,-178,-181,-184,-187,-190,-193,-196,
-199,-202,-204,-207,-210,-212,-215,-217,-219,-222,-224,-226,-228,-230,-232,-234,-236,-237,-239,-241,
-242,-243,-245,-246,-247,-248,-249,-250,-251,-252,-253,-254,-254,-255,-255,-255,-256,-256,-256,-256,
-256,-256,-256,-255,-255,-255,-254,-254,-253,-252,-251,-250,-249,-248,-247,-246,-245,-243,-242,-241,
-239,-237,-236,-234,-232,-230,-228,-226,-224,-222,-219,-217,-215,-212,-210,-207,-204,-202,-199,-196,
-193,-190,-187,-184,-181,-178,-175,-171,-168,-165,-161,-158,-154,-150,-147,-143,-139,-136,-132,-128,
-124,-120,-116,-112,-108,-104,-100,-96,-92,-88,-83,-79,-75,-71,-66,-62,-58,-53,-49,-44,
-40,-36,-31,-27,-22,-18,-13,-9,-4,0,4,9,13,18,22,27,31,36,40,44,
49,53,58,62,66,71,75,79,83,88,92,96,100,104,108,112,116,120,124,128,
132,136,139,143,147,150,154,158,161,165,168,171,175,178,181,184,187,190,193,196,
199,202,204,207,210,212,215,217,219,222,224,226,228,230,232,234,236,237,239,241,
242,243,245,246,247,248,249,250,251,252,253,254,254,255,255,255,256,256,256,
};