1. 程式人生 > >30天自制作業系統day17

30天自制作業系統day17

建立命令列視窗

建立一個帶視窗的任務,需要在主程式中建立視窗,再通過引數傳給這個任務的main函式。因為要處理視窗重疊關係等,需要在統一的地方進行管理。
如果有多個任務能夠接受鍵盤輸入,則應該建立一個變數key_to,表示輸入到哪個任務中。
為了讓每個任務都能夠接受鍵盤輸入,可以把FIFO放在TASK結構中。在主程式的for迴圈中,根據key_to的值將鍵盤資料傳到指定的FIFO中。然後在這個任務的for迴圈中處理鍵盤資料。

特殊字元的輸入

現在只能輸入一般字元。如果是通過組合鍵輸入的,如!@#¥%,需要自己判斷。這裡需要處理SHIFT鍵。使用兩個keytable表,一個是不按shift時輸入的,一個是按下時輸入的。在FIFO處理中,記錄左右SHIFT鍵的按下擡起狀態,然後在傳送字元時選用不同的keytable。
大寫字母也需要處理。初始的大小寫狀態可以由BIOS獲取,但是32位下無法使用BIOS,可以在一開始獲得的binfo中得到。

相關推薦

30自制作業系統day17

建立命令列視窗 建立一個帶視窗的任務,需要在主程式中建立視窗,再通過引數傳給這個任務的main函式。因為要處理視窗重疊關係等,需要在統一的地方進行管理。 如果有多個任務能夠接受鍵盤輸入,則應該建立一個變數key_to,表示輸入到哪個任務中。 為了讓每個任務

關於《30自制作業系統第三》程式跳轉到0XC200的問題

         看到第三章的時候我蒙圈了,程式裡面是從0X8200開始複製的,如圖  書裡面也提到過軟盤的檔案的為內容是0X4200開始的,問題來了,但是書裡面解釋之所以跳轉到0XC200的原因是 0x8000+0x42

30自制作業系統——用U盤啟動自制系統

最近試讀了《30天自制作業系統》的前兩章,感覺很有意思。 但是發現裡面寫的系統都是用軟盤啟動的,現在在大多數電腦上已經看不見軟碟機了,所以如果想執行書中的作業系統只能通過qemu(隨書光碟中已經附帶)模擬執行。這樣的話成就感就會少很多,感覺像是在做一個簡單的控制檯程式,相信大多數童鞋都希望能做出一個能在真

30自制作業系統學習-第2

第二天主要學習組合語言與Makefile入門 1:繼續開發 在這裡先給出作者在第二天使用nask編寫程式碼中涉及到的暫存器概念:  AX--accumulator,累加暫存器  CX--counter,計數暫存器  DX--data,資料暫存器  BX--base

30自制作業系統學習-第3

第三天的開發依舊基於彙編和分割槽方面的知識,以及呼叫BIOS中斷,寫入視訊記憶體部分內容。 asmhead.nas: ; haribote-os boot asm ; TAB=4 BOTPAK EQU 0x00280000 ; bootpackのロード先 DSKCA

30自制作業系統學習-第4

1 用C語言寫入記憶體 前三天的學習我們順利讓一個大小1440kb的helloos.img映象檔案執行起來,顯示出hello world字樣,可是這樣的螢幕一片漆黑, 顯示更我們熟悉的windos,linux等系統相去甚遠,這次我們嘗試讓螢幕顯示出一點“顏色”出來,往na

30自制作業系統學習-第7

1 獲取按鍵編碼 如何讓使用者輸入的鍵盤按鍵轉換為對於的字元,只需使用匯編呼叫bios中斷即可實現,我們在naskfuc.nas中編寫好的大量in out介面嘗試呼叫,修改後的int.c中inthandler函式: #define PORT_KEYDAT 0x0060

30自制作業系統學習-第8

1 滑鼠解讀  我們昨天已經能通過滑鼠中斷取得資料了,但是遠遠有這些資料還不夠,我們希望我們能解讀這些資料,使之讓我們的滑鼠游標做出相應的動作,修改bootpack.c裡的HariMain主函式部分: for (;;) { io_cli(); if (fifo

30自制作業系統日誌 第一 小白在努力

第一天 思考好久決定將自己的實驗日誌拿來分享,很喜歡“30天”這本書,希望能幫助到同樣正在探索這本書的童鞋!但是!希望只是給大家一個參考,不要直接複製貼上喲,筆芯❤ 一、實驗主要內容 1、內容1:下載二進位制編輯器 2、內容2:按照書上14頁內容輸入16進位制字

30自制作業系統》 第一 從計算機結構到彙編程式入門

效果圖 相關概念 CPU 中央處理單元,除了與別的電訊號交換以外什麼都不會,對於電訊號只能理解開與關兩種狀態。 CPU就是個整合電路板,它只是忠實地執行電訊號給它的指令,輸出相應的電訊號。 指定位置顯示0還是1等。 CPU最早只是發

30自制作業系統》 day01

效果圖 hello.nas ; hello-os ; TAB=4 DB 0xeb, 0x4e, 0x90 DB "HELLOIPL"

30自制作業系統》學習筆記——第七

         明天就要回學校了,收拾完東西,再在家裡寫下最後一篇筆記。          今天終於迎來滑鼠的控制了!                                   作者一開始先拿鍵盤練手,給出了一個鍵盤的中斷處理程式。其中作者重點指出一句: io

30自制作業系統》讀書筆記Day19

GitHub地址:https://github.com/scusjs/1.cat(type)命令 前面實現列出檔案目錄命令,這裡該實現顯示檔案內容命令了,即cat(windows下為type)。 回憶前面的FILEINFO結構體,其中clustno表示檔案從磁碟上哪個扇區開

30自制作業系統》學習筆記——第二

第二行的意思是,如果想製作檔案ipl.bin,就先檢查一下ipl.nas和Makefile這兩個檔案是否都準備好了。後面出現了一個問題,作者說開啟console,輸入make-r ipl.nas但是我照做沒有用,後來自己改輸make ipl.nas就成功了,不知是何原因。Makefile的原理如下,它像一個指

30自制作業系統之第15 多工(1)

多工的本質是利用定時器和far跳轉在任務之間進行切換,具體來說,一開始先執行main函式(就是處理我們的滑鼠、鍵盤和定時器等事件),0.02s後定時器超時,執行如下語句:farjmp(0, 4 * 8

30自制作業系統》避坑排雷指南和命令大全

前言         《30天自制作業系統》是日本Coder川合秀實先生的著作,對於想了解作業系統原理或者有志於底層開發的同學們好處多多。近幾日我開始閱讀這本著作,順便製作一個避坑排雷指南,防止在無用的事情上浪費時間,附帶收集一下常用命令,方便自己同時分享出來

30自制作業系統筆記第4

用C語言實現記憶體讀入 條紋實現‘ void io_hlt(void); void write_mem8(int addr, int data); void HariMain(void) { int i; //變數宣告,i是一個32位的整數

30自制作業系統---第3

一,製作真正的IPL(啟動程式裝載器) 今天的目的是將昨天的啟動程式裝載器來裝載程式。         ①:磁碟最初的512位元組是啟動區。為了裝載下一個512位元組內容的程式,對之前的程式進行修改,得到了今天的harib00a程式;    &nb

30自制操作系統(一)從計算機結構到匯編程序入門

ios 是什麽 program 信號 解釋 根目錄 自己 保存 音樂 學習這本書不代表我要親自動手把這本書中的代碼敲一遍哦,只是借機來學習一下操作系統。之前有段時間也在看操作系統的知識,怎麽說呢之前的看的書都是偏講理論多一些,對於我這個非科班出身的來說,由於之前的計算機知識

30自制操作系統(二)匯編語言學習與Makefile入門

-c 如何 wid 開發 大小端 bio strong 入門 小端 1 介紹文本編輯器 這部分可直接略過 2 繼續開發 helloos.nas中核心程序之前的內容和啟動區以外的內容先不講了,因為還涉及到一些軟盤方面的知識。然後來講的是helloos.nas這個文件 ; h