第30天 高级的应用程序
2020.5.12
1. 命令行计算器(harib27a)
-
编写代码cal.c:
……
- 此代码略长,且不是编写OS的重点,因此此处不再罗列代码。
- 可以使用的运算符:
+
:加法运算-
:减法运算*
:乘法运算/
:整除%
:取余&
:按位与|
:按位或^
:异或~
:按位取反<<
:左移>>
:右移()
:括号
- 运算结同时显示十进制和十六进制。
- 只能进行整数运算。
- 计算优先级和C语言的规定相同。
- 可以直接使用16进制数字,只要在16进制数字前加上0x即可。
- 键盘按键与实际标注不符,因此可参照下表(不同电脑不同,这里是按照本人笔记本按键标注的):
-
make full
后用VMware运行:
2. 文本阅览器(harib27b)
-
编写代码tview.c:
……
- 此代码略长,且不是编写OS的重点,因此此处不再罗列代码。
- 用光标键可以上下左右移动(使用上下左右方向键移动)。
- af设置每次滚动132行(2^形式)(竖向滚动);AF设置每次滚动18列(横向滚动)。
- 关于启动时命令行选项,以
tview ipl20.nas -w100 -h30
为例:- -w代表打开一个宽度为100个半角字符的窗口,最大可以指定126。
- -h代表行数,最大可以指定45。
- 如果不指定-w和-h,默认值是-w30和-h10。
- 制表符的大小使用命令行选项
-t
,如果省略的话,是-t4,即4个空格大小。在程序启动后也可以使用<
和>
来调节。 - 按
q
或者Q
可以退出应用程序。
-
make full
后用VMware运行:- 以指令
tview ipl20.nas -w100 -h30
为例:
- 以指令
3. MML播放器(harib27c)
-
编写代码mmlplay.c:
……
- 此代码略长,且不是编写OS的重点,因此此处不再罗列代码。
- 由音符数据计算频率,以及由音符长度计算定时器应该设定为几秒。
- 音乐知识:一个音升高半音后,频率是原来的约1.059463倍。
-
在命令行中输入
mmlplay daigo.mml
即可播放音乐daigo.mml。 -
mml(music macro language)是一个文本文件。
- 这个文件中包含的内容是乐谱数据,如“doe、ray、me、far、sow、lar、tea”分别对应“CDEFGABC”(C大调中)。
- 在音符后面加上
+
或者#
表示升高半音,加上-
表示降低半音。 - 再后面还可以加上数字,“4”表示4分音符,“8”代表8分音符,“1”代表全音符,“2.”代表符点2音符。
O
命令来设置八度音区,例如可以设置“O4”。L
命令用来设置音长,表示音符或者休止符R
在不指定音长时的默认音长。T
命令用来设定乐曲速度,>
用来升高一个八度,<
用来降低一个八度,&
表示连音线。Q
用来指定音符演奏是短促还是连贯。比如“Q4”标出断奏,“Q8”表示一直使用连音奏法。$
开头的是扩展命令。$K
是卡拉OK命令,后面指定的字符串会显示在卡拉OK栏中。$E
表示卡拉OK歌词数据的字符编码。
-
mml文件中数据是不区分大小写的。演奏到最后会自动回到开头重新演奏。
-
按下Q退出,如果使用Shift+F1或者“X”按钮,会一直有声音。由于音乐播放器不是重点,因此没有修改OS内核代码。
-
乐库文件在目录mmldata下,一共有四首音乐:
- daigo.mml:《c小调第五交响曲“命运” op.67》
- kirakira.mml:《小星星》发过民歌
- fujisan.mml:《富士山》日本文部省民歌
- daiku.mml:《第九交响曲 d小调 “合唱” op.125选段 路德维希·范·贝多芬》
-
make full
后用VMware运行:- 以
mmlplay kirakira.mml
为例:
- 以
4. 图片阅览器(harib27d)
-
编写代码gview.c:
……
- 此代码略长,且不是编写OS的重点,因此此处不再罗列代码。
- 支持BMP和JEPG格式的图片。
- 关于BMP和JEPG的文件格式讲解此处不再详述。而且用于解释BMP和JEPG文件格式的程序直接使用OSASK中应用程序所应用的代码。
- OSASK中有一个叫做PICTURE0.BIN的应用程序,这是一个用来查看BMP和JEPG格式图片的图片阅览器。从这个程序的源代码中提取bmp.nasm和jepg.c。
- bmp.nasm和jepg.c无需修改可以直接使用。
- 因此,只需要将文件载入并显示出来。
-
make full
后用VMware运行:- 查看图片:
- 图片数据在pictdata目录下,分别是night.bmp和fujisan.jpeg。
- 查看图片:
6. IPL的改良(harib27e)
- 这部分不进行学习,因此略过。
7. 光盘启动(harib27f)
- 这部分不进行学习,因此略过。
8. 完结撒花
- 现在是2020.5.13 11:16。总耗时138天,实际耗时49天。
- 讲真的,在这139天里,不止一次想要放弃,还好自己最终还是坚持了下来。原本立下的三次flag都倒下了,终于在5.13号完成了既定任务。
- 接下来几天就是再harib27d的基础上,进行修改,添加一些必要的功能以及修改一些不合适的部分。
- 现在千言万语都成无言。总之,感谢那个一直没有放弃的自己,以及那个兴趣且专注的自己。
- 完结撒花!