自制操作系统
文章平均质量分 75
张某人的胡思乱想
这个作者很懒,什么都没留下…
展开
-
P15 14-Desktop and Windows
https://www.bilibili.com/video/BV1tt411s7vQ?t=2400&p=152021.6.23今天解决了不能显示图形问题,原来是VGA里面少了++,造成初始化错误。can not display line for(uint8_t i = 0; i < 25; i++) { crtcIndexPort.Write(i); crtcDataPort.Write(*(registers++)); // for...原创 2021-06-24 00:27:46 · 113 阅读 · 0 评论 -
2021-06-14 操作系统课的一些零散资料
1.学这门课需要什么基础跟准备工作?跟着LMOS一步步上手就好,课程建议按顺序,循序渐进学习。有C语言基础的话,基本毫无压力。????需买硬件,后面会用虚拟机搭建环境:在Ubuntu上使用sudo apt-get install virtualbox-6.1安装一个virtualbox虚拟机软件。随课程进展,会慢慢展开。2.专栏更新节奏和时长?每周更新三篇,预计8月中旬更新结束。每节课根据交付内容不同,时长不等,十几分钟到二十多分钟,一定让你学过瘾。3.配套代码怎么获取?LMOS考虑原创 2021-06-14 22:32:32 · 630 阅读 · 2 评论 -
第10天 叠加处理
第10天 叠加处理1 内存管理(续)(harib07a)https://weread.qq.com/web/reader/38732220718ff5cf3877215k32b321d024832bb90e89958得益于昨天的努力,我们终于可以进行内存管理了。不过仔细一看会注意到,bootpack.c都已经有254行了。笔者感觉这段程序太长了,决定整理一下,分出一部分到memory.c中去。(整理中)……好了,整理完了。现在bootpack.c变成95行了。为了以后使用起来更加方便,我们还是把原创 2021-06-12 21:17:59 · 292 阅读 · 5 评论 -
第9天 内存管理
第9天 内存管理https://weread.qq.com/web/reader/38732220718ff5cf3877215ka3f32db0244a3f390d88bb91 整理源文件(harib06a)刚想改造bootpack.c,却发现为了解决鼠标处理问题而大加修改程序导致程序变大了很多,足足有182行。嗯,程序太长了,怎么看都不舒服,所以笔者决定将程序整理一下。wait_KBC_sendready -> keyboard.cinit_keyboard -> keyboard原创 2021-06-11 21:27:15 · 258 阅读 · 0 评论 -
第8天 鼠标控制与32位模式切换
第8天 鼠标控制与32位模式切换https://weread.qq.com/web/reader/38732220718ff5cf3877215k03a32a4023f03afdbd66a391 鼠标解读(1)(harib05a)好,现在我们已经能从鼠标取得数据了。紧接着的问题是要解读这些数据,调查鼠标是怎么移动的,然后结合鼠标的动作,让鼠标指针相应地动起来。这说起来简单,但做起来呢……事实上编起程序来,也很简单。(笑)我们要先来对bootpack.c的HariMain函数进行一些修改。这次Har原创 2021-06-11 09:56:58 · 257 阅读 · 2 评论 -
第7天 FIFO与鼠标控制
第7天 FIFO与鼠标控制https://weread.qq.com/web/reader/38732220718ff5cf3877215k9f6326602389f61408e3715第7天 FIFO与鼠标控制1 获取按键编码(harib04a)今天我们继续加油吧。鼠标不动的原因已经大体弄清楚了,主要是由于设定不到位。但是,在解决鼠标问题之前,还是先利用键盘多练练手,这样更易于鼠标问题的理解。现在,只要在键盘上按一个键,就会在屏幕上显示出信息,其他的我们什么都做不了。我们将程序改善一下,原创 2021-06-11 01:30:36 · 162 阅读 · 1 评论 -
第6天 分割编译与中断处理
第6天 分割编译与中断处理https://weread.qq.com/web/reader/38732220718ff5cf3877215kc0c320a0232c0c7c76d365a1 分割源文件(harib03a)不经意地看一下bootpack.c,发现它竟然已长达近300行,是太长了点。所以我们决定把它分割为几部分。将源文件分割为几部分的利弊,大致如下。我们先将源文件按下图分割一下看看。分割并不是很难,但有一点很关键。比如如果graphic.c也想使用naskfunc.nas的函数,就必原创 2021-06-10 23:32:22 · 255 阅读 · 0 评论 -
第5天 结构体、文字显示与GDT/IDT初始化
第5天 结构体、文字显示与GDT/IDT初始化https://weread.qq.com/web/reader/38732220718ff5cf3877215k34132fc02293416a75f431d1 接收启动信息(harib02a)在bootpack.c里的,都是将0xa0000呀,320、200等数字直接写入程序,而本来这些值应该从asmhead.nas先前保存下来的值中取。如果不这样做的话,当画面模式改变时,系统就不能正确运行。所以我们就试着用指针来取得这些值。顺便说一下,bin原创 2021-06-10 20:34:54 · 555 阅读 · 0 评论 -
第4天 C语言与画面显示的练习
第4天 C语言与画面显示的练习https://weread.qq.com/web/reader/38732220718ff5cf3877215k182326e0221182be0c5ca231 用C语言实现内存写入(harib01a)想要画东西的话,只要往VRAM里写点什么就可以了。但是在C语言中又没有直接写入指定内存地址的语句。嗯,真是不方便。所以,我们干脆就创建一个有这种功能的函数。下面就来修改一下naskfunc.nas。_write_mem8: ; void write_mem8(...原创 2021-06-10 17:32:06 · 313 阅读 · 0 评论 -
第3天 进入32位模式并导入C语言
第3天 进入32位模式并导入C语言https://weread.qq.com/web/reader/38732220718ff5cf3877215k37632cd021737693cfc71491 制作真正的IPL到昨天为止我们讲到的启动区,虽然也称为IPL(Initial Program Loader,启动程序装载器),但它实质上并没有装载任何程序。而从今天起,我们要真的用它来装载程序了。那么我们先从简单的程序开始吧。因为磁盘最初的512字节是启动区,所以要装载下一个512字节的内容。我们来.原创 2021-06-10 14:54:16 · 306 阅读 · 0 评论 -
第二天:汇编语言学习与Makefile入门
第二天:汇编语言学习与Makefile入门helloos.nas文件; hello-os; TAB=4 ORG 0x7c00 ; 指明程序装载地址; 标准FAT12格式 JMP entry DB 0x90 DB "HELLOIPL" ; ......; 程序核心entry: MOV AX,...原创 2021-06-09 15:52:42 · 442 阅读 · 0 评论 -
初次体验汇编程序
初次体验汇编程序https://zhuanlan.zhihu.com/p/100755422https://weread.qq.com/web/reader/38732220718ff5cf3877215k6f4322302126f4922f45dec好,现在就让我们马上来写一个汇编程序,用它来生成一个跟刚才完全一样的helloos.img吧。我们这次使用的汇编语言编译器是笔者自己开发的,名为“nask”,其中的很多语法都模仿了自由软件里享有盛名的汇编器“NASM”,不过在“NASM”的基础之上又提高原创 2021-06-09 10:20:55 · 287 阅读 · 0 评论 -
2021-06-08-30天自制操作系统-01
工具准备:https://sourceforge.net/projects/bochs/download 2.6.11https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/download 2.15.05http://www.x-ways.net/winhex/http://www.winimage.com/download.htm30天自制操作系统-01https://weread.qq.com/web/reader/38732原创 2021-06-09 00:09:34 · 237 阅读 · 1 评论 -
十分钟完成一个操作系统
表头当然是个噱头,今天周末,照例是睡觉读书。下午看了京东读书里面有一本<一个操作系统的实现>,是10多年前一个叫余渊的小伙子写的,CSDN 创始人蒋涛做序推荐。这样的书属于小众图册是...原创 2021-06-06 18:36:53 · 1503 阅读 · 19 评论 -
鼠标驱动程序
#ifndef __MOUSE_H#define __MOUSE_H#include "types.h"#include "interrupts.h"#include "port.h"class MouseDriver : public InterruptHandler{Port8Bit dataport;Port8Bit commandport;uint8_t buffer[3];uint8_t offset;uint8_t buttons;...原创 2021-06-02 01:17:58 · 361 阅读 · 4 评论 -
自制操作系统13:移动鼠标 - 中断机制探秘,键盘中断识别具体键值,键盘缓冲区
参考:https://blog.csdn.net/tyler_download/article/details/52770376https://www.bilibili.com/video/BV1VJ41157wq?p=13https://weread.qq.com/web/reader/38732220718ff5cf3877215k9f6326602389f61408e3715上节只是捕获了按键,然后打印出来事件,但并不知道按了哪个键。今天我们继续加油吧。鼠标不动的原因已经大体弄清楚了,主要是由于设原创 2021-05-22 23:57:50 · 529 阅读 · 0 评论 -
自制操作系统12:移动鼠标 - 中断机制探秘,捕获键盘中断
https://www.bilibili.com/video/BV1VJ41157wq?p=12&spm_id_from=pageDriverhttps://blog.csdn.net/tyler_download/article/details/52716839https://weread.qq.com/web/reader/38732220718ff5cf3877215ka6832360236a684eceeee20我们接着上节继续做鼠标指针的移动。为达到这个目的必须使用中断,而要使用中原创 2021-05-22 12:55:35 · 997 阅读 · 4 评论 -
自制操作系统11:绘制鼠标 - 操作鼠标第一步,先画出来
参考:https://www.bilibili.com/video/BV1VJ41157wq?p=11https://blog.csdn.net/tyler_download/article/details/52712161如何绘制鼠标,和绘制字体没有啥区别,弄个点阵,16×16d的二维数组。void init_mouse_cursor(char* mouse, char bc) { static char cursor[16][16] = { "**************....原创 2021-05-21 00:31:27 · 215 阅读 · 0 评论 -
自制操作系统10:绘制字体 - 使用字库
参考:https://blog.csdn.net/tyler_download/article/details/52636761https://www.bilibili.com/video/BV1VJ41157wq?p=10https://github.com/wycl16514/os-kernel-draw-ascii-chars原理是按像素绘图,不过分辨率比较低的VGA模式下,怎么绘制都有锯齿的感觉,太粗糙,聊胜于无吧,谁让我们自己做呢,只能糙点,凑合着。这个操作系统就是一个玩具,学习原理为主。8原创 2021-05-20 00:48:45 · 350 阅读 · 1 评论 -
自制操作系统9:绘制窗口 - 调色板描绘背景世界
参考:https://blog.csdn.net/tyler_download/article/details/52556502像素颜色直接绘制,没有亮度和饱和度等信息。只有8位256种颜色直接绘制颜色改为,24bit数,rgb表示法,3原色。每个8bit. 3色结合,就可以构造出所有颜色。这就是调色板。调色板做一个RGB数组。8bit数就从直接表示颜色改为数组下标。显示模式改为调色板模式,需要通知显存系统切换。通过out port实现。in:读端口数据out: 写端口eflags:包含若干状原创 2021-05-19 00:49:08 · 515 阅读 · 3 评论 -
自制操作系统8:从命令行到图形 - 登堂入室
参考:https://blog.csdn.net/tyler_download/article/details/52523237目录:os-kernel-write-vra-kernelkernel.asmwrite_ram.cgcc -m32 -fno-asynchronous-unwind-tables -s -c -o write_vga.o write_vga.c修改gcc -m32 -fno-pie -s -c -o write_vga.o write_vga.cobjconv -fna原创 2021-05-18 12:52:29 · 221 阅读 · 0 评论 -
自制操作系统7:c and asm - 双剑合璧
参考:https://blog.csdn.net/tyler_download/article/details/52468520https://www.bilibili.com/video/BV1VJ41157wq?p=7保护模式寻址32位,4G,C语言运行在保护模式下?(语言和模式关系不大,应该是调用的操作系统函数或者说库)结合思路:C与asm要能互相调用,这篇文章主要是做实验。foo.asm,bar.c--好戏foo,bar是c++教材里面经常用的名字,比如C++之父经常用这个名字对。先建立一原创 2021-05-18 01:58:16 · 552 阅读 · 2 评论 -
自制操作系统6:寻址5M-天高任鸟飞
参考:https://blog.csdn.net/tyler_download/article/details/52242599DOS是实模式,20位总线,1M内存。体验不好。寄存器也是16位的。90年代用dos编程,竟然也有WPS这样的神作,真是佩服求伯君。windows是保护模式,32位总线。4G内存,80386是经典,win95也是经典。保护模式不再直接寻址,而是用GDT获取描述符,描述符中再计算地址。进入保护模式一个巨大好处是可以引入C语言。本次实验就是把数据写入内存5M位置,然后在从这个原创 2021-05-17 00:27:50 · 197 阅读 · 0 评论 -
自制操作系统5:由实模式进入保护模式之32位寻址
参考:https://blog.csdn.net/tyler_download/article/details/52021120https://www.bilibili.com/video/BV1VJ41157wq?p=5&spm_id_from=pageDriver先分析kernel.asmhttps://github.com/wycl16514/OS-Kernel-from-real-to-protected-mode/blob/master/kernel.asm这段代码有些复杂先定义GD原创 2021-05-16 15:22:20 · 207 阅读 · 0 评论 -
自制操作系统4:内核突破512字节
上一节软盘可读就是为此做的准备,上节是内核读取其他扇区的文本显示出来。本节将实验第一扇区是个引导程序,负责把其他扇区的内核读入内存,然后跳转到内核所在内存运行,移交控制权。引导程序:主要功能就是读取其他扇区的内核到内存中。依次创建boot.asm, kernel.asm然后编译nasm kernel.asm -o kernel.batnasm boot.asm -o boot.bat然后制作启动盘:工具也要改造一下https://github.com/wycl16514/OS-Kernel-fr原创 2021-05-16 13:18:59 · 253 阅读 · 0 评论 -
自制操作系统3:构建自己的内核--软盘读写
参考:https://blog.csdn.net/tyler_download/article/details/51815483https://www.bilibili.com/video/BV1VJ41157wq?p=3&spm_id_from=pageDriver模拟操作系统早期DOS时代的做法,操作系统内核写在软盘上,上两节有读取量的限制,最多将前512字节读取到内存中。当操作系统大于512byte就不能这样了。改改思路,第一个扇区不再是内核本身,而是一个内核加载器。负责把操作系统内核从软原创 2021-05-16 11:46:25 · 500 阅读 · 0 评论 -
自制操作系统2:初识汇编--helloworld内核
littleoskernel1.首先安装 nasmsudo apt-get install nasmnasm -versionNASM version 2.14.02touch hello.asmgedit hello.asmsection .data hello: db 'Hello world!',10 ; 'Hello world!' plus a linefeed character helloLen: equ $-hello ; Lengt...原创 2021-05-15 23:21:57 · 237 阅读 · 0 评论 -
自制操作系统1:先动手操作
参考如下链接:https://blog.csdn.net/tyler_download/article/details/51729141做一个最简单操作系统。这个文章又参考了日本人写的一本书《30天自制操作系统》,可以从微信读书中免费阅读:https://weread.qq.com/web/reader/38732220718ff5cf3877215kc81322c012c81e728d9d180作者也有个网站:http://hrb.osask.jp/做操作系统的关键几个问题:1.硬件系统:原创 2021-05-15 19:45:08 · 443 阅读 · 0 评论 -
ubuntu下安装virtualbox
最近想学习一下操作系统,发现可以用虚拟机学习,于是准备安装一个virtualbox。安装步骤如下:参考:https://zhuanlan.zhihu.com/p/80527572get -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] http://download.virtualbox.org/原创 2021-05-15 13:38:56 · 728 阅读 · 3 评论