30天自制操作系统——第三天画面显示黑屏和着手使用C语言开发

本文记录了制作操作系统的第三天进展,内容包括制作IPL,添加试错机制,读取软盘内容,解决画面显示黑屏问题,以及开始使用C语言进行开发。通过汇编和C语言的结合,逐步构建操作系统的基础功能。
摘要由CSDN通过智能技术生成

今天的主要任务是让画面显示黑屏,嘿嘿。

内容比较多,包括制作能装载程序的IPL,读取软盘内容,画面显示黑屏,开始运行C语言编写的程序。

由于我们在同一个文件上做了多次修改,因此今天的资源分了多个文件夹,里面用到的文件括号里的内容对应文末资源里的文件夹名。

事不宜迟,那么现在就开始吧——

制作IPL

上一篇我们知道,磁盘最初的512字节是启动区,现在我们要装载下一个512字节的内容。

我们在上一版ipl.nas中添加了如下代码,由于该部分内容后面需要经过多次修改,这里给每次修改添加了版本,ipl.nas(version_a)内容修改如下:

添加部分version_a版:

		MOV		AX,0x0820
		MOV		ES,AX
		MOV		CH,0			; 柱面0
		MOV		DH,0			; 磁头0
		MOV		CL,2			; 扇区2

		MOV		AH,0x02			; AH=0x02 : 读盘
		MOV		AL,1			; 1个扇区
		MOV		BX,0
		MOV		DL,0x00			; A驱动器
		INT		0x13			; 调用磁盘BIOS
		JC		error

老规矩,看新指令——

JC指令:是“jump if carry”的缩写,意思是如果进位标识是1的话就跳转,进位标识是一个只能存储1位信息的寄存器。

这里用到了几个新的寄存器:CH=柱面号,CL=扇区号,DH=磁头号,DL=驱动器号。

在有多个软盘驱动器的时候,用驱动器号来指定从哪个驱动器的软盘上读取数据。

这里有些小伙伴可能会问柱面、扇区、磁头这些都是什么呢?不用着急,我们先把软盘拆开,看一下软盘的内部结构——

在这里插入图片描述

柱面(cylinder)就是上图中 深黑色的一圈一圈圆环状的区域,从外向内分别为柱面0、柱面1、…、柱面79,一共80个柱面。

磁头是一种针状的磁性设备,它可以从正反两面接触磁盘。软盘磁盘正反两面都能记录数据,因此我们有正反两个磁头,分别是磁头0号和磁头1号。

扇区(sector)就是把一个圆环(柱面),均匀分成几等份,每一份称为一个扇区。一个圆环有18个扇区,分别称为扇区1、扇区2、…扇区18。

综上,一张软盘有80个柱面、2个磁头,18个扇区,一个扇区可以存储512字节,所以一张软盘的容量为:

80×2×18×512 = 1 474 560B = 1440KB。

我们制作的IPL启动区位于C0-H0-S1(柱面0,磁头0,扇区1),下一个扇区是C0-H0-S1,接下来我们就装载这个扇区。

添加试错

读取软盘的时候很容易出错,这时候可能多读几次就能读出来了。

因此这里我们添加试错程序ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值