2009年10月18日 星期日

[NASM] BIOS 啟動程序

當電腦的電源開啟後,處理器會進入 reset 狀態,此時:
  1. 所有記憶體的內容會變為 0

  2. CS 的值會被預設為 0FFFF[0]H

  3. IP(Instruction Pointer) 儲存指令的 offset,預設為 0

結合 2 & 3(Code Segment + Offset),可以知道第一個要執行的指令的 memory address 為 0FFFF0H(CS:IP),而這個 memory address 即為 BIOS 的進入點。

BIOS 的常式位於 0FFF0H,他檢查各個 I/O port,並對於存在的設備進行初始化,接著 BIOS 會建立兩個資料區:
  1. Interrupt Vector Table (中斷向量表)
    長度為 1 KB,用來做為當 interrupt(中斷) 發生時,BIOS & OS 用來選擇相對應的 interrupt handler 之用,詳細資料可參考此篇文章

  2. BIOS 資料區
    起始位址為 40[0]H,大小依據設備的多寡而不同。

接著 BIOS 會檢查系統磁碟是否存在,並從系統磁碟下載啟動程式,啟動程式接著從系統磁碟將系統檔案載入 memory,並將控制權交給 OS。

2009年10月9日 星期五

[自動化] 序列埠模擬器(Virtual Serial Port Emulator)

最近開發工作由於沒有實體的設備可以接.....因此要想辦法進行模擬...

而模擬的設備又是走序列埠(serial port),因此只好去找找有沒有免費的模擬器可以用...

上 Google 搜尋「free serial port emulator

果然給我找到一套免費的可以用 => Free Virtual Serial Ports Emulator

目前的版本是 0.936.4.687,希望這好東西可以持續的推陳出新囉!

我使用的情境如下:

  1. 建立的 Device Type 為 pair (假設為 COM2 + COM3)

  2. Modbus Slave 模擬程式連結 COM2

  3. 程式向 COM3 進行 pooling

這樣就很完美的連結起來啦! 

PS. 這套軟體無法作序列埠的相關設定,例如:Baud Rate。是比較可惜的地方,希望未來可以加入這功能囉!