Both LBA and CHS coordinates are now working for the primary disk on the primary bus. Failure modes I ran into: - ATA ports are 16-bit values. Using instructions with 8-bit immediates will yield strange results. (I had to debug this twice because I missed poll-ata-primary-bus-primary-drive-regular-status-word the first time around.) Mu's toolchain has been found out here. bootstrap has good errors but doesn't support the instructions I need in boot.subx. The self-hosted phases support the instructions but provide no error-checking. Might be worth starting to add error-checking as I encounter the need. In this case, a vote for validating metadata sizes even if we don't validate that instructions pass in the right metadata sizes. - Can't poll readiness first thing. Maybe we need to always select the drive first. - Reading 8-bit values from a 16-bit port (data port 0x1f0) returns garbage. Reading 32-bit values however works totally fine; go figure. (Maybe it won't work on real hardware?) https://forum.osdev.org/viewtopic.php?t=36415 - Passing in a 0 segment will never return data.
17 lines
534 B
Plaintext
17 lines
534 B
Plaintext
# Configuration for the Bochs x86 CPU emulator to run baremetal Mu programs
|
|
# See boot.subx for more details.
|
|
#
|
|
# Installing Bochs:
|
|
# On Mac OS:
|
|
# brew install bochs
|
|
# On Ubuntu Linux 20.04:
|
|
# sudo apt install bochs bochs-sdl bochsbios vgabios
|
|
|
|
display_library: sdl2
|
|
|
|
#ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
|
|
ata0-master: type=disk, path="disk.img", mode=flat, cylinders=20, heads=16, spt=63 # 10MB, 512 bytes per sector
|
|
boot: disk
|
|
# PS/2 mouse requires black magic that I don't know how to explain.
|
|
log: -
|