03 三十天自制操作系统第三天

0 阅读1分钟

读盘时

CH、CL、DH、DL分别是柱面号、扇区号、磁头号、驱动器号

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

加入新的sys文件后,需要修改原本的Makefile文件

# 工具路径和命令定义
NASK     = nask.exe
EDIMG    = edimg.exe
MAKE     = make.exe -r

# 默认目标
default :
	$(MAKE) img

# 1. 编译引导扇区 ipl.nas -> ipl.bin
ipl.bin : ipl.nas
	$(NASK) ipl.nas ipl.bin ipl.lst

# 2. 编译内核文件 haribote.nas -> haribote.sys
haribote.sys : haribote.nas
	$(NASK) haribote.nas haribote.sys haribote.lst

# 3. 制作包含 ipl.bin 和 haribote.sys 的镜像文件
# 注意:这里使用了 copy 指令将 haribote.sys 存入镜像的文件系统中
haribote.img : ipl.bin haribote.sys fdimg0at.tek
	$(EDIMG) imgin:fdimg0at.tek \
		wbinimg src:ipl.bin len:512 from:0 to:0 \
		copy from:haribote.sys to:@: \
		imgout:haribote.img

# 命令别名
img :
	$(MAKE) haribote.img

# 运行虚拟机(使用新生成的 haribote.img)
run :
	$(MAKE) img
	qemu-system-i386 -drive file=haribote.img,format=raw,if=floppy

# 清理
clean :
	-del ipl.bin
	-del ipl.lst
	-del haribote.sys
	-del haribote.lst
	-del haribote.img