about summary refs log tree commit diff stats
path: root/boot.subx
Commit message (Collapse)AuthorAgeFilesLines
* .Kartik K. Agaram2021-04-021-2/+2
|
* .Kartik K. Agaram2021-03-281-0/+2
|
* .Kartik K. Agaram2021-03-281-2/+20
|
* always acknowledge enabled interruptsKartik K. Agaram2021-03-281-2/+17
| | | | | Now we can start enabling the timer interrupt. It doesn't do anything yet, but keyboard continues to work.
* .Kartik K. Agaram2021-03-271-169/+0
| | | | Clean up some debug prints.
* explicitly pass data disk to mainKartik K. Agaram2021-03-271-99/+296
|
* .Kartik K. Agaram2021-03-271-1/+1
| | | | | | | https://wiki.osdev.org/ATA_PIO_Mode#IDENTIFY_command recommends the straight-and-narrow way, but the LBA bit shouldn't matter in drive-select during IDENTIFY command, according to the ATA 3 spec. And it works in Qemu and bochs. It'll slightly simplify drive parameter management.
* .Kartik K. Agaram2021-03-231-125/+132
|
* reorg boot.subxKartik K. Agaram2021-03-231-10/+9
|
* mouse support that requires pollingKartik K. Agaram2021-03-231-2/+213
|
* get rid of unnecessary paddingKartik K. Agaram2021-03-231-115/+2
| | | | Now we only specify addresses where it matters.
* .Kartik K. Agaram2021-03-231-3/+5
|
* writes to disk now workingKartik K. Agaram2021-03-231-0/+89
| | | | | | Tested by inserting a call into the shell, but we can't leave it in because every test ends up clobbering the disk. So it's now time to think about a testable interface for the disk.
* transfer only 16 bits at a timeKartik K. Agaram2021-03-221-8/+3
|
* .Kartik K. Agaram2021-03-221-3/+20
|
* .Kartik K. Agaram2021-03-221-4/+5
|
* .Kartik K. Agaram2021-03-221-12/+10
|
* .Kartik K. Agaram2021-03-221-1/+1
|
* shell: gracefully handle missing data diskKartik K. Agaram2021-03-221-9/+64
|
* shell: read initial expression from secondary diskKartik K. Agaram2021-03-211-9/+21
| | | | See shell/README.md for (extremely klunky) instructions.
* .Kartik K. Agaram2021-03-211-3/+3
|
* snapshot: reading secondary drive also worksKartik K. Agaram2021-03-211-3/+1
| | | | | | | | | | | | dd if=/dev/zero of=data.img count=20160 echo '(+ 1 1)' |dd of=data.img conv=notrunc ./translate ex2.mu && qemu-system-i386 -hda disk.img -hdb data.img Compare output with `xxd data.img |head`. This works because primary and secondary drives on the primary bus share the same ports. All we have to do is select the right drive by flipping a bit.
* snapshot: reading from disk without BIOS!!Kartik K. Agaram2021-03-211-0/+214
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* .Kartik K. Agaram2021-03-211-15/+15
|
* .Kartik K. Agaram2021-03-211-3/+3
|
* .Kartik K. Agaram2021-03-181-2/+2
|
* .Kartik Agaram2021-03-171-25/+25
|
* .Kartik K. Agaram2021-03-161-1/+1
|
* .Kartik K. Agaram2021-03-161-1/+4
|
* undo previous commitKartik K. Agaram2021-03-151-14/+0
| | | | It was just an experiment.
* snapshot: write to disk using BIOSKartik K. Agaram2021-03-151-0/+14
| | | | | | | | | | Requires the following commands: dd if=/dev/zero of=data.img count=20160 ./translate life.mu qemu-system-i386 -hda disk.img -hdb data.img Before running Qemu, data.img will contain all 0s. After quitting Qemu, data.img will contain the first 512 bytes of disk.img.
* boot.subx is now clean SubXKartik K. Agaram2021-03-151-13/+3
|
* reintroduce Entry labelKartik K. Agaram2021-03-151-7/+2
|
* clean up paddingKartik K. Agaram2021-03-151-26/+0
|
* clean up magic constantsKartik K. Agaram2021-03-151-58/+19
|
* first pass translating all of boot.subxKartik K. Agaram2021-03-151-16/+14
| | | | | | | There's still a few places to clean up surrounded in: == data ... == code
* .Kartik K. Agaram2021-03-151-27/+27
|
* get shell/ workingKartik K. Agaram2021-03-151-5/+5
| | | | This mutates the expected binary.
* .Kartik K. Agaram2021-03-151-84/+63
|
* .Kartik K. Agaram2021-03-151-8/+11
|
* .Kartik K. Agaram2021-03-151-11/+9
|
* manual labels remaining in boot.subx: keyboard + 1Kartik K. Agaram2021-03-151-3/+2
|
* .Kartik K. Agaram2021-03-151-9/+8
|
* clean up paddingKartik K. Agaram2021-03-151-139/+12
| | | | | I'm going to explicitly show all reserved data even if I don't use it. Segment headers are only for padding.
* first pass translating boot sectorKartik K. Agaram2021-03-151-19/+5
|
* .Kartik K. Agaram2021-03-151-15/+15
|
* .Kartik K. Agaram2021-03-151-21/+14
|
* .Kartik K. Agaram2021-03-141-17/+18
|
* .Kartik K. Agaram2021-03-141-6/+6
|
* first use of the padding segment selectorKartik K. Agaram2021-03-141-13/+18
|