几个模拟器与真机运行差异的问题



niubo_
2009-04-04 21:46:28

一直以来做DS程序都是在DeSmuMe这个模拟器上调试,没想到偶尔用了一下No
1. 之前在讲位图背景时提到帧缓冲,我发现在设置显示模式之后,不用设置VRAM映射直接往显存中写数据就能在DeSmuMe上正常运行,但是在No
2. BG_GFX是背景显存的首地址0x6000000,宏定义把它强制转换成了16位无符号整型指针,可以通过这个指针向背景显存写入数据。这在用帧缓冲或者16位背景的时候没问题,但是用256色位图背景时,你想修改某个点的颜色,很明显会想到要这样写:*((u8 *)BG_GFX + offset) = 1;在DeSmuMe上没问题,但No
3. 这个和上面的问题应该一样。我写了两个函数,分别把256色背景显存中的数据保存到一个数组中和从数组中把图像写回到256色背景显存。No


niubo_
2009-04-05 07:07:23

根据昨天的想法,写了一个对256色位图背景的显存作单个像素进行操作的算法,下面是示例源码:
[code=c]#include
int main(void)
{

videoSetMode(MODE_5_2D);
vramSetBankA(VRAM_A_MAIN_BG);
BG_PALETTE[1] = ARGB16(1, 31, 31, 31);

bgInit(3, BgType_Bmp8, BgSize_B8_256x256, 0,0);

u16 offset = (16*SCREEN_WIDTH + 16)/2;
u8 isHighByte = 16 % 2;
u16 mask = 0xff;
BG_GFX[offset] = isHighByte ? (BG_GFX[offset]&mask) | (1 << 8) : (BG_GFX[offset] & ~mask) | 1;

offset = (18*SCREEN_WIDTH + 17)/2;
isHighByte = 17 % 2;
BG_GFX[offset] = isHighByte ? (BG_GFX[offset]&mask) | (1 << 8) : (BG_GFX[offset] & ~mask) | 1;

while(1)swiWaitForVBlank();

return 0;
}[/code]

[[i] 本帖最后由 niubo_ 于 2009-4-5 10:06 编辑 [/i]]


whm3d
2009-04-05 12:06:36

我很无聊!

[[i] 本帖最后由 niubo_ 于 2009-4-5 12:08 编辑 [/i]]


chrisliu
2009-04-28 14:48:22

以前修改PAFS遇到的一个问题:
如果写入指针指向rom的话, 在模拟器上是可以成功写入并读出的, 因为对模拟器来说都是PC的内存操作。 但是在真机上就不行了。