-
Notifications
You must be signed in to change notification settings - Fork 4
系统调用
wener edited this page Dec 30, 2015
·
3 revisions
系统调用主要包含端口调用类型(IN/OUT),端口号,输入(OUT)输出(IN)参数,异常情况.
IN 输出参数, 端口号
OUT 端口号, 输入参数
返回值和操作过程使用伪代码标示
功能 : 浮点数转换为整数
返回
: (int)R3.float
参数 : R3 浮点数
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
端口 | 功能 | 输出的数据 | 参数列表 | 备注 |
---|---|---|---|---|
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 为屏幕