![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
自制操作系统
书法教育1
你付出很多,能量守恒,你也会收获很多,相反你总是想着从别人那里得到更多,自己付出很少,也是能量守恒,你日后会为此付出更多。
展开
-
为什么主引导记录的内存地址是0x7C00?
当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是32KB。我们知道,内存地址从0x0000开始编号,32KB的内存就是0x0000~0x7FFF。 8088芯片本身需要占用0x0000~0x03FF,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号INT 19h的处理程序。)所以,内存只剩下0x0400~0x7FFF可以使用。 为了把尽量多的连续内存留给操作系统,转载 2016-08-16 09:09:31 · 769 阅读 · 0 评论 -
30天自制操作系统第二天笔记 Makefile文件
Makefile的作用就是将我们之前所需的make.bat,run.bat,install.bat这些批处理文件整合到一起写入到该文件中,我们直接用Makefile就可以取代这些文件了。 Makefile文件写法非常简单,首先生成一个不带扩展名的Makefile,然后用文本编辑器写入一下内容: default : ../z_tools/make.exe img# 文件生成方法 ipl.bi原创 2016-08-16 09:59:22 · 1321 阅读 · 0 评论 -
进入32位模式并导入C语言
制作真正的IPL 1.helloos.nas文件及注解; hello-os ; TAB=4; 以下是一段是标准的fat12格式软盘专用的代码 DB 0xeb, 0x4e, 0x90 DB "HELLOIPL" ;启动区的名称可以使任意的字符串 DW 512 ;每个扇区的大小(必?512)原创 2016-08-17 10:07:40 · 991 阅读 · 0 评论 -
30天自制操作系统笔记第4天
用C语言实现内存读入条纹实现‘void io_hlt(void); void write_mem8(int addr, int data);void HariMain(void) { int i; //变量声明,i是一个32位的整数 for (i = 0xa0000; i <= 0xaffff; i++) { write_mem8(i, i&0x0f); /* MOV原创 2016-08-16 11:22:31 · 765 阅读 · 0 评论 -
结构体,文字显示与GDT/IDT初始化
接受启动信息binfo_scrnx = (short *) 0x0ff4; binfo_scrny = (short *) 0x0ff6; binfo_vram = (int *) 0x0ff8; xsize = *binfo_scrnx; ysize = *binfo_scrny;使用结构体struct BOOTINFO { char cyls, leds,原创 2016-08-18 09:33:42 · 571 阅读 · 0 评论 -
鼠标控制与32位模式切换
Day8 鼠标控制与32位模式切换 对HariMain中的数据进行修改enable_mouse(); mouse_phase = 0; /* 进入到等待鼠标的0xfa的状态 */ for (;;) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) {原创 2016-08-22 16:42:20 · 881 阅读 · 0 评论