📄 main.c
字号:
// 头文件
// 载入Gslib for GBA 库
#include <GsGBA.h>
void VBLserver(); // 主程序框架(1/60秒)
void SendOK();
u16 i,j;
#define SCCNT_L (u16 *) 0x04000128
#define SCCNT_H (u16 *) 0x0400012a
#define RCNT (u16 *) 0x04000134
#define IME (u16 *) 0x04000208
#define IE (u16 *) 0x04000200
// 中断向量表
const IntrFuncp IntrTable[14] =
{
VBLserver, // V Blank interrupt
dummy, // H Blank interrupt
dummy, // V Counter interrupt
dummy, // Timer 0 interrupt
dummy, // Timer 1 interrupt
dummy, // Timer 2 interrupt
dummy, // Timer 3 interrupt
SendOK, // Serial communication interrupt
dummy, // DMA 0 interrupt
dummy, // DMA 1 interrupt
dummy, // DMA 2 interrupt
dummy, // DMA 3 interrupt
dummy, // Key interrupt
dummy, // Cassette interrupt
};
// 主函数
int AgbMain()
{
// 设置BG模式为4
GsSetMode(MODE_4 |DISP_OBJ_CHAR_2D_MAP);
BGPaletteMem[1]=0xffff;
// 通讯初始化
*RCNT=0x8000; //0100 0000 1010 0000
*SCCNT_L=0x0000; //0111 1100 1000 0011
while(1)
{
KeyRead();
if (Trg & A_BUTTON)
{
// UART通讯初始化
*RCNT=0x0000; //0000 0000 0000 0000
*SCCNT_L=0x7ca3; //0111 1100 1010 0011
// 允许相关中断请求
GsOpenIRQ();
*IE=0x0081; //0000 0000 1000 0001
}
}
return 0;
}
void VBLserver()
{
// 数据限幅
if (i==256) i=0;
// 发送数据
*SCCNT_H=(*SCCNT_H & 0xff00)+i;
// 观察是否进入中断
i++;
if (i%2) GsTextOut(140,60,"A",1);
else GsTextOut(140,60,"B",1);
// 显示寄存器位状态
j=*SCCNT_L;
if (j&0x8000) GsTextOut(10,20,"1",1);
else GsTextOut(10,20,"0",1);
if (j&0x4000) GsTextOut(20,20,"1",1);
else GsTextOut(20,20,"0",1);
if (j&0x2000) GsTextOut(30,20,"1",1);
else GsTextOut(30,20,"0",1);
if (j&0x1000) GsTextOut(40,20,"1",1);
else GsTextOut(40,20,"0",1);
if (j&0x0800) GsTextOut(50,20,"1",1);
else GsTextOut(50,20,"0",1);
if (j&0x0400) GsTextOut(60,20,"1",1);
else GsTextOut(60,20,"0",1);
if (j&0x0200) GsTextOut(70,20,"1",1);
else GsTextOut(70,20,"0",1);
if (j&0x0100) GsTextOut(80,20,"1",1);
else GsTextOut(80,20,"0",1);
if (j&0x0080) GsTextOut(90,20,"1",1);
else GsTextOut(90,20,"0",1);
if (j&0x0040) GsTextOut(100,20,"1",1);
else GsTextOut(100,20,"0",1);
if (j&0x0020) GsTextOut(110,20,"1",1);
else GsTextOut(110,20,"0",1);
if (j&0x0010) GsTextOut(120,20,"1",1);
else GsTextOut(120,20,"0",1);
if (j&0x0008) GsTextOut(130,20,"1",1);
else GsTextOut(130,20,"0",1);
if (j&0x0004) GsTextOut(140,20,"1",1);
else GsTextOut(140,20,"0",1);
if (j&0x0002) GsTextOut(150,20,"1",1);
else GsTextOut(150,20,"0",1);
if (j&0x0001) GsTextOut(160,20,"1",1);
else GsTextOut(160,20,"0",1);
GsWaitSync();
GsFlip();
}
void SendOK()
{
// 观察是否进入中断
if (i%2) GsTextOut(20,60,"1",1);
else GsTextOut(20,60,"2",1);
GsWaitSync();
GsFlip();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -