浅谈NDS下GBA卡带烧录代码-1.基础的写入、读取代码

本文介绍了如何利用nds烧录卡对GBA卡带进行读写操作,探讨了GBA卡带内存映射及norflash的擦除、编程功能。通过libnds库提供的基础读写函数,分析了两种不同代码形式的差异,并以CFI读取和AMD系列norflash解锁为例,展示了地址偏移对实际操作的影响。后续将继续分享更多相关知识。
摘要由CSDN通过智能技术生成

早期的nds和后来的ndsl具有读取GBA卡带的功能,通过nds烧录卡启动一些nds自制软件可以完成对一些gba卡带的烧录功能,从而实现游戏更换。

gba卡带游戏内容映射起点在0x8000000,记录文件映射起点在0xa000000,游戏卡带基本采用了norflash,读取起点位置并解锁指令之后,可以实现对卡带的擦除,编程等功能。

devkitPro种的libnds自带了nds对gba卡带读取和写入的代码:

#define GBAROM        ((u16*)0x08000000)  和 #define GBA_BUS       ((vu16 *)(0x08000000))

对应的读取和写入函数代码:

u16 read(u32 address){  return GBAROM[address];}

void write(u32 address, u16 byte){ GBA_BUS[address] = byte;asm("nop");}

使用libnds种函数写入和读取的好处是,可以直接对应地址,不需要偏移,也可以采用下面这种代码函数:

vu16 read(u32 addr){return *(vu16*)(addr|0x8000000);}

volatile void write(u32 addr, u16 data){ *(vu16 *)(addr|0x8000000) = data; asm("nop");}

但采用这种之后,卡带的地址和cpu地址的对位情况需要地址向左偏移1位,<<1。

如果但从代码上看,上面两种代码应是相同才对,但实际编译使用过程种,就能够发现编译之后他们之间的确实存在了明显的差异。

由于这两种代码是刷写GBA卡带的基础函数&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值