本节修改自教程8 在原来的教程8里我们使用的是16点阵的汉字库,但在实际应用中大家都知道,GBA大多使用12点阵的字库,因为12点阵字库与16点阵字库有点重要差别,这里做一个补完版^_^ HZK12的字模存储格式为(行X列): 12x16 ,这就是与HZK16不同的地方。每个字模占用24个字节,偏移地址的计算公式同HZK16。 所以,我们要做两个工作: 1.把HZK2GBA里的偏移量修改为: offset = (94l*(qu-1)+(wei-1))*24l; 2.修改画单字符点阵的循环: for(i=0;i<12;i++) for(j=0;j<2;j++) for(k=0;k<8;k++) if(convert(ZKDATA[n*24+i*2+j],7-k)) DrawPixel(x+j*8+k,y+i,r,g,b); OK,完毕。ASCII的点阵还是没写,大家就先用全角的E文吧:P 本节源程序 修改自 教程8 GBABOOK 本节主要内容是DMA3传输函数和GBA时钟函数的使用。 1.GBA的DMA的通道有4个: DMA 0 用于内部数据传输; DMA 1、2 用 Direct sound 数据传输; DMA 3 用于传输任何数据; 我们这里只用到DMA3将ROM里图片数据传输到显示内存,而不象以前那样经过CPU处理,因此速度很快——MODE5下可以轻松达到30FPS上,让我们的流畅显示图片序列。 void DMA_Copy(u8 channel, void* source, void* dest, u32 WordCount, u32 mode) channel参数是通道,source是源数据地址,dest是目的数据地址,WordCount是传输的数据字数(注意!是字,两个字节),mode是传输模式是16/32位; 2.GBA CPU 主频是16.78 MHZ (59.595 ns),这里我们使用1024时钟周期(61.025 ms)做计时单位,也就是说当运行了16386(1s/61.025ms)个计时单位就是1s。 本节的工具/程序使用方法: 1.用超级解霸生成电影片段的序列BMP; 2.用图像工具XNview( 1.5M) 2.用book2gba生成gbabook.h,如果片段时间较长(比如5s),book2gba的延时可以视情况设置长一点,一般在5s左右,注意book2gba.exe、t2g.exe、freeimage.dll要与图片在同一目录; 3.拷贝gbabook.h到源程序的gfx目录里,用ARM SDT/GCC编译就行了。 注意:使用GCC编译时,gbabook.h会有容量限制,大概是5M以上就无法编译,而且速度很慢;建议使用ARM SDT!冒险上传ARM SDT及xx,(25.5M),需要的兄弟赶紧下载,会很快删除的:( 因为图片未经过压缩,生成的ROM容量很大,大概1M/s,基本上没有什么实用价值了-_-;不过,可以来骗骗人,比如,可以用我转换的例子可以发一篇新闻,标题为“PS2 大作《真·三国无双》强力移植GBA”…… 本节源程序( 2.4M),带60张序列图片,容量稍大,见谅。 只想看DEMO的可以下载 1.3M 附:按左右键可控制播放。 本节使用directsound lib来播放wav,不过要注意的是:wav文件{zh0}是8bit/单声道的,大家可以用Awave Studio()的另存功能来完成转换工作。 接下来我们使用wav2gbac()来把.wav文件转换成.c文件,供程序中使用,"wav2gbac sound.wav"即可,得到一个sound.c文件。 在程序中使用方法很简单 "PlaySound(SOUND_DATA, SOUND_SAMPRATE); " SOUND就是你的wav文件名。记得加一个"while(!0);"以播放所有wav数据。 本节源程序 |