30天自制OS笔记
谛听-
线上幽灵
展开
-
2、制作启动区 IPL
将heloos.nas后半部分删掉,因为启动区只需要最初的512字节,并将文件名改为ipl.nas ipl.nas中的内容: ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以下这段是标准FAT32格式软盘专用的代码 JMP entry DB原创 2015-12-31 14:44:32 · 1306 阅读 · 0 评论 -
10、叠加管理
叠加处理 在画面上进行叠加显示,类似于将绘制了图案的透明图层叠加在一起,最上面的小图层用来描绘鼠标指针。同时通过移动图层实现鼠标指针的移动以及窗口的移动。 sheet.c#define MAX_SHEETS 256 //图层数最多为256 struct SHEET //透明图层 { unsigned char *buf; //用来记录图层上所描原创 2016-01-05 18:44:31 · 431 阅读 · 0 评论 -
9、内存管理
内存容量检查 bootpack.c节选//内存检查 i = memtest(0x00400000, 0xbfffffff) / (1024 * 1024); sprintf(s, "memory %dMB", i); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 32, COL8_FFFFFF, s);///////////////原创 2016-01-04 19:20:51 · 475 阅读 · 0 评论 -
8、鼠标控制与32位模式切换
鼠标解读 bootpack.c节选mouse_phase = 0; /* 进入到等待鼠标的0xfa的状态 */ for (;;) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) io_stihlt(); else原创 2016-01-03 20:16:00 · 609 阅读 · 0 评论 -
7、FIFO与鼠标控制
获取按键编码 修改int.c中的inthandle21#define PORT_KEYDAT 0x0060 //从编号为0x0060设备输入的8位信息是按键编码/* 来自 PS/2 键盘的中断 */ void inthandler21(int *esp) //将接收到的按键编码显示在画面上 { struct BOOTINFO *binfo = (struct BOOTINFO *原创 2016-01-03 15:44:05 · 551 阅读 · 0 评论 -
6、分割编译与中断处理
分割源文件 bootpack.c#include "bootpack.h" #include "dsctbl.c" #include "graphic.c" #include <stdio.h>void HariMain(void) //程序从此处开始运行,函数名不能改 { struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0;原创 2016-01-02 19:33:30 · 742 阅读 · 0 评论 -
5、结构体、文字显示与GDT/IDT初始化
接收启动信息 bootpack.c节选void HariMain(void) //程序从此处开始运行,函数名不能改 { char *vram; //BYTE类型地址 int xsize, ysize; short *binfo_scrnx, *binfo_scrny; //WORD类型地址 int *binfo_vram; //DWORD类型地址 i原创 2016-01-01 22:19:31 · 832 阅读 · 0 评论 -
4、C语言与画面显示的练习
用C语言实现内存写入 这次想要再画面中加点东西,C语言中无直接写入指定内存地址的语句,所以在naskfunc.nas中添加一些东西; naskfunc ; TAB=4 [FORMAT "WCOFF"] ; 制作目标文件的模式 [INSTRSET "i486p"] ; 用来告诉nask,这个程序是给486用的,这样EAX就会被解释成寄存器名。原创 2016-01-01 16:10:52 · 854 阅读 · 0 评论 -
3、进入32位模式并导入C语言
之前的IPL(Intial Program Loader)并没有装载程序,接下来通过之前的IPL装载程序,读入磁盘内容,完成真正的IPL。 ; hello-os ; TAB=4 CYLS EQU 10 ; 相当于c语言中的#define,声明常数,CYLS = 10 ORG 0x7c00 ; 指明程序的原创 2015-12-31 22:31:17 · 1344 阅读 · 2 评论 -
1、 hello world
将OS\projects\01_day\helloos1”文件夹复制到”OS\tolset”文件夹下 进入helloss1文件夹,将helloos.nas删除,新建一个helloos.nas,内容为: ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以下这段是标准FAT32格式软盘专用的代码原创 2015-12-30 23:21:47 · 565 阅读 · 0 评论 -
11、制作窗口
显示窗口和绘制鼠标的原理一样 bootpack.c节选void make_window8(unsigned char *buf, int xsize, int ysize, char *title) { static char closebtn[14][16] = //关闭按钮 { "OOOOOOOOOOOOOOO@", "OQQQQQQQQQQ原创 2016-01-05 21:57:01 · 425 阅读 · 0 评论