30天制作操作系统学习笔记
qq511714326
这个作者很懒,什么都没留下…
展开
-
30天自制操作系统学习-第1天
第一天 1 批处理文件:直接由DOS命令行解释执行的文件,通常后缀名为.bat或.cmd。 2 镜像文件:.img后缀的文件,可用于制作操作系统文件,一个3.5英寸的软盘容量为1440k。 3 nask:作者自己制作的汇编代码编译器,代码与nasm代码相差...原创 2018-09-18 23:01:50 · 17802 阅读 · 12 评论 -
30天自制操作系统学习-第9天
1 整理源文件 昨天对鼠标键盘的控制函数都放在了HariMain主函数中,今天我们先将这些功能独立一个对应的C文件中即可。修改后的文件目录结构:只需在bootpack.h头文件中声明即可:2 内存管理高速缓存----维基百科:Cache一词来源于1967年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义,用于计算机...原创 2018-10-08 11:33:43 · 799 阅读 · 0 评论 -
30天自制操作系统学习-第15天
多任务bootpack.c:/* bootpack*/#include "bootpack.h"#include <stdio.h>void make_window8(unsigned char *buf, int xsize, int ysize, char *title);void putfonts8_asc_sht(struct SHEET *sht, in...原创 2018-10-14 10:48:13 · 1188 阅读 · 5 评论 -
30天自制操作系统学习-第8天
1 鼠标解读 我们昨天已经能通过鼠标中断取得数据了,但是远远有这些数据还不够,我们希望我们能解读这些数据,使之让我们的鼠标光标做出相应的动作,修改bootpack.c里的HariMain主函数部分: for (;;) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) {...原创 2018-10-07 12:28:24 · 842 阅读 · 0 评论 -
30天自制操作系统学习-第14天
1 提高分辨率修改asmhead.nas画面模式的设定,只考虑支持QEMU模拟器的显卡:; 设定画面模式 MOV BX,0x4101 ; VBE的640x480x8bi彩色 MOV AX,0x4f02 INT 0x10 MOV BYTE [VMODE],8 ; 记下画面模式,参照C语言 MOV WORD [SCRNX],640 MOV WORD [...原创 2018-10-13 11:19:39 · 1189 阅读 · 0 评论 -
30天自制操作系统学习-第7天
1 获取按键编码如何让用户输入的键盘按键转换为对于的字符,只需使用汇编调用bios中断即可实现,我们在naskfuc.nas中编写好的大量in out接口尝试调用,修改后的int.c中inthandler函数:#define PORT_KEYDAT 0x0060void inthandler21(int *esp){ struct BOOTINFO *binfo = (stru...原创 2018-10-06 13:54:30 · 1348 阅读 · 0 评论 -
30天自制操作系统学习-第6天
1 分割源文件观察我们昨天写好的bookpack.c主文件,发现它已达到三百多行,这样对不利于我们的维护,为此,我们将其对os功能除了的函数进行分类,独立到一个C文件中。而且bookpack主函数中对于函数的声明部分未免有点过于庞大,我们使用C中的头文件这一概念,独立出一个bookpack.h头文件,对于我们需要使用到的一些功能函数进行声明,这样我们在bookpack.c中只需#include...原创 2018-10-05 11:57:03 · 1236 阅读 · 0 评论 -
30天自制操作系统学习-第13天
1 简化字符串显示将HariMain中显示字符串的步骤:1 :设置背景色2:描绘字符串3:刷新画面我们简化这一过程,封装为一个用于字符串显示系列操作的putfont_asc_sht函数。这时,主函数HariMain里只需调用传参即可:2 重新调整FIFO缓冲区在HariMain主函数中我们判断计时器的状态,是否超时,其中的判断部分:倘若有一百多个计时...原创 2018-10-12 10:42:02 · 579 阅读 · 0 评论 -
30天自制操作系统学习-第5天
1 保存启动信息接受启动信息,我们以指针形式取得asmhead.nas中的信息保存,在系统出现故障时仍有余地还原。并且将初始化画面的代码封装为一个函数init_screen,便于维护,修改后的bootpack.c:void io_hlt(void);void io_cli(void);void io_out8(int port, int data);int io_load_efla...原创 2018-10-04 13:43:43 · 791 阅读 · 0 评论 -
30天自制操作系统学习-第4天
1 用C语言写入内存前三天的学习我们顺利让一个大小1440kb的helloos.img镜像文件运行起来,显示出hello world字样,可是这样的屏幕一片漆黑,显示更我们熟悉的windos,linux等系统相去甚远,这次我们尝试让屏幕显示出一点“颜色”出来,往naskfunc.nas里添加一个我们用来显示颜色的函数吧:_write_mem8: ; void write_mem8...原创 2018-10-03 14:29:18 · 1208 阅读 · 0 评论 -
30天自制操作系统学习-第12天
定时器定时器的原理:每隔一段时间往CPU发送中断信号,因此CPU才不用自己去计量时间。在处理一些程序的时候,我们对程序设定一个时间,程序运行后,我们nasfunc.nas中定时器的中断:_asm_inthandler20: PUSH ES PUSH DS PUSHAD MOV EAX,ESP PUSH EAX MOV AX,SS MOV DS,AX...原创 2018-10-11 09:01:47 · 430 阅读 · 0 评论 -
30天自制操作系统学习-第3天
第三天的开发依旧基于汇编和分区方面的知识,以及调用BIOS中断,写入显存部分内容。asmhead.nas:; haribote-os boot asm; TAB=4BOTPAK EQU 0x00280000 ; bootpackのロード先DSKCAC EQU 0x00100000 ; ディスクキャッシュの場所DSKCAC0 EQU 0x00008000 ; ディスク...原创 2018-10-02 12:32:41 · 1798 阅读 · 5 评论 -
30天自制操作系统学习-第2天
第二天主要学习汇编语言与Makefile入门1:继续开发在这里先给出作者在第二天使用nask编写代码中涉及到的寄存器概念: AX--accumulator,累加寄存器 CX--counter,计数寄存器 DX--data,数据寄存器 BX--base,基址寄存器 这四个为通用寄存器,其中AX16位寄存器可以拆分为AH8位寄存器和AL8位寄存器使用,CX,DX,BX同理...原创 2018-10-01 12:51:36 · 3455 阅读 · 2 评论 -
30天自制操作系统学习-第10天
1 内存管理(续) 我们第一件事依旧是整理我们的bootpack.c主文件,发现它在已长达200多行,我们分离出部分到memoy.c函数中,并且对内存管理采用向上取整的策略,对部分零散的内存得以利用。新加的memory.c:/* 内存管理 */#include "bootpack.h"#define EFLAGS_AC_BIT 0x00040000#define CR0_C...原创 2018-10-09 10:03:49 · 749 阅读 · 0 评论