Skip to content
wener edited this page Dec 30, 2015 · 3 revisions

系统调用主要包含端口调用类型(IN/OUT),端口号,输入(OUT)输出(IN)参数,异常情况.

IN 输出参数, 端口号
OUT 端口号, 输入参数

返回值和操作过程使用伪代码标示

IN

0

功能 : 浮点数转换为整数

返回 : (int)R3.float

参数 : R3 浮点数

OUT

端口说明

IN

INT 输出参数, 端口
RETURN IN(ARGS...)

端口 功能 返回值 参数列表 备注
0 浮点数转换为整数 整数 r3:浮点数 int(r3.float)
1 整数转换为浮点数 浮点数 r3:整数 float(r3.int)
2 申请字符串句柄 申请到的句柄 strPool.acquire
3 字符串转换为整数 整数 r3:字符串句柄,地址 float(r3.str);若r3的值不是合法的字符串句柄则返回r3的值
4 整数转换为字符串 返回的值为r3:整数 r2:目标字符串_句柄_
r3:整数
r2.str=str(r3.int);return r3.int;r2所代表字符串的内容被修改
5 复制字符串 r3的值 r2:源字符串句柄
r3:目标字符串句柄
r3.str=r2.str;return r3
6 连接字符串 r3的值 r2:源字符串
r3:目标字符串
r3.str=r3.str+r2.str
7 获取字符串长度 字符串长度 r3:字符串 strlen(r3.str)
8 释放字符串句柄 r3的值 r3:字符串句柄 strPool.release(r3);return r3
9 比较字符串 两字符串的差值 相同为0,大于为1,小于为-1 r2:基准字符串
r3:比较字符串
strcmp(r3.str,r2.str)
10 整数转换为浮点数再转换为字符串 r3的值 r2:目标字符串
r3:整数
r2所代表字符串的内容被修改
11 字符串转换为浮点数 浮点数 r3:字符串
12 获取字符的ASCII码 ASCII码 r2:字符位置
r3:字符串
GBK编码,返回的结果范围为有符号的 8bit值,因此对中文操作时返回负数
13 将给定字符串中指定索引的字符替换为给定的ASCII代表的字符 r3的值 r1:ASCII码
r2:字符位置
r3:目标字符串
r3所代表字符串的内容被修改, 要求r3是句柄才能修改r3的值,给出的ASCII会进行模256的处理
14 (功用不明) 65535
15 获取嘀嗒计数 嘀嗒计数 这里不知道他是怎么算的这个数字,但是会随着时间增长就是了
16 求正弦值 X!的正弦值 r3:X!
17 求余弦值 X!的余弦值 r3:X!
18 求正切值 X!的正切值 r3:X!
19 求平方根值 X!的平方根值 r3:X!
20 求绝对值 X%的绝对值 r3:X%
21 求绝对值 X!的绝对值 r3:X!
22 重定位数据指针 r3的值 r2:数据位置 r3中为任意值
23 读内存数据 地址内容 r3:地址
24 写内存数据 r3的值 r2:待写入数据
r3:待写入地址
25 获取环境值 环境值
32 整数转换为字符串 r3的值 r1:整数
r3:目标字符串
r3所代表字符串的内容被修改
33 字符串转换为整数 整数 r3:字符串
34 获取字符第一个字符的ASCII码 ASCII码 r3:字符串
35 预期左取字符串接口 r3的值 r1:截取长度
r2:源字符串
r3:目标字符串
r3所代表字符串的内容被修改 (此端口似乎不正常)
35 左取字符串 r3的值 r2:截取长度
r3:源字符串
r3:目标字符串
r3所代表字符串的内容被修改 (此端口似乎不正常)
36 右取字符串 r3的值 r1:截取长度
r2:源字符串
r3:目标字符串
r3所代表字符串的内容被修改
37 中间取字符串 r0截取长度 r0:截取长度
r1:截取位置
r2:源字符串
r3:目标字符串
r3所代表字符串的内容被修改
38 查找字符串 位置 r1:起始位置
r2:子字符串
r3:父字符串
39 获取字符串长度 字符串长度 r3:字符串

NOTE

  • 23,24端口在pc虚拟机上无法测试,实现的读写数据为int
  • 32,33,34,35,36,37 端口在PC虚拟机中有bug,必须要传入的字符串长度大于等于转换后的长度,否则会出问题
  • 36, 35 端口在PC虚拟机中有BUG
  • StdLib 中对 LEFT$ 的定义似乎也有问题,只使用了一个参数
  • 直接汇编操作 35 36 端口的时候,长度会加一,BUG
  • 38 查找不到时返回 0, BUG

OUT

端口 功能 输出的数据 参数列表 备注
0 显示整数 整数 会换行
1 显示字符串 字符串 会换行
2 显示字符串 字符串
3 显示整数 整数
4 显示字符 字符ASCII码
5 显示浮点数 浮点数
10 键入整数 0 r3的值变为键入的整数
11 键入字符串 0 r3:目标字符串句柄 r3所指字符串的内容变为键入的字符串
12 键入浮点数 0 r3的值变为键入的浮点数
13 从数据区读取整数 0 r3的值变为读取的整数
14 从数据区读取字符串 0 r3:目标字符串句柄 r3所指字符串的内容变为读取的字符串
15 从数据区读取浮点数 0 r3的值变为读取的浮点数
16 设定模拟器屏幕 0 r2:宽, r3:高 SETLCD(WIDTH,HEIGHT)
17 申请画布句柄 0 ,r3:PAGE句柄 - CREATEPAGE()
18 释放画布句柄 0 r3:PAGE句柄 DELETEPAGE(PAGE)
19 申请图片句柄并从文件载入像素资源 r3:资源句柄 r3:文件名, r2:资源索引 LOADRES(FILE$,ID)
20 复制图片到画布上 0 r3:地址,其他参数在该地址后 SHOWPIC(PAGE,PIC,DX,DY,W,H,X,Y,MODE)
21 显示画布 0 r3:PAGE句柄 FLIPPAGE(PAGE)
22 复制画布 0 r2:目标PAGE句柄,r3:源PAGE句柄 BITBLTPAGE(DEST,SRC)
23 填充画布 0 r3:参数地址 FILLPAGE(PAGE,X,Y,WID,HGT,COLOR)
24 写入画布某点颜色 0 r3:参数地址 PIXEL(PAGE,X,Y,COLOR)
25 读取画布某点颜色 0 r3:参数地址 READPIXEL(PAGE,X,Y)
26 释放图片句柄 0 r3:资源句柄 FREERES(ID)
27 延迟一段时间 0 r3:延迟时间 MSDELAY(MSEC)
32 用种子初始化随机数生成器 0 r3:SEED RANDOMIZE(SEED)
33 获取范围内随机数 0 r3:RANGE RND(RANGE)
34 判定某键是否按下 0;r3 r3:KEY KEYPRESS(KEY)
35 清屏 0
36 按行列定位光标 0 r2:行,r3:列 LOCATE(LINE,ROW)
37 设定文字颜色 0 r3:参数地址 COLOR(FRONT,BACK,FRAME)
38 设定文字字体大小 0 r3:FONT FONT(F)
39 等待按键 r3:按键 - WAITKEY()
40 获取图片宽度 r3 r3 GETPICWID(PIC)
41 获取图片高度 r3 r3 GETPICHGT(PIC)
42 按坐标定位光标 - r2:行,r3:列 PIXLOCATE(LINE,ROW)
43 复制部分画布 - r3:参数地址 STRETCHBLTPAGE(X,Y,DEST,SRC)
44 设定背景模式 r3:MODE - SETBKMODE(mode)
45 获取按键的字符串 0 r3:字符串句柄,用于存储结果 InKey$
46 获取按键的ASCII码 0 r3:KEYPRESS INKEY()
48 打开文件 0 r0:打开方式
r1:文件号
r3:文件名字符串
打开方式目前只能为1
49 关闭文件 文件号
50 从文件读取数据 16:读取整数 r1:文件号
r2:位置偏移量
r3的值变为读取的整数
  • | | 17:读取浮点数 | r1:文件号
    r2:位置偏移量 | r3的值变为读取的浮点数
  • | | 18:读取字符串 | r1:文件号
    r2:位置偏移量
    r3:目标字符串句柄 | r3所指字符串的内容变为读取的字符串 51 | 向文件写入数据 | 16:写入整数 | r1:文件号
    r2:位置偏移量
    r3:整数 |
  • | | 17:写入浮点数 | r1:文件号
    r2:位置偏移量
    r3:浮点数 |
  • | | 18:写入字符串 | r1:文件号
    r2:位置偏移量
    r3:字符串 | 52 | 判断文件位置指针是否指向文件尾 | 0;r3为0或1 | r3:文件号 | Eof 53 | 获取文件长度 | 0 | r3:文件号 | Lof 54 | 获取文件位置指针的位置 | 0;返回值在r3 | r3:文件号 | LOC(FILE) 55 | 定位文件位置指针 | 16 | r2:文件号
    r3:目标位置 | 64 | 设置画笔 | 0 | r3:参数地址 | SETPEN(PAGE,STYLE,WID,COLOR) 65 | 设置刷子 | 0 | r2:PAGE r3:STYLE | SETBRUSH(PAGE,STYLE) 66 | 移动画笔 | 0 | r1,r2,r3:PAGE,X,Y | MOVETO(PAGE,X,Y) 67 | 画线 | 0 | r1,r2,r3:PAGE,X,Y | LINETO(PAGE,X,Y) 68 | 画矩形 | 0 | r3:参数地址 | RECTANGLE(PAGE,LEFT,TOP,RIGHT,BOTTOM) 69 | 画圆 | 0 | r3:参数地址 | CIRCLE(PAGE,CX,CY,CR) 80 | 复制部分画布扩展 | 0 | r3:参数地址 | STRETCHBLTPAGEEX(X,Y,WID,HGT,CX,CY,DEST,SRC) 255 | 虚拟机测试 | 0 | 0 | VmTest

TIPS

  • 参数中的颜色为 BGR 制式
  • PAGE 如果为 -1 则为屏幕
  • PAGE 句柄从 0 开始
  • 如果操作文件的地址是 0x7FFFFFFF(2147483647) 则是从当前位置操作

杂项

主要资源类型

  • 字符串句柄: -1 开始
  • 资源句柄: 0 开始 失败会返回 -1
  • 文件句柄: 自己指定 0 开始, 虚拟机上最多 10 个
  • 屏幕句柄: 自己指定 0 开始, 虚拟机上最多 10 个, -1 为屏幕