fx-9860GSDK开发从入门到实践(1)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二节:9860 SDK 的图片结构
玩过 9860 的 Add-in 游戏吗?喜欢那绚丽的效果吗? 哈哈,我也写过几个 9860 游戏(February Tragedy 1、2)
想写游戏,很简单,只要了解一定的数据结构知识还有会画图就行了。我们先来了解 fx-9860 使用的图片结构……
众所周知,1 byte = 8 bit,而这个位(bit)是计算机能够处理的最小单位。于是,CASIO 这群懒人使用了把 1 bit 作为 1 pixel 的想法,就有了现在的图片结构。(在此我们做一个约 定,数字常量后面没有后缀的为十进制,后缀 h、o、b 分别为十六进制,八进制,二进制) 比如一个 8*8 的小图片:
化断电坏掉了…)
首先说明,本文不会对 C 语言语法进行讲解,对于 C 的语法与工程文件结构,请自行 查看有关书籍。
在此推荐几本书:
重点讲解 C 的书籍:
《K&R》既
《The C Programming Language》
清华大学出版社
《C 语言程序设计》
陈正冲 林瑞
《C 语言深度剖析》 《高质量 C/C++开发指南》
for (i=0;i<32;++i){ Bdisp_SetPoint_DD (0,i,1); Bdisp_SetPoint_VRAM (12,i,1); Bdisp_PutDisp_DD();

再运行一下,发现只有右边的线了(可怜的 DD 刚画出来就被清除了) 如果你觉得不保险,总想把东西画出来的话……使用带 DDVRAM 后缀的函数好了 好了,第一节到此结束。
Bdisp_SetPoint_DD (0,i,1); Bdisp_SetPoint_VRAM (12,i,1); } Sleep(1000); while(1){ GetKey(&key); }
return 1; }
#pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum){
推荐几个 IDE: Visual C++ 6.0 TC 2.0 以上版本 MinGW
(不是很推荐.net 版本的 VC++) (3.0 版本支持 C++) (GCC 的一个 Windows 替代品)
另外欢迎来我们 fxesms 论坛,这是一个计算器爱好者的交流地。
好了,如果你觉得 C 的基础打好了,那么跟我一起踏上征途吧!
我们写一个程序来看一下。
#include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) {
unsigned int key; int i; Bdisp_AllClr_DDVRAM(); for (i=0;i<32;++i){
第一章
什么叫做—— 显示(Bdisp)
首先你的手头应该有 CASIO fx-9860G SDK 与完整的说明文档(pdf)。里面应该有以下 文件:
C Standard Libraries.pdf C 语言的标准库(SDK 支持的) fx9860g_sdk_starters_guide.pdf 简单介绍 SDK fx-9860G Character Set.pdf 9860SDK 的特殊字符集,包括小字符 fx-9860G Key Code List.pdf 9860SDK 的按键宏 fx-9860G Libraries.pdf 9860SDK 的库函数 Installing_Add-in.pdf 介绍如何安装 Add-in SHC Manual.PDF 9860SDK 编译器(shc - C/C++与汇编) 我们目前只使用 fx-9860G Libraries 这一个参考手册
11111111 b = FF h 01000000 b = 40 h 00100000 b = 20 h 00010000 b = 10 h 00001000 b = 8 h 00000100 b = 4 h 00000010 b = 2 h 11111111 b = FF h
写成 9860 的格式就是: const unsigned char TEST_PIC[]={0xFF,0x40,0x20,0x10,0x8,0x4,0x2,0xFF};
然后每次调用 draw_picture 就行了~~
注意 kind、mod 取值的问题 IMB_WRITEMODIFY_NORMAL IMB_WRITEMODIFY_REVERSE IMB_WRITEMODIFY_MESH
= 1 正常绘制 = 2 反色绘制 = 3 网格绘制(像素间隔点绘制)பைடு நூலகம்
这个就跟位操作有关了,自己测试吧
入门部分
第一节:DD 与 VRAM 使用浏览工具打开 fx-9860G Libraries,可以看到目录,前面有长长的一串以“Bdisp_”
开头的函数。这些都是与绘图、显示有关的。这些函数望文生义,很容易推断用途。我们这 一节主要讨论这些函数名称的后缀——DD 与 VRAM
参看函数的说明,我们知道,DD(Display Driver)是显示驱动,VRAM 是显存。 这两者之间有什么关联呢???
IMB_WRITEKIND_OVER IMB_WRITEKIND_OR IMB_WRITEKIND_AND IMB_WRITEKIND_XOR
=1 =2 =3 =4
好了,其他的下一节再讲。
第三节:图形函数注解
图形的初级内容就到这里了,下面把 fxlib.h 提供的库函数都注解一下吧
Bdisp_AllClr_DD/ Bdisp_AllClr_VRAM/ Bdisp_AllClr_DDVRAM 全部清除(DD、VRAM 或 DD VRAM 一块)(见第一节)
void draw_picture (int x,int y,int width,int height,int kind,int mod,unsigned char * pGraph){
DISPGRAPH dg; dg.x = x; dg.y = y; dg.GraphData.width = width; dg.GraphData.height = height; dg.GraphData.pBitmap = pGraph; dg.WriteModify = mod; dg.WriteKind = kind; Bdisp_WriteGraph_DDVRAM(&dg); }
最后又有人问了:图片转换好了,怎么输出? 答案:参看 fx-9860G Libraries.pdf,有一个函数 Bdisp_WriteGraph_DDVRAM。 此函数使用两个图片结构(fxlib.h 里面包含的 dispbios.h 就有):
typedef struct tag_GRAPHDATA{ int width; int height; unsigned char *pBitmap;
……
重点讲解数据结构、算法的书籍:
Mark Allen Weiss
《Data Structures and Algorithm Analysis in C》
(众多作者)
《Beauty Coding》
……
对于不懂 C 的人,我的建议就一个:先在 PC 的 IDE 下把 C 的基本功练好,掌握标准 库的用法,再来学 SDK 是很简单的。
现在我们就明白了 VRAM 与 DD 的关系了。 对 DD 的操作可以直接显示,对 VRAM 的操作不能直接显示。对 VRAM 的操作需要等系统 强制刷新显存,将 VRAM 的内容送入 DD 才能显示。我们可爱的 GetKey(unsigned int*)函数 就有清空显存并刷新 DD 的功能。 如果我们想让对 VRAM 的操作直接显示呢?老 用 GetKey 不 好 吧,我们可以使用 Bdisp_PutDisp_DD ,来将闪存的东西放到显存里面去,就显示出来啦。 稍作修改:
fx-9860G SDK 开发从入门到实践
作者:刘小饕 Anderain Lewis(diameter) QQ: raindragonheart@163.com(1582163328)
前言
(我是个倒霉的 9860 程序员,初三暑假买的 9750 在 2010 年刷的机,结果因为闪存优
} GRAPHDATA; typedef struct tag_DISPGRAPH{
int x; int y; GRAPHDATA GraphData; WRITEMODIFY WriteModify; WRITEKIND WriteKind; } DISPGRAPH;
但是不能每次使用都建立这个结构啊!!太麻烦,于是封装一个函数就好了……
写成 9860 的格式就是: const unsigned char PIC_TEST[]=
{0xFF,0xFE,0x81,0x2,0x41,0x4,0x21,0x8, 0x11,0x10,0x9,0x20,0x5,0x40,0xFF,0xFE} ;
有人可能又会问了,用什么方法来吧图片转换成代码呢??嘿嘿,自卖自夸一下, 论坛上本来有一个出自 CasioKingdom(或者说是 UCF?)的全能转换器,能把单色 位图转换成 C 代码。不过这个程序有极大地缺陷。此程序是根据 bmp 的图片格式进 行转换的(bmp 单色以 4 位对齐),有可能出错。论坛上还有一个我写的 bmptocode (b2c.exe),大家可以使用。
Bdisp_AreaClr_DD/ Bdisp_AreaClr_VRAM/ Bdisp_AreaClr_DDVRAM 区域清除(DD、VRAM 或 DD VRAM 一块)(见第一节)
可以使用封装的函数 area_clear sel 取值:0.清除区域,1.画一个框,其他.清除区域+画框
void area_clear (int left,int top,int right,int bottom,int sel) {
DISPBOX box; box.left = left;box.top = top;box.right = right;box.bottom = bottom; if (sel != 1)
Bdisp_AreaClr_DDVRAM (&box); if (sel != 0){
有人可能会问了:我们能操作的最小的单位是 byte,如果图片的的宽不是 8 的整数倍怎 么办? 这个很好解决,不足 8 倍数的的用位补齐 比如一个 15*8 的小图片,宽就成了两个 byte
11111111 b,11111110 b = FF h, FE h 10000001 b,00000010 b = 81 h, 2 h 01000001 b,00000100 b = 41 h, 4 h 00100001 b,00001000 b = 21 h, 8 h 00010001 b,00010000 b = 11 h, 10 h 00001001 b,00100000 b = 9 h, 20 h 00000101 b,01000000 b = 5 h, 40 h 11111111 b,11111110 b = FF h, FE h
return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section
这是一段可以完整编译的程序。其中 Sleep 函数让程序暂停(参数的单位是毫秒), SetPoint 画点。运行效果很明显,现有一条直线,暂停一秒后变到了右边。
根据代码,我们知道, Bdisp_SetPoint_DD (0,i,1); 这个函数绘制的线条在左 Bdisp_SetPoint_VRAM (12,i,1); 这个函数绘制的线条在右
相关文档
最新文档