cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 36418|回复: 33

[fx-9860/9750系列] [Add-in]9860机上C解释器 dPicoC v2.1c Alpha1

[复制链接]
发表于 2013-5-1 00:45:29 | 显示全部楼层 |阅读模式
计算器程序
程序名称: dPicoC v2.1c
平台: fx-9860GII fx-9860G & Slim fx-9750GII 
系统/软件要求: 暂无
版本号: 2.1c
类型: 图像 其他 
作者: 移植:diameter
大小(K): 85
更新日期: 2013-05-01
描述: 解释器Picoc,ISO C兼容
已知缺陷: 见下
源代码: 闭源
本帖最后由 ExAcler 于 2015-2-1 22:34 编辑

10L有一个修改后的代码编辑器!


测试版发布!欢迎大家找bug!
未命名.JPG
已知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基本相同

代码示例:
输入输出测试
sqrt test.JPG
  1. int main()
  2. {
  3.     char buf[64];
  4.     double a;
  5.    
  6.     puts("Input a number:");
  7.     gets(buf,64);
  8.     a = atof(buf);
  9.     sprintf(buf,"the square root of %f is %f",a,sqrt(a));
  10.     puts(buf);
  11.    
  12.     return 0;
  13. }
复制代码
2.汉字库读取测试(读入一个汉字文本并使用HZK12.df输出)
text read test.JPG
  1. #include <stdio.h>
  2. #include <fxlib.h>
  3. #include <string.h>
  4. #include <stdlib.h>

  5. typedef FONTCHARACTER fontc;

  6. int HZK_file = 1;

  7. void char_to_font(char * cfname,fontc * ffname)
  8. {
  9.     int i,len = strlen(cfname);
  10.     for(i=0; i<len ;++i)
  11.         ffname[i] = cfname[i];
  12.     ffname[i]=0;
  13. }

  14. void font_to_char(fontc *ffname,char *cfname)
  15. {
  16.     int i = 0;
  17.     while((cfname[i]=ffname[i])!=0)++i;
  18. }
  19. void draw_picture(int x,int y,int width,int height,int mode,unsigned char * p)
  20. {
  21.     DISPGRAPH dg;

  22.     dg.x                    = x;
  23.     dg.y                    = y;
  24.     dg.GraphData.width      = width;
  25.     dg.GraphData.height     = height;
  26.     dg.GraphData.pBitmap    = p;
  27.     dg.WriteModify          = mode+1;
  28.     dg.WriteKind            = 0;

  29.     Bdisp_WriteGraph_VRAM(&dg);
  30. }

  31. void print_ch_char (unsigned char c1,unsigned char c2,int x,int y)
  32. {
  33.     unsigned char mat[24];
  34.     int sec,pot;
  35.     sec = c1-0xa0;
  36.     pot = c2-0xa0;
  37.     Bfile_ReadFile(HZK_file,mat,24,(94*(sec-1)+(pot-1))*24l);
  38.     draw_picture (x,y,12,12,0,mat);
  39. }

  40. int main()
  41. {
  42.     unsigned char    buf[64];
  43.     fontc            file_name[64];
  44.     int              text_file,file_size,bytes_read,i;
  45.    
  46.     Bdisp_AllClr_DDVRAM();
  47.    
  48.     char_to_font("\\\\fls0\\HZK12.df",file_name);
  49.     HZK_file = Bfile_OpenFile (file_name,0);
  50.     if (HZK_file < 0)
  51.     {
  52.         puts("cannot open HZK file");
  53.         return -1;
  54.     }
  55.    
  56.     char_to_font("\\\\fls0\\TEST.txt",file_name);
  57.     text_file = Bfile_OpenFile (file_name,0);
  58.     if (text_file < 0)
  59.     {
  60.         puts("cannot open text file");
  61.         return -1;
  62.     }
  63.    
  64.     file_size  = Bfile_GetFileSize(text_file);
  65.     bytes_read = Bfile_ReadFile (text_file,buf,file_size,0);
  66.     Bfile_CloseFile(text_file);
  67.     buf[bytes_read] = '\0';
  68.    
  69.     for(i=0;buf[i];i+=2)
  70.     {
  71.         print_ch_char(buf[i],buf[i+1],i*6,0);
  72.     }
  73.    
  74.     Bfile_CloseFile(HZK_file);
  75.     return 0;
  76. }
复制代码
附件
dpicoc.g1a (84.96 KB, 下载次数: 129)

评分

参与人数 4金钱 +9 收起 理由
jinzihao1996 + 2 很给力!
croptree + 2 赞一个!
GWHBOB + 3 很给力!
zzh + 2 很给力!

查看全部评分

发表于 2013-5-1 09:10:15 | 显示全部楼层
本帖最后由 jinzihao1996 于 2013-5-1 09:12 编辑

哇,这回有了真正的on-calc SDK了,真是不可思议!
感谢楼主!
楼主有空能否讲讲PC软件移植到9860的经验和技巧?
发表于 2013-5-1 09:59:42 | 显示全部楼层
不错,一定要看看!!!
发表于 2013-5-1 10:35:43 | 显示全部楼层
最好把函数全部改为小写,并加以简化,用edit打字太累。如allclr_ddvram()比Bdisp_AllClr_DDVRAM()方便的多

点评

保留大写可以保持与SDK的兼容性  发表于 2013-5-1 11:07
发表于 2013-5-1 10:55:27 | 显示全部楼层
只要支持标准c语言函数就可以了,比如 scanf函数怎么没有啊

点评

fx-9860g的SDK好像本来就没有scanf  发表于 2013-5-1 11:07
发表于 2013-5-1 10:56:48 | 显示全部楼层
源文件为什么要读入内存呢,时候可以解释的时候,从闪存中读取
发表于 2013-5-1 10:59:22 | 显示全部楼层
尽量简单些,只要满足编写测量程序就可以了,多余的功能可以不要
 楼主| 发表于 2013-5-1 11:20:40 | 显示全部楼层
chuxianbing 发表于 2013-5-1 10:56
源文件为什么要读入内存呢,时候可以解释的时候,从闪存中读取

这是picoc的lexer决定的,要不然就得全部推倒重写
而且逐byte读闪存在实体机上相当相当慢!DL2就是失败的典型
发表于 2013-5-1 11:39:29 | 显示全部楼层
怎么不搞一个qbasic解释器啊

点评

以前那个BASIC很弱,好像还是带行号的..  发表于 2013-5-1 13:32
以前有过一个add-in,可以解释运行qbasic风格的代码  发表于 2013-5-1 12:52
 楼主| 发表于 2013-5-1 14:29:51 | 显示全部楼层
我修改了EDIT~加入了一个Catalog,上面是dPicoc支持的Fxlib函数,下面是c关键字~
方便写代码~
Catalog按OPTN可以调出
DCEDIT.bmp

附件: DCEDIT.G1A (59.75 KB, 下载次数: 90)
发表于 2013-5-1 18:34:23 | 显示全部楼层
9860II SD打开死机。。。。。。。

点评

感谢反馈!可能是因为存在文件浏览的bug,现在已经修复,请重新下载~  发表于 2013-5-1 20:36
发表于 2013-5-1 23:56:32 | 显示全部楼层
9750GII提示“can not open”,是已刷机型
发表于 2013-5-2 00:34:09 | 显示全部楼层
9750GII提示“\\fls0\TEST.C:6:'puts' is undefined”
 楼主| 发表于 2013-5-2 12:52:27 | 显示全部楼层
angrybird 发表于 2013-5-2 00:34
9750GII提示“\\fls0\TEST.C:6:'puts' is undefined”

没有包含头文件~
想用puts必须#include <stdio.h>
1L的例子好像忘记包含了...
发表于 2013-5-2 12:53:14 | 显示全部楼层
angrybird 发表于 2013-5-2 00:34
9750GII提示“\\fls0\TEST.C:6:'puts' is undefined”

解决了
原来是缺了相关的头文件。
发表于 2013-5-2 12:54:13 | 显示全部楼层
TEST.c完美通过9750GII测试。
发表于 2013-5-2 22:24:31 | 显示全部楼层
请问直径,哪里有2_02_0201_sh4.fls刷机固件可供下载?
发表于 2013-5-3 11:18:39 | 显示全部楼层
建议,凡是系统自带的头文件,默认不必include
发表于 2013-5-3 11:23:30 | 显示全部楼层
要是源程序要读入内存中在运行,就大大的限制了源程序的大小,可以考虑逐行读取,速度慢总比代码写不了几行的好啊,只要比casio 的basic快就可以了,实在不成也可以考虑下调用外部程序的方法啊,比如另一个c程序
发表于 2013-5-3 11:27:52 | 显示全部楼层
不必要追去和c语言一致性,可以开发出一种很实用的解释器,功能不一定要强,够用来编写测量程序就可以了,比如像wsc的编译器那样,可惜wsc不支持double数据类型,源程序也只可以到达10K,float的数据类型太不好用了,输入个坐标都不够
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-11-22 10:26 , Processed in 0.102900 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表