- شروع کننده موضوع
- #1
Sobh@n
کاربر حرفهای
- ارسالها
- 304
- امتیاز
- 570
سلام دوستان خوبید ؟
خوبم ؟
آقا ما شروع کردیم به نوشتن سیستم عامل ولی نمیدونم با چه امیدی این کارو کردم
ولی خوب بالاخره مجبورم ادامه بدم ...
حالا درباره ساخت خود سیستم عامل توضیح نمیدم ولی میگم که باید C رو بلد باشید چون با C++ خیلی خیلی سخته میشه
خوب میریم سراغ درس ... !
اول از همه ما به یه سری کد نیاز داریم تا به وسیله بوت لودر ما بارگزاری بشن
یه چیزی تو این مایه ها :
تمام کارایی که اینا انجام میدن ، شناسوندن 3 متغیر + برگشته . خوب الان خوب و شیک شد :) . خوب اینجا هم یه سری کار دیگه هست که ما میتونیم انجاموشون بدیم :
هدف اول : (نمایش متن)
الان هیچی خروجی تصویری نداره !! یعنی مشکلش چی میتونه باشه ؟ اگه راستشو بخوای هیچیش نیست . ما به یه صفحه ورودی و خروجی نیاز داریم. (I/O) این آسونترین چیز وساه نوشتنش تو کرنله.(خوراکــه) که فقط باید کاراکتر ascii ساده رو با رنگ کاراکتر تو حافظه بنویسین، همین ...
کاری که شما باید انجام بدین اینه که، بایت ascii رو که نشانش(مشختصاتش) دنبالشه(یعنی بهش چسبیده و پست سرشه) رو درون 0xb8000 قرار بدین. لازیم نیست که شما اینو اونجا قرار بدین ، چون هردفعه که یه کاراکتر رو چاپ میکنین ، شما باید نشانگر متن رو 2 بار توسعه بدین.(بایت کاراکتر + بایت نشانش(مشخصاتش)). پس داریم:
پاک کردن صفحه :
پاک کردن صفحه نمایش هم یکی دیگه از اون کارایه خیلی آسونه که با نمایشگر متن کار داره . برای هرکدوم از کاراکترهای asdii درون متن تصویری، فقط رو صفر تنظیمش کنین و بایت نشانش رو رویه نشان متدوال تنظیم کنین
پس :
الان شما فقط تونستید کاراکتر رو رویه صفر تنظیم کنین و نشان اونو به 0x07 (سفید و سیاه). اما من پیچیده ترین قسمت رو براتون قبلا انجام دادم. (چه کنیم که اند مرامیم). حالا در مورد نشان ها !! اینا دیگه چین ؟
خوب بزارین با دادن تمامی رنگ های مربوطی به متن و نشان ها کارمونو شروع کنیم .:
خیلی خوب ، خیلی باحاله نه ؟ چند تا عدد عجیب و غریب! الان قراره ما با اینا چیکار کنیم ؟ بزارین تا به یه مثال روشنتون کنم.
0x07 سفید رو سیاهه. این یعنی اینکه متن ما الان سفیده و پس زمینه ی ما سیاه. خوب در مورد اونای دیگه چی؟ ااون اعداد سمت راست لیست ما ما یکی هستن ، خیلی خوب ،بزارین بگم مثلا ما متن قرمز و پس زمینه ی سفید میخوایم. چکار باید بکنیم؟ چه عددی میتونه باشه؟ خوب قرمز چهاره و سفید و هم هفته...پس میشه 0x74
چند تا چیز هستش که الان مخ شما رو بدجوری کار گرفته باشه و شما بشدت مشغول فسفر سوزاندن هستین تا بفهمین موضوع از چه قراره...مثلا اینگه چرا رنگ 15-8 ، فقط میتونه پیش زمینه باشه ؟ اگه شما کل لیستو خونده باشی باید یه نکته خیلی مهم رو دیده باشی. متن میتونه چشمک هم بزنه..حالا چجوری چشمک میزنه؟ همه ی اینا به این بستگی داره که با این بیت تنظیم شده یا نه ؟...اومد و این بیت تو کلمه ی پس زمینه قرار گرفت .. ببین ، اینجوری :
111 تو این فقط 7 هست(منظور مقدار متغیری هست که برای نگهداری پس زمینه و پیش زمینه استفاده میشود) که برای این یعنی اینکه برای ایجاد فضای مورد نیاز برای بیت چشمک زن - شما فقط میتونید 7 رنگ لیستمون استفاده کنین ، فهمیدنش خیلی سخته ؟ امیدوارم که نباشه
سرهم بندی کرنل:
سرهم بندی بوت لودر کار بسیار ساده ای هست و تنها کاری که باید انجام بدید اینه که کد منبه C رو سرهم بندی کنیم . همه رو به هم وصل کنین . بعدش بوت لودر رو تو کرنل کپپی کنین (Object Kernel) این یه تصیر از کرنل به شما میده که به وسیله ی اون شما میتونید روی یه وسیله ی قابل بوت مثل فلاپی دیسک بنویسین . بزارین این کارم من براتون آسون تر میکنم. (گام به گام) :
اگه به کمک بیشتری نیاز داشتین به کد هایی که آوردم بیشتر توجه کنید
خوبم ؟
آقا ما شروع کردیم به نوشتن سیستم عامل ولی نمیدونم با چه امیدی این کارو کردم
ولی خوب بالاخره مجبورم ادامه بدم ...
حالا درباره ساخت خود سیستم عامل توضیح نمیدم ولی میگم که باید C رو بلد باشید چون با C++ خیلی خیلی سخته میشه
خوب میریم سراغ درس ... !
اول از همه ما به یه سری کد نیاز داریم تا به وسیله بوت لودر ما بارگزاری بشن
یه چیزی تو این مایه ها :
کد:
In C:
void k_main()
{
int num;
char ch;
char *str="Kernel Loaded";
return;
}
تمام کارایی که اینا انجام میدن ، شناسوندن 3 متغیر + برگشته . خوب الان خوب و شیک شد :) . خوب اینجا هم یه سری کار دیگه هست که ما میتونیم انجاموشون بدیم :
کد:
1-output "Hello, World"
2-clear the screen
3-output colored text to the screen
هدف اول : (نمایش متن)
الان هیچی خروجی تصویری نداره !! یعنی مشکلش چی میتونه باشه ؟ اگه راستشو بخوای هیچیش نیست . ما به یه صفحه ورودی و خروجی نیاز داریم. (I/O) این آسونترین چیز وساه نوشتنش تو کرنله.(خوراکــه) که فقط باید کاراکتر ascii ساده رو با رنگ کاراکتر تو حافظه بنویسین، همین ...
کاری که شما باید انجام بدین اینه که، بایت ascii رو که نشانش(مشختصاتش) دنبالشه(یعنی بهش چسبیده و پست سرشه) رو درون 0xb8000 قرار بدین. لازیم نیست که شما اینو اونجا قرار بدین ، چون هردفعه که یه کاراکتر رو چاپ میکنین ، شما باید نشانگر متن رو 2 بار توسعه بدین.(بایت کاراکتر + بایت نشانش(مشخصاتش)). پس داریم:
کد:
In C:
void _k_main()
{
int num;
char ch;
char *text_video = (char*)0xB8000;
char attrib = 0x07;
char *str="Kernel Loaded";
while(*str!=0)
{
*text_video = *str;
*text_video++;
*text_video = attrib;
*text_video++;
*str++;
}
return;
}
پاک کردن صفحه :
پاک کردن صفحه نمایش هم یکی دیگه از اون کارایه خیلی آسونه که با نمایشگر متن کار داره . برای هرکدوم از کاراکترهای asdii درون متن تصویری، فقط رو صفر تنظیمش کنین و بایت نشانش رو رویه نشان متدوال تنظیم کنین
پس :
کد:
In C:
void clear_screen(char clear_to, char attrib)
{
char *text_video = (char*)0xB8000;
int pos=0;
while(pos<(80*25*2))
{
*text_video = clear_to;
*text_video++;
*text_video = attrib;
*str++;
pos++;
}
}
الان شما فقط تونستید کاراکتر رو رویه صفر تنظیم کنین و نشان اونو به 0x07 (سفید و سیاه). اما من پیچیده ترین قسمت رو براتون قبلا انجام دادم. (چه کنیم که اند مرامیم). حالا در مورد نشان ها !! اینا دیگه چین ؟
خوب بزارین با دادن تمامی رنگ های مربوطی به متن و نشان ها کارمونو شروع کنیم .:
کد:
-{TEXT COLORS}-
FG AND BG
0 = black
1 = blue
2 = green
3 = cyan
4 = red
5 = magenta
6 = brown
7 = white (standard text color)
FG ONLY
8 = dark grey
9 = bright blue
10 = bright green
11 = bright cyan
12 = pink
13 = bright magenta
14 = yellow
15 = bright white
[IBBBFFFF] binary
I = Intensity (blink)
B = Background
F = Foreground
خیلی خوب ، خیلی باحاله نه ؟ چند تا عدد عجیب و غریب! الان قراره ما با اینا چیکار کنیم ؟ بزارین تا به یه مثال روشنتون کنم.
0x07 سفید رو سیاهه. این یعنی اینکه متن ما الان سفیده و پس زمینه ی ما سیاه. خوب در مورد اونای دیگه چی؟ ااون اعداد سمت راست لیست ما ما یکی هستن ، خیلی خوب ،بزارین بگم مثلا ما متن قرمز و پس زمینه ی سفید میخوایم. چکار باید بکنیم؟ چه عددی میتونه باشه؟ خوب قرمز چهاره و سفید و هم هفته...پس میشه 0x74
چند تا چیز هستش که الان مخ شما رو بدجوری کار گرفته باشه و شما بشدت مشغول فسفر سوزاندن هستین تا بفهمین موضوع از چه قراره...مثلا اینگه چرا رنگ 15-8 ، فقط میتونه پیش زمینه باشه ؟ اگه شما کل لیستو خونده باشی باید یه نکته خیلی مهم رو دیده باشی. متن میتونه چشمک هم بزنه..حالا چجوری چشمک میزنه؟ همه ی اینا به این بستگی داره که با این بیت تنظیم شده یا نه ؟...اومد و این بیت تو کلمه ی پس زمینه قرار گرفت .. ببین ، اینجوری :
کد:
blink bg fg
\ _/ _/_
IBBBFFFF
I = Intensity (blink)
B = Background
F = Foreground
111 تو این فقط 7 هست(منظور مقدار متغیری هست که برای نگهداری پس زمینه و پیش زمینه استفاده میشود) که برای این یعنی اینکه برای ایجاد فضای مورد نیاز برای بیت چشمک زن - شما فقط میتونید 7 رنگ لیستمون استفاده کنین ، فهمیدنش خیلی سخته ؟ امیدوارم که نباشه
سرهم بندی کرنل:
سرهم بندی بوت لودر کار بسیار ساده ای هست و تنها کاری که باید انجام بدید اینه که کد منبه C رو سرهم بندی کنیم . همه رو به هم وصل کنین . بعدش بوت لودر رو تو کرنل کپپی کنین (Object Kernel) این یه تصیر از کرنل به شما میده که به وسیله ی اون شما میتونید روی یه وسیله ی قابل بوت مثل فلاپی دیسک بنویسین . بزارین این کارم من براتون آسون تر میکنم. (گام به گام) :
کد:
-{Step by Step}-
1-compile all *.c files
>gcc *.c
2-compile all asm files into a format like aout (not bin, C doesn't
output to bin by default)
>nasm *.asm -f aout
3-link all C files and asm files together into a file(ie:kernel.o)
>ld -T linkscript.ld -o kernel.o a.o b.o c.o
4-compile & copy the bootloader to the front of the kernel object
file(ie:kernel.img)
>nasm boot.asm
>copy /b boot.bin+kernel.o kernel.img
5-write the image file to a bootable device(ie:floppy disk)
>floppyout kernel.img a: -sector 0 -head 0 -track 0
6-now take that bootable device and put it in a microwave oven for
30 seconds, wait for it to melt, and enjoy!
+-------------------------+
| ||===========|| [00:30] |
| || || 7 8 9 |
| || || 4 5 6 |
| || || 1 2 3 |
| || || X 0 X |
| ||===========|| (start) |
+-------------------------+
\_/ \_/
اگه به کمک بیشتری نیاز داشتین به کد هایی که آوردم بیشتر توجه کنید