工作配置
20 行代码的一个"操作系统"
boot.asm
org 07c00h ; 告诉编译器程序加载到7c00处 mov ax, cs mov ds, ax mov es, ax call DispStr ; 调用显示字符串例程 jmp $ ; 无限循环 DispStr: mov ax, BootMessage mov bp, ax ; ES:BP = 串地址 mov cx, 17 ; CX = 串长度 mov ax, 01301h ; AH = 13, AL = 01h mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮) mov dl, 0 int 10h ; 10h 号中断 ret BootMessage: db "I love you,Anita!" times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节 dw 0xaa55 ; 结束标志
- 把上面这段代码用NASM编译一下
nasm boot.asm -o boot.bin
在当前目录下面会生成一个512B的boot.bin。一个"操作系统就已经完成了"
使用bximage创建一个软盘映像
- 进入Bochs的安装目录,启动命令行(cmd或powershell)
- 画横线的表示要手动输入,箭头表示直接按回车键就好了
- 这样就会在当前目录生成a.img
使用Cygwin将引导扇区写进软盘
- 运行
Cygwin.bat
,输入命令dd if=刚才生成.bin文件的目录(boot.bin) of=生成软盘映像文件的目录(a.img) bs=512 count=1 conv=notrunc
- 在俺这里,俺把
boot.bin
文件和a.img
都放在了bochs的安装目录,所以俺把上面那条命令写成了dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
使用Bochs启动刚刚写好的"操作系统"
- 写
Bochs
的配置文件bochsrc
,保存在Bochs
的安装目录下
bochsrc
文件内容
把所有的$BXSHARE
都换成Bochs
的安装目录megs:32 romimage:file=$BXSHARE/BIOS-bochs-latest vgaromimage:file=$BXSHARE/VGABIOS-lgpl-latest floppya:1_44=$BXSHARE/a.img,status=inserted boot:floppy log:bochsout.txt mouse:enabled=0 keyboard: keymap=$BXSHARE/keymaps/x11-pc-de.map
- 打开命令行(cmd或者powershell),运行Bochs
.\bochs.exe -f bochsrc
- 成功啦!😃
- 还有一件事!
如果你输入一个不带任何参数的Bochs并执行之,那么Bochs将在当前目录顺序寻找以下文件作为默认配置文件.bochsrc
bochsrc
bochsrc.txt
bochsrc.bxrc(仅对Windows有效)
从硬盘启动
- 配置文件
megs:32 romimage:file=E:/Bochs/Bochs-2.6.11/BIOS-bochs-latest vgaromimage:file=E:/Bochs/Bochs-2.6.11/VGABIOS-lgpl-latest # 指定我们使用哪个文件作为软盘镜像 # floppya:1_44=E:/Bochs/Bochs-2.6.11/freedos.img,status=inserted # floppyb:1_44=E:/Bochs/Bochs-2.6.11/pm.img,status=inserted # boot:floppy 从软盘启动 # 改为从硬盘启动。我们写的人格代码都将直接写在硬盘上,所以不会再有读写软盘的操作 boot: disk # 设置日志文件的输出 log:bochsout.txt # 关闭鼠标,并打开键盘 mouse:enabled=0 keyboard:keymap=E:/Bochs/Bochs-2.6.11//keymaps/x11-pc-us.map # 硬盘设置 ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 # 这个是从下面创建好硬盘映像中复制来的 ata0-master: type=disk, path="hd60M.img", mode=flat # 下面的是增加的bochs对gdb的支持,这样gdb便可以远程连接到此机器的1234端口调试了 # gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
- 创建一个硬盘映像
- 把倒数第二句话复制到配置文件中,在上面已经有了