原创 第10天 疊加處理

第10天 疊加處理 2020.4.9 1. 內存管理(續)(harib07a) 先整理一下源文件:把用於內存管理的函數、數據結構和常量彙總到memory.c中去。 memman_alloc和memman_free是以1字

原创 第6天 分割編譯與中斷處理

第6天 分割編譯與中斷處理 2020.3.31 1. 分割源文件(harib03a) 開發至昨天,bootpack.c的長度已經有將近300行了。一個源文件太長可不是一件好事情。 因此,需要將bootpack.c分割成爲幾部

原创 第7天 FIFO與鼠標控制

第7天 FIFO與鼠標控制 2020.4.1 1. 獲取按鍵編碼(harib04a) 修改程序,讓程序在按下一個鍵以後不結束,而是把所按鍵的編碼在畫面上顯示出來。 修改int.c中的inthandler21函數: voi

原创 第30天 高級的應用程序

第30天 高級的應用程序 2020.5.12 1. 命令行計算器(harib27a) 編寫代碼cal.c: …… 此代碼略長,且不是編寫OS的重點,因此此處不再羅列代碼。 可以使用的運算符: +:加法運算 -:減法運算

原创 第29天 壓縮與簡單的應用程序

第29天 壓縮與簡單的應用程序 2020.5.10 1. 修復bug(harib26a) 先修復harib25g中的bug。 通過觀察,發現harib25g中,只有全角字符的顯示有問題,半角字符是正常的,而且移動窗口之後可

原创 第28天 文件操作與文字顯示

第28天 文件操作與文字顯示 2020.5.8 1. alloca(1)(harib25a) 編寫一個求素數的應用程序sosu.c: #include <stdio.h> #include "apilib.h" #defi

原创 第27天 LDT與庫

第27天 LDT與庫 2020.5.7 1. 先來修復bug(harib24a) 在harib23j中有一個bug,就是用ncst運行的應用程序,使用Shift+F1和點擊“X”按鈕都無法關閉窗口。 其實這個bug在很久之

原创 第26天 爲窗口移動提速

第26天 爲窗口移動提速 2020.5.2 1. 提高窗口移動速度(1)(harib23a) 本着優化用戶體驗的宗旨,修改代碼以提高窗口移動速度。 導致窗口移動相對緩慢的原因其中之一是:sheet_refreshmap的

原创 第25天 增加命令行窗口

第25天 增加命令行窗口 2020.4.30 1. 蜂鳴器發聲(harib22a) 蜂鳴器和定時器一樣,都是由PIT來控制的,而PIT位於芯片組中,因此所有型號的電腦都能使用它。 關於蜂鳴器的相關資料: 其中,赫茲大

原创 第23天 圖形處理相關

第23天 圖形處理相關 2020.4.28 1. 編寫malloc(harib20a) harib19g的winhelo2.hrb大小竟然有7.6KB。winhelo2.hrb中有很多00。 原因是winhelo2.c中c

原创 第24天 窗口操作

第24天 窗口操作 2020.4.29 1. 窗口切換(1)(harib21a) 實現能夠切換窗口順序的功能,首先實現從鍵盤切換的方法:當按下F11時,將最下面的窗口放到最上面。 F11的按鍵編碼是0x57,F12的按鍵

原创 第22天 用C語言編寫應用程序

第22天 用C語言編寫應用程序 2020.4.26 1. 保護操作系統(5)(harib19a) 把OS的段地址存入DS和訪問OS管理的內存空間這兩招已經不能用了。 試試在定時器上做手腳:這樣,光標閃爍就會變得異常,任務

原创 第19天 應用程序

第19天 應用程序 2020.4.21 1. type命令(harib16a) type命令,顯示文件內容。liunx中對應的命令是cat。 要想實現type命令,就必須讀取文件內容。 回想一下昨天的內容:用二進制查

原创 第20天 API

第20天 API 2020.4.23 1. 程序整理(harib17a) 實現由應用程序對OS功能的調用,即API(系統調用)。 API,application program interface,應用程序(與系統之間的)

原创 第21天 保護操作系統

第21天 保護操作系統 2020.4.24 1. 攻克難題——字符串顯示API(harib18a) 在harib17h中hello.hrb運行出現異常。應該是內存段的鍋。 顯示單個字符時,用[CS:ECX]的方式特意指定