diameter 发表于 2013-5-1 00:45:29

[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:10:15

本帖最后由 jinzihao1996 于 2013-5-1 09:12 编辑

哇,这回有了真正的on-calc SDK了,真是不可思议!
感谢楼主!
楼主有空能否讲讲PC软件移植到9860的经验和技巧?

angrybird 发表于 2013-5-1 09:59:42

不错,一定要看看!!!

.zyz 发表于 2013-5-1 10:35:43

最好把函数全部改为小写,并加以简化,用edit打字太累。如allclr_ddvram()比Bdisp_AllClr_DDVRAM()方便的多

chuxianbing 发表于 2013-5-1 10:55:27

只要支持标准c语言函数就可以了,比如 scanf函数怎么没有啊

chuxianbing 发表于 2013-5-1 10:56:48

源文件为什么要读入内存呢,时候可以解释的时候,从闪存中读取

chuxianbing 发表于 2013-5-1 10:59:22

尽量简单些,只要满足编写测量程序就可以了,多余的功能可以不要

diameter 发表于 2013-5-1 11:20:40

chuxianbing 发表于 2013-5-1 10:56 static/image/common/back.gif
源文件为什么要读入内存呢,时候可以解释的时候,从闪存中读取

这是picoc的lexer决定的,要不然就得全部推倒重写
而且逐byte读闪存在实体机上相当相当慢!DL2就是失败的典型

chuxianbing 发表于 2013-5-1 11:39:29

怎么不搞一个qbasic解释器啊

diameter 发表于 2013-5-1 14:29:51

我修改了EDIT~加入了一个Catalog,上面是dPicoc支持的Fxlib函数,下面是c关键字~
方便写代码~
Catalog按OPTN可以调出


附件:

cjgaoming01 发表于 2013-5-1 18:34:23

9860II SD打开死机。。。。。。。

angrybird 发表于 2013-5-1 23:56:32

9750GII提示“can not open”,是已刷机型

angrybird 发表于 2013-5-2 00:34:09

9750GII提示“\\fls0\TEST.C:6:'puts' is undefined”

diameter 发表于 2013-5-2 12:52:27

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 12:53:14

angrybird 发表于 2013-5-2 00:34 static/image/common/back.gif
9750GII提示“\\fls0\TEST.C:6:'puts' is undefined”

解决了
原来是缺了相关的头文件。

angrybird 发表于 2013-5-2 12:54:13

TEST.c完美通过9750GII测试。

angrybird 发表于 2013-5-2 22:24:31

请问直径,哪里有2_02_0201_sh4.fls刷机固件可供下载?

chuxianbing 发表于 2013-5-3 11:18:39

建议,凡是系统自带的头文件,默认不必include

chuxianbing 发表于 2013-5-3 11:23:30

要是源程序要读入内存中在运行,就大大的限制了源程序的大小,可以考虑逐行读取,速度慢总比代码写不了几行的好啊,只要比casio 的basic快就可以了,实在不成也可以考虑下调用外部程序的方法啊,比如另一个c程序

chuxianbing 发表于 2013-5-3 11:27:52

不必要追去和c语言一致性,可以开发出一种很实用的解释器,功能不一定要强,够用来编写测量程序就可以了,比如像wsc的编译器那样,可惜wsc不支持double数据类型,源程序也只可以到达10K,float的数据类型太不好用了,输入个坐标都不够
页: [1] 2
查看完整版本: [Add-in]9860机上C解释器 dPicoC v2.1c Alpha1