1. 建立開發環境
這一步非常的簡單。
將masm613和vc15的壓縮包分別解壓到e:masm615和e:msvc15目錄下。你也可以放到其他目錄下,根據自己的情況而定,但是下面用到的編譯命令需要作相應的修改。也不需要添加或修改任何的環境變數。
2. IBM PC的啟動及當時的內存使用情況
這一部分內容已經是老生常談了,但又不能不說。我們只說從硬碟引導的情況。
當BIOS經過POST(Power On Test Self)後,將硬碟MBR讀到內存0x0000:0x7C00的位置,然後從這里開始執行。一般的情況,MBR將選擇活動分區進行操作系統的啟動。在MBR開始執行時,內存使用的情況如下圖所示,地址數據用16進製表示:
這已經是老掉牙的內容了,但是,在20年前卻十分流行。如果想更詳細的了解這方面的內容,找本講解DOS的書看看吧。
我們自己的操作系統將被載入到0x1000:0x0100。這不是必需或者必然的,是人為選擇的,你也可以將其放在0x4321:1234等其他地方。但是,上圖中註明有其他用途的內存區域,應該保留,否則,你會後悔的。
3. 開發操作系統
我們自己的操作系統運行在實模式環境下(如果您不知道什麼是實模式,也請看看20年前出版的當時非常流行的書,或者直接請教當時的前輩高手)。即使你的電腦是P4的CPU,剛啟動時,也只相當於主頻較高的8086而已。但是,沒有關系。
首先,使用匯編語言寫一個框架,文件名是entry.asm:
;
; entry.asm
; Copyright (C) 2004, Tian XiangYuan
;
.MODEL TINY,C
.386p
option expr32
option casemap:none
cmain PROTO NEAR C
.CODE
ORG 0100h ;偏移地址
_start:
jmp begin
nop
DB 'TianXiangYuan',0 ;the magic of my os
begin:
cli
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0FFFFh
sti
call cmain ;調用C語言寫的主函數
mov ax,4c00h ;調用DOS的功能(為了調試),與我們自己的操作系統無關
int 21h
這段代碼非常簡單,應該沒有什麼問題。
已經說了,操作系統將從0x1000:0x0100載入,說是無心,實則有意。我們知道,TINY模式的程序,在DOS下運行時,其起始地址就是0x0100,前面的256Byte是參數部分。如果直接將操作系統在系統啟動時載入到0x1000:0x0100,調試時非常麻煩。我們將其起始地址設為0x0100,使其可以在DOS下運行(這也是在程序的最後包含int 21h指令的原因),確認正確無誤後,再進行下一步的開發。
下面再看C語言的代碼,文件名是main.c:
……
static void InitShell()
{
}
void cmain()
{
InitShell();
TermShell();
}
顧名思義,其中實現了一個簡單的shell。因為該程序本身是操作系統的一部分,所以,平時經常使用的一些C庫函數,在這里就不能使用了。總之,一切都要自己動手實現。幸好,在實模式下,幾乎所有的設備的驅動都包含在BIOS中了,我們可以直接使用。否則,連從鍵盤讀一個鍵值這樣的事都需要自己寫鍵盤的驅動程序,實在太難了。也是這個原因,我們自己的操作系統沒有將CPU轉到保護模式下,有心之人可以試試。
下面的事情幾乎都可以使用C語言實現了。
第一,初始化顯示模式。系統啟動時,顯卡已經被初始化成3模式了,就是80X25的彩色模式(除非你的顯示器是單色顯示器),我們不需要再做什麼了。當然,你也可以將顯卡設成VGA甚至SVGA模式,只要你的BIOS和顯卡支持。
第二,實現一個具有簡單交互功能的shell。代碼不全,請自己補齊,或參看附件。
/*
*從鍵盤讀一個字元,如果沒有輸入,則等待;返回值的低位元組為asii碼,高位元組為鍵盤掃描碼
*/
static int getch()
{
int chr=0;
__asm
{
mov ah,00h
int 16h
mov chr,ax
}
return chr;
}
/*
*使用TTY模式向屏幕輸出一個字元
*/
static void putch(unsigned char key)
{
__asm
{
mov bh,0
mov al,key
mov ah,0Eh
int 10h
}
}
#define KEY_BACKSPACE 0x08
#define KEY_ENTER 0x0D
#define KEY_NEWLINE 0x0A
#define KEY_ESCAPE 0x1B
static int printk(const char* str,...)
{
…… //給大家一點空間,自己實現吧
}
static void endline()
{
putch(KEY_NEWLINE); //Line Feed (LF)
putch(KEY_ENTER); //Enter (CR)
}
static char msg_prompt[]="CMD:";
static void deal_cmd(char* cmd_line,int cmd_len)
{
…… //也請大家自己實現吧,例如,可以實現help,dir,cls,halt等命令
…… //其實,就是字元串比較的過程
}
static void TermShell()
{
char cmd_line[80]={0,};
int cmd_len=0;
endline();
printk(msg_prompt,sizeof(msg_prompt));
for (;;)
{
cmd_line[cmd_len]=getch();
switch(cmd_line[cmd_len])
{
case KEY_ENTER:
if (cmd_len>1)
deal_cmd(cmd_line,cmd_len);
//break;
case KEY_ESCAPE:
cmd_len=0;
endline();
printk(msg_prompt,sizeof(msg_prompt));
break;
case KEY_BACKSPACE:
if (cmd_len>0)
{
putch(0x08);
putch(' ');
putch(0x08);
cmd_len--;
}
break;
default:
putch(cmd_line[cmd_len]);
cmd_len++;
}
}
}
更復雜、功能更強大的方法請參考BIOS的相關文檔。也請大家發揮想像力,不斷的擴展功能。說心裡話,這個「操作系統」比dos還原始!但畢竟是自己的操作系統。
『貳』 電腦系統是如何製作的
開機放入光碟,按Del進BIOS,找到Advanced Bios Features(高級BIOS參數設置)按回車進Advanced Bios Features(高級BIOS參數設置)界面。找到First Boot Device ,用PgUp或PgDn鍵,將HDD-O(硬碟啟動)改為CDROM(光碟機啟動),按ESC,按F10,按Y,回車,保存退出。 這時要注意觀察,啟動時計算機會先檢測光碟機,屏幕下面出現一行字元,意思就是讓你按任意鍵進入光碟啟動。按一下,聽到光碟機開始瘋轉,裝系統的過程就正式開始了! 裝系統中: 看屏幕中的提示,因為都是中文的所以幾乎不需要介紹什麼。首先需要用戶選擇是安裝新的操作系統還是修復,選擇安裝新的操作系統,然後按F8同意那些協議,出現盤符選擇界面。 用鍵盤上下鍵移動游標至你要安裝的盤符上,按「D」鍵,系統會提示說刪除該盤將會刪除所有資料,不管它,接著按「L」鍵再確定刪除。完成後屏幕返回到剛才的界面。然後選擇「在當前盤安裝WindowsXP」(大概意思,原文不記的了)後按回車,系統提示要格式化該盤。選擇「快速NTFS方式」格式化,此時出現格式化界面,稍候等進度條到100%時計算機開始自動裝入光碟機中的安裝文件,大概時間8分鍾左右(視光碟機速度而定),完成後系統自動重啟。 注意,此時要將光碟機里的安裝盤取出,為的是避免重啟後又自動讀取。 重啟後再次進入安裝界面,此時將安裝盤再放入後安裝繼續,幾乎不需要你做任何設置,點「下一步」就可以。不過中間有一個輸入序列號的過程得動動手。 這個過程大概40分鍾左右,其間屏幕會顯示一些關於windowsXP的相關功能信息,可以留意一下。完成後系統提示將安裝盤取出。你拿出來後,重啟,順便進BIOS將開機啟動順序改回至硬碟啟動,基本上就完成安裝過程了! 裝系統後: 一般在進入系統後常用硬體的驅動都已經安裝好,但不是全部。這時就需要用戶自己來安裝。首先查看機器哪些驅動未安裝!右鍵點擊「我的電腦」,選「屬性」,在「硬體」標簽里點擊「設備管理器」,凡是在設備前面有一個問號圖標的均表示該設備有問題。雙擊,按上面的提示將驅動安裝好。直到前面的「問號」全部消失為止。 需要裝的驅動一般有顯卡、音效卡、網卡、貓,一些比較高級的機器還有紅外、藍牙等適配器的驅動。 下面就是對系統的一些優化設置,如果你的機器配置不高,建議按我說的做。 重啟, 1> 右鍵單擊屏幕,選擇「屬性」。點擊「外觀」標簽,在「外觀與按鈕」的下拉菜單中選擇「Windows經典樣式」,然後在「設置」標簽里,按個人喜好調整屏幕解析度大寫,一般為1024*768。如果你用的是普通CRT顯示器,需要再點「監視器」標簽,將「屏幕刷新頻率」調整至「85赫茲」,點確定!屏幕看起來是不是舒服多了? 2> 右鍵單擊任務欄,選擇「屬性」,在「任務欄」標簽項中將「顯示快速啟動」前的復選框選中。然後再點擊「「開始」菜單」標簽,將菜單類改成「經典「開始」菜單」,點「確定」,看看現在的樣子是不是要舒服點呢?( 3> 右鍵單擊我的電腦,選擇「高級」標簽。單擊性能項里的「設置」按鈕。在視覺效果項里先點擊「調整為最佳性能」,然後在下面的復選項里選中「在文件夾中使用常見任務」。
贊同11|評論(2)
『叄』 電腦如何自己做系統
我自己有寫的教程ifloveu.com
『肆』 電腦系統怎麼做
在開始回答你的問題之前,先看看程序的發展歷史,請留意有關儲存器和數據的描述:
1834 年:Babbage 設想製造一台通用分析機,在只讀存儲器(穿孔卡片)中存儲程序和數據 。Babbage在以後的時間里繼續他的研究工作,並於1840 年將操作位數提高到了40 位,並基本實現了控制中心(CPU)和存儲程序的設想,而且程序可以根據條件進行跳轉,能在幾秒內做出一般的加法,幾分鍾內做出乘、除法。
1890 年:美國人口普查部門希望能得到一台機器幫助提高普查效率。Herman Hollerith (後來他的公司發展成了IBM 公司)借鑒Babbage 的發明,用穿孔卡片存儲數據,並設計了機器。結果僅用6 周就得出了准確的人口統計數據(如果用人工方法,大概要花10 年時間)。
1935 年:IBM 推出IBM 601 機。這是一台能在一秒鍾內算出乘法的穿孔卡片計算機 。這台機器無論在自然科學還是在商業應用上都具有重要的地位,大約製造了1500 台。
1941 年夏季:Atanasoff 和學生Berry 完成了能解線性代數方程的計算機,取名叫"ABC "(Atanasoff-Berry Computer),用電容作存儲器 ,用穿孔卡片作輔助存儲器,那些孔實際上是"燒"上去的,時鍾頻率是60Hz,完成一次加法運算用時一秒。
1943 年1 月:Mark I 自動順序控制計算機在美國研製成功。整個機器有51 英尺長 、5 噸重 、75萬個零部件。該機使用了3304 個繼電器,60 個開關作為機械只讀存儲器。程序存儲在紙帶上 ,數據可以來自紙帶或卡片閱讀器。Mark I 被用來為美國海軍計算彈道火力表。
1943 年9 月:Williams 和Stibitz 完成了"Relay Interpolator ",後來命名為"Model Ⅱ Re-
lay Calculator "的計算機。這是一台可編程計算機,同樣使用紙帶輸入程序和數據。它運行更可靠,每個數用7 個繼電器表示,可進行浮點運算。
真空管時代的計算機盡管已經步入了現代計算機的范疇,但因其體積大、能耗高、故障多、價格貴,從而制約了它的普及和應用。直到晶體管被發明出來,電子計算機才找到了騰飛的起點。
1947 年:Bell 實驗室的William B.Shockley 、 John Bardeen 和Walter H.Brattain 發明了晶體
管,開辟了電子時代新紀元。
1949 年:劍橋大學的Wilkes 和他的小組製成了一台可以存儲程序的計算機,輸入輸出設備仍是紙帶。
1949 年:EDVAC(Electronic Discrete Variable Automatic Computer--電子離散變數自動計算機)--第一台使用磁帶的計算機。這是一個突破,可以多次在磁帶上存儲程序。這台機器是John von Neumann 提議建造的。
1950 年:日本東京帝國大學的Yoshiro Nakamats 發明了軟磁碟 ,其銷售權由IBM公司獲得 。由此開創了存儲時代的新紀元。
1951 年:Grace Murray Hopper 完成了高級語言編譯器。
1951 年:UNIVAC-1 --第一台商用計算機系統誕生,設計者是J.Presper Eckert 和John Mauchly 。
被美國人口普查部門用於人口普查,標志著計算機進入了商業應用時代。
1953 年:磁芯存儲器被開發出來。
1954 年:IBM 的John Backus 和他的研究小組開始開發FORTRAN(FORmula TRANslation) ,1957 年完成。這是一種適合科學研究使用的計算機高級語言。
1957 年:IBM 開發成功第一台點陣式列印機。
好了現在開始吧:
操作系統是什麼呢?說白了就是一套計算機的指令集合,而計算機的指令就是'1010101'之類的機器碼,說到底,『1001010』也是數據,就是可以儲存在介質之中的東東,比如紙質卡片,磁碟,晶元上。對於問題「第一個操作系統如何編寫的呢」,可以歸結為:第一個計算機軟體如何編寫(在這里,請改變對操作系統的神秘感,操作系統也是一個軟體,一個特殊的程序),即是計算機的指令如何記錄下來,並且被計算機執行。那麼答案已經出來了~~,請再次看一下上面的例子,你會有所啟發
還有什麼問題請問吧~~~
還有一個問題回答:「自帶boot」雖然不知道你這是什麼意思(boot程序??),但是可以肯定告訴你,在硬體生產時,「可以」直接把』boot」生產在晶元上,為什麼?如上說,程序就是10100數據,生產商只要在晶元上設置電路的通斷,就可以表示10101001000101 (注意了,這里只是一個例子)
好吧,現在假設我們有電腦,要開發操作系統,但是知道計算機指令
那麼下面的一段程序(示例)我不得不把他寫在紙質筆記本上:
mov ax,0
..
...
這段程序人工翻譯成機器碼,到現在還沒有操作系統:
........
好了操作系統在我的紙上寫好了,我就請求硬體開發商把我的程序刻錄到軟盤上,於是開發商就對照.....把數據刻錄到軟盤上
於是,操作系統開發完畢,只要想辦法被CPU執行就可以了
『伍』 電腦系統如何做
如何重新安裝XP系統(SP1同SP2安裝方法相同)
第一步,設置光碟啟動:
所謂光碟啟動,意思就是計算機在啟動的時候首先讀光碟機,這樣的話如果光碟機中有具有光啟功能的光碟就可以趕在硬碟啟動之前讀取出來(比如從光碟安裝系統的時候)。
設置方法:
1.啟動計算機,並按住DEL鍵不放,直到出現BIOS設置窗口(通常為藍色背景,黃色英文字)。
2.選擇並進入第二項,「BIOSSETUP」(BIOS設置)。在裡面找到包含BOOT文字的項或組,並找到依次排列的「FIRST」「SECEND」「THIRD」三項,分別代表「第一項啟動」「第二項啟動」和「第三項啟動」。這里我們按順序依次設置為「光碟機」「軟碟機」「硬碟」即可。(如在這一頁沒有見到這三項E文,通常BOOT右邊的選項菜單為「SETUP」,這時按回車進入即可看到了)應該選擇「FIRST」敲回車鍵,在出來的子菜單選擇CD-ROM。再按回車鍵
3.選擇好啟動方式後,按F10鍵,出現E文對話框,按「Y」鍵(可省略),並回車,計算機自動重啟,證明更改的設置生效了。
第二步,從光碟安裝XP系統
在重啟之前放入XP安裝光碟,在看到屏幕底部出現CD字樣的時候,按回車鍵。才能實現光啟,否則計算機開始讀取硬碟,也就是跳過光啟從硬碟啟動了。
XP系統盤光啟之後便是藍色背景的安裝界面,這時系統會自動分析計算機信息,不需要任何操作,直到顯示器屏幕變黑一下,隨後出現藍色背景的中文界面。
這時首先出現的是XP系統的協議,按F8鍵(代表同意此協議),之後可以見到硬碟所有分區的信息列表,並且有中文的操作說明。選擇C盤,按D鍵刪除分區(之前記得先將C盤的有用文件做好備份),C盤的位置變成「未分區」,再在原C盤位置(即「未分區」位置)按C鍵創建分區,分區大小不需要調整。之後原C盤位置變成了「新的未使用」字樣,按回車鍵繼續。接下來有可能出現格式化分區選項頁面,推薦選擇「用FAT32格式化分區(快)」。按回車鍵繼續。
系統開始格式化C盤,速度很快。格式化之後是分析硬碟和以前的WINDOWS操作系統,速度同樣很快,隨後是復制文件,大約需要8到13分鍾不等(根據機器的配置決定)。
復制文件完成(100%)後,系統會自動重新啟動,這時當再次見到CD-ROM.....的時候,不需要按任何鍵,讓系統從硬碟啟動,因為安裝文件的一部分已經復制到硬碟里了(註:此時光碟不可以取出)。
出現藍色背景的彩色XP安裝界面,左側有安裝進度條和剩餘時間顯示,起始值為39分鍾,也是根據機器的配置決定,通常P4,2.4的機器的安裝時間大約是15到20分鍾。
此時直到安裝結束,計算機自動重啟之前,除了輸入序列號和計算機信息(隨意填寫),以及敲2到3次回車之外,不需要做任何其它操作。系統會自動完成安裝。
第三步,驅動的安裝
1.重啟之後,將光碟取出,讓計算機從硬碟啟動,進入XP的設置窗口。
2.依次按「下一步」,「跳過」,選擇「不注冊」,「完成」。
3.進入XP系統桌面。
4.在桌面上單擊滑鼠右鍵,選擇「屬性」,選擇「顯示」選項卡,點擊「自定義桌面」項,勾
選「我的電腦」,選擇「確定」退出。
5.返回桌面,右鍵單擊「我的電腦」,選擇「屬性」,選擇「硬體」選項卡,選擇「設備管理器」,裡面是計算機所有硬體的管理窗口,此中所有前面出現黃色問號+嘆號的選項代表未安裝驅動程序的硬體,雙擊打開其屬性,選擇「重新安裝驅動程序」,放入相應當驅動光碟,選擇「自動安裝」,系統會自動識別對應當驅動程序並安裝完成。(AUDIO為音效卡,VGA為顯卡,SM為主板,需要首先安裝主板驅動,如沒有SM項則代表不用安裝)。安裝好所有驅動之後重新啟動計算機。至此驅動程序安裝完成。
『陸』 如何製作電腦系統
首先要了解一些計算機組成原理,需要學一些編程語言譬如C,和匯編語言
可以自己去看看操作系統的原理。可以去學學有關Linux
另外Linux是開源的,你可以去看看系統源代碼。
(這是一個相當龐大的任務,一個人很難完成,很多人一起開發都有難度)