[Add-in]9860机上C解释器 dPicoC v2.1c Alpha1
本帖最后由 ExAcler 于 2015-2-1 22:34 编辑10L有一个修改后的代码编辑器!
http://www.cncalc.org/data/attachment/forum/201305/01/142823flj8hz80l1l48j30.bmp
测试版发布!欢迎大家找bug!
已知bug:逗号表达式有问题,无法使用const,数组必须制定个数
未实现功能:脚本模式,栈空间自定义
注意!此程序相当吃内存,默认分配的栈空间是20KB,请控制源文件的长度!(源文件会被全部读入到内存,其他操作也是要占内存的~)
关于如何强制退出:长按EXIT可以强退,程序会显示EXIT BREAK
函数支持
fxlib的函数几乎全部支持!(除了关于Timer和QuitHeader的都可以用)
但是宏常量没有添加,请自己翻看相关头文件!
stdio:基于一个伪流,目前支持下列函数
int sprintf(char *, char *,...);
int puts(char *);
char * gets(char *,int);
void cls();
ctype,errno,math,stdbool,string,stdlib:与标准c基本相同
代码示例:
输入输出测试
int main()
{
char buf;
double a;
puts("Input a number:");
gets(buf,64);
a = atof(buf);
sprintf(buf,"the square root of %f is %f",a,sqrt(a));
puts(buf);
return 0;
}2.汉字库读取测试(读入一个汉字文本并使用HZK12.df输出)
#include <stdio.h>
#include <fxlib.h>
#include <string.h>
#include <stdlib.h>
typedef FONTCHARACTER fontc;
int HZK_file = 1;
void char_to_font(char * cfname,fontc * ffname)
{
int i,len = strlen(cfname);
for(i=0; i<len ;++i)
ffname = cfname;
ffname=0;
}
void font_to_char(fontc *ffname,char *cfname)
{
int i = 0;
while((cfname=ffname)!=0)++i;
}
void draw_picture(int x,int y,int width,int height,int mode,unsigned char * p)
{
DISPGRAPH dg;
dg.x = x;
dg.y = y;
dg.GraphData.width = width;
dg.GraphData.height = height;
dg.GraphData.pBitmap = p;
dg.WriteModify = mode+1;
dg.WriteKind = 0;
Bdisp_WriteGraph_VRAM(&dg);
}
void print_ch_char (unsigned char c1,unsigned char c2,int x,int y)
{
unsigned char mat;
int sec,pot;
sec = c1-0xa0;
pot = c2-0xa0;
Bfile_ReadFile(HZK_file,mat,24,(94*(sec-1)+(pot-1))*24l);
draw_picture (x,y,12,12,0,mat);
}
int main()
{
unsigned char buf;
fontc file_name;
int text_file,file_size,bytes_read,i;
Bdisp_AllClr_DDVRAM();
char_to_font("\\\\fls0\\HZK12.df",file_name);
HZK_file = Bfile_OpenFile (file_name,0);
if (HZK_file < 0)
{
puts("cannot open HZK file");
return -1;
}
char_to_font("\\\\fls0\\TEST.txt",file_name);
text_file = Bfile_OpenFile (file_name,0);
if (text_file < 0)
{
puts("cannot open text file");
return -1;
}
file_size= Bfile_GetFileSize(text_file);
bytes_read = Bfile_ReadFile (text_file,buf,file_size,0);
Bfile_CloseFile(text_file);
buf = '\0';
for(i=0;buf;i+=2)
{
print_ch_char(buf,buf,i*6,0);
}
Bfile_CloseFile(HZK_file);
return 0;
}附件
本帖最后由 jinzihao1996 于 2013-5-1 09:12 编辑
哇,这回有了真正的on-calc SDK了,真是不可思议!
感谢楼主!
楼主有空能否讲讲PC软件移植到9860的经验和技巧? 不错,一定要看看!!! 最好把函数全部改为小写,并加以简化,用edit打字太累。如allclr_ddvram()比Bdisp_AllClr_DDVRAM()方便的多 只要支持标准c语言函数就可以了,比如 scanf函数怎么没有啊 源文件为什么要读入内存呢,时候可以解释的时候,从闪存中读取 尽量简单些,只要满足编写测量程序就可以了,多余的功能可以不要 chuxianbing 发表于 2013-5-1 10:56 static/image/common/back.gif
源文件为什么要读入内存呢,时候可以解释的时候,从闪存中读取
这是picoc的lexer决定的,要不然就得全部推倒重写
而且逐byte读闪存在实体机上相当相当慢!DL2就是失败的典型 怎么不搞一个qbasic解释器啊
我修改了EDIT~加入了一个Catalog,上面是dPicoc支持的Fxlib函数,下面是c关键字~
方便写代码~
Catalog按OPTN可以调出
附件: 9860II SD打开死机。。。。。。。 9750GII提示“can not open”,是已刷机型 9750GII提示“\\fls0\TEST.C:6:'puts' is undefined” angrybird 发表于 2013-5-2 00:34 static/image/common/back.gif
9750GII提示“\\fls0\TEST.C:6:'puts' is undefined”
没有包含头文件~
想用puts必须#include <stdio.h>
1L的例子好像忘记包含了... angrybird 发表于 2013-5-2 00:34 static/image/common/back.gif
9750GII提示“\\fls0\TEST.C:6:'puts' is undefined”
解决了
原来是缺了相关的头文件。 TEST.c完美通过9750GII测试。 请问直径,哪里有2_02_0201_sh4.fls刷机固件可供下载? 建议,凡是系统自带的头文件,默认不必include 要是源程序要读入内存中在运行,就大大的限制了源程序的大小,可以考虑逐行读取,速度慢总比代码写不了几行的好啊,只要比casio 的basic快就可以了,实在不成也可以考虑下调用外部程序的方法啊,比如另一个c程序 不必要追去和c语言一致性,可以开发出一种很实用的解释器,功能不一定要强,够用来编写测量程序就可以了,比如像wsc的编译器那样,可惜wsc不支持double数据类型,源程序也只可以到达10K,float的数据类型太不好用了,输入个坐标都不够
页:
[1]
2