查看完整版本 : Weekend 寫個 8086 Assembler in Haskell (5):VirtualBox

assembly.jc 2019-5-4 20:25

初步測試完成,可以寫個 Program 玩下。當然,這些 real mode program 唔可以係 windows 行,但可以直接係 VirtualBox 行而唔需要 OS。但個 Program 唔可以大過 512 bytes。對,就是 boot sector,system boot 機時會讀入 floppy disk 頭個 512 bytes。只要將 Program 放係 boot sector,virtualbox 啟動時就會執行它。

assemble 和 create bootdisk 嘅 code:

boot sector 係無 format 的,所有 binary 都係順序執行,如果個 Program 唔夠 512 bytes 就用 0 填補,因為 system 一定要讀入 512 bytes 才會啟動,所以點解會有以下這一句:

bootSector bs = bs ++ replicate (512 - length bs) 0

bs 是 Program code,唔夠512 bytes就補 0。

ShowChar.hs 會生成 _bin/showchar.img,只要將它 attach 去 virtualbox 就可以:

[[i] 本帖最後由 assembly.jc 於 2023-10-22 03:36 編輯 [/i]]

form5 2019-5-5 19:38

that's impressive 

鄉貢仁 2019-5-5 19:57

唔識睇,Jc 果然係高手!assembly 在下一早忘卻大部份了。

8086 asm 顯示字元,我暫時只識用下面方法。
[url]https://stackoverflow.com/questions/44747002/displaying-characters-with-dos-or-bios[/url]

[[i] 本帖最後由 鄉貢仁 於 2019-5-5 09:37 PM 編輯 [/i]]

assembly.jc 2019-5-5 22:22

[quote]原帖由 [i]鄉貢仁[/i] 於 2019-5-5 07:57 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=498841047&ptid=28197436][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
唔識睇,Jc 果然係高手!assembly 在下一早忘卻大部份了。

8086 asm 顯示字元,我暫時只識用下面方法。
[url=https://stackoverflow.com/questions/44747002/displaying-characters-with-dos-or-bios]https://stackoverflow.com/questions/44747002/displaying-characters-with-dos-or-bios[/url] ... [/quote]
咪用咗 link 入面嘅,0a, int 10h
[list][*]AH=0Ah – Write Character Only at Cursor Position[/list]
DOS display character 嘅 interrupt 會自動將 cursor 移去下一格,但 bios 唔會,要自已移,所以多咗 move cursor 嘅 interrupt。
啱啱 update 左 ShowChar.hs,Haskell 可以用 Monad 去 implements Domain Specific Language (DSL),雖然,唔係正規嘅做法,但效果唔錯,睇落去同普通 assembly 無乜分別,但它是 Haskell 來的!! 依家應該易睇 d。

[[i] 本帖最後由 assembly.jc 於 2023-10-22 03:37 編輯 [/i]]
頁: [1]
查看完整版本: Weekend 寫個 8086 Assembler in Haskell (5):VirtualBox