第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的基礎上,進行修改,添加一些必要的功能以及修改一些不合適的部分。
- 現在千言萬語都成無言。總之,感謝那個一直沒有放棄的自己,以及那個興趣且專注的自己。
- 完結撒花!