kernel.asm [
bits32]
[global
start
];我們必須匯出
start
這個入口,以便讓鏈結器識別 ,
[extern
_ya_main
];用到本檔案外定義的函式 在
kernel.c
jmpstart
start:
call
_ya_main
;呼叫c
jmp$
kernel.c
#include "..\include\graph.h"
#include "..\include\pciprobe.h"
unsigned
short
color ;
void
ya_main()
//ya_draw_chars( 250, 50, "北橋存在
" , color) ;
pciprobe();
//ya_draw_4bit_bmp(500 , 20 , 0x68400) ;
netcardprobe();
// 顯示記憶體中
0x400120
開始的數值,以
16進製制
0x顯示,每行八個,共三行
char*b
=(char
*)0x400120;
show_data(b
,8,0
,40,color );
b =b+
0x20
;//下一行八個雙字
8x4 = 32 = 0x20
show_data(b
,8,0
,60,color );
netinitial
();
} graph.c
#include "..\include\graph.h"
unsigned
int*
addr =(
int*)
0x10050;
// 顏色合成函式
unsigned
short
rgb_mix
(unsigned
charr ,
unsigned
charg ,
unsigned
charb )
sa;
}ua;
ua.sa.
r =r >>3;
ua.sa
.g =g
>>2;
ua.sa
.b =b
>>3;
returnua.
color ;
}
// 畫點函式
void
draw_dot
(unsigned
intx
,unsigned
inty
,unsigned
short
color )
// 顯示英文
void
ya_draw_english
(unsigned
intx
,unsigned
inty
,unsigned
intaddr_in_font
,unsigned
short
color )
} ta
++;// 顯示下一行
tb =x
; }
}
// 顯示漢字
void
ya_draw_chinese
(unsigned
intx
,unsigned
inty
,unsigned
intaddr_in_font
,unsigned
short
color )
} }ta
++;// 顯示下一行
tb =x
; }
}
// 顯示字串
void
ya_draw_chars
(intx,
inty
,char
*chars
,unsigned
short
color)
else }
} void
ya_draw_4bit_bmp
(unsigned
intx
,unsigned
inty
,unsigned
intaddr)
;//調色盤值
intlx =x ;
//每行要從這裡開始,保留這個值
int*ta =(
int*)(
addr
+0xa);
//位圖資料開始偏移量 在第
0xa位元組共四位元組
int*tb =(
int*)(
addr
+0x22);
//位圖資料長 在第
0x22
位元組共四位元組
int*width =(
int*)(
addr
+0x12);
//點陣圖寬 在第
0x12
位元組共四位元組
int*height =(
int*)(
addr
+0x16);
//點陣圖高 在第
0x16
位元組共四位元組
inttd ;
//一行要讀的位元組數
intte ;
//補幾個位元組
inttf ;
//圖寬
tf =*
width ;
switch(tf
%8)
inttc =
td +
te ;
char
*string =(
char
*)(addr
+*ta
+*tb-tc
);//資料從最末端
-32位元組處開始
for(inti=
0;i<
*height ;i
++)
unsigned
char
c2 =
ch &
0xf;
//取得低四位
pa =color[c2
];//取得調色盤的對應顏色值 if
(pa!=0xffff)
string++;
x++;
}string
=string
+te -tc
*2;//必須是四個位元組寬,補
x個位元組,然後後退
xx位元組 x
=lx ;
y++; }
} //讀記憶體值
,n是要顯示的個數
void
show_data
(char
*string
,intn ,
intx
,inty ,
unsigned
short
color )
//0的
ascii
值為0x30
else
//a+0x57 = 0x61,正是小a的值
ya_draw_english(x
,y ,pos
,color );
x +=8
; if(
lo4
<
0xa)
//0的
ascii
值為0x30
else
//a+0x57 = 0x61,正是小a的值
ya_draw_english(x
,y ,pos
,color );
x +=8
; *string
--; }
x +=16;
//多加乙個
8,中間有空格好看
string
=string +8
;//前面減了4再加
8相當於加
4,指向下乙個雙字
,*string = *string + 8
是向其指向的值加8
} }
作業系統與網路實現 之二十 丙
port.c unsigned char readb unsigned shortp 讀位元組8位 unsigned short readw unsigned shortp 讀字16位 unsigned intreadl unsigned shortp 讀雙字32位 void writeb unsi...
作業系統 作業系統的設計與實現
系統設計的首要問題是定義目標和規範。從高層來說,系統設計取決於所選硬體和系統型別 批處理 分時 單使用者 多使用者 分布式 實時或通用。除了最高設計層外,需求可能很難說清,但需求可以分為兩類 使用者目標和系統目標。使用者要求系統具有一定的優良效能 系統應該易於學習和使用 可靠 安全和快速。研發人員為...
作業系統與網路 2019 1 30
void cmodifymemory firstfind dword nfindvalue 6.完成 findonepage 函式,首先用乙個陣列來儲存查詢到的內容 dword sz buffer 1024 7.讀程序位址空間的內容,讀失敗則返回 if 0 readprocessmemory m h...