網頁

2019年7月11日 星期四

自製64位元作業系統08──正式移植到硬碟

我們的系統已經在軟碟一段時間了,是時候移動到硬碟了。其實我們之前的程式很容易就可以移到硬碟。不過我們要加一段有關硬碟分割的資訊的東西在裡面。
首先,我們先處理程式的方面。我們要把在16bits真實模式下的讀取硬碟的程式參數,全部改成硬碟,否則他還是會停在軟碟的時代。(第一顆)硬碟的編號是0x80。並且,我們把這個檔案命名為mbr.S,他只負責讀取第3、4個磁區的程式,之後直接跳轉到下一段程式。之後還幫我們這個假的60MiB硬碟,做了一個分割區(也是唯一一個)。
.code16
.section .text
# Init all the registers
xorw %ax, %ax
xorw %bx, %bx
xorw %cx, %cx
xorw %dx, %dx

movw $0x7C0, %ax
movw %ax, %es
movw %ax, %ds
movw %ax, %ss

# Reset Disk (int 0x13, ah = 0x0, dl = 0x80 (first disk))
movb $0, %ah
movb $0x80, %dl
int $0x13

# Read Number 3, 4 (CHS)
# (int 0x13, ah = 0x2, al = 2, ch = 0, cl = 3, dh = 0, dl = 0x80, ES:BX = 0x7E00)
movw $0x200, %bx
movb $0x2, %ah
movb $0x2, %al
movb $0x0, %ch
movb $0x3, %cl
movb $0x0, %dh
movb $0x80, %dl
int $0x13

jc ERROR
ljmp $0x7e0, $0x0
ERROR:
jmp .
.org 0x1BE, 0x0
.byte 0x80
.byte 0x0
.byte 0x0
.byte 0x0
.byte 0x83
.byte 0
.byte 0
.byte 0
.long 2
.long 122878
.org 0x1FE, 0x0
.byte 0x55
.byte 0xAA
我們在之後的東西就預計把我們當時製作的Ext2檔案系統刪除,改利用程式生成了。 不過我們必須自己寫一段硬碟的分割MBR。我們就預計之前的檔案就直接當作第一個分割區了。其實我們以前的檔案也有修改一下下,主要就是要把記憶體改變,因為我們改讀取到0x7E00了。
目前的程式碼:https://github.com/TNPLR/nos/tree/0.8.2
在QEMU測試的畫面:




👉【幫我們一個忙!】👈

👋如果您喜歡這篇文章,請在下方按5個Like!
 ❤您的支持是我們最大的動力!

您只要登入帳號(Facebook、Google),在下方按5個Like,我們就會收到來自LikeCoin基金會的贊助。
您只需要支持我們,完全不會花到錢!