问题描述
我正在 MacOSX catalina10.15.6 下编写 32位实验性操作系统,并且尝试使用端口 0x1F0 读取软盘〜 0x1F7 加载我的内核。但是有一些错误,所以我不想使用 Bochs 进行调试。但是每次我踏入标签.wait
, bochs 将永远不会跳出来,它会不断循环。如何获取 Bochs 来读取软盘并从此功能read_disk32_lba
返回?
这是我的.bochsrc
:
floppya: 1_44=os-image,status=inserted
boot: a
log: log.txt
这是在read.asm中读取磁盘的功能(使用 nasm ):
;read a sector in LBA mode
;@param ds:edi buffer address
; ebx the sector index
;
read_disk32_lba:
mov al,1
mov dx,0x1F2
out dx,al ;read one sector
;write the sector index to ports
mov dx,0x1F3
mov al,bl
out dx,al
inc dx ;0x1F4
mov al,bh
out dx,al
inc dx ;0x1F5
shr ebx,16
mov al,al
inc dx ;0x1F6
mov al,bh
or al,0xE0 ;use LBA mode to read
out dx,al
mov al,0x20
mov dx,0x1F7
out dx,al ;ask for read
;wait for a response from the disk
.waits:
in al,dx
mov ah,al
and ah,0x01
cmp ah,0x01
jz .error
and al,0x88
cmp al,0x08
jnz .waits
;write dataes to buffer
mov dx,0x1F0
mov ecx,256
.read:
in ax,dx
mov [edi],ax
add edi,2
loop .read
jmp .end
;error handling
.error:
mov esi,READ_ERROR
call print_string32
hlt
.end:
ret
READ_ERROR: db 'Kernel read error',0
然后我通过以下方式编译了asm文件:
nasm read.asm -f bin -o read.o
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)