Commit Graph

100 Commits

Author SHA1 Message Date
Kartik K. Agaram 62a2442110 writes to disk now working
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.
2021-03-23 00:32:49 -07:00
Kartik K. Agaram bc79a190ec transfer only 16 bits at a time 2021-03-22 23:55:28 -07:00
Kartik K. Agaram e1843988a4 . 2021-03-22 23:39:26 -07:00
Kartik K. Agaram 3749f99d24 . 2021-03-22 23:29:42 -07:00
Kartik K. Agaram c0607ecca8 . 2021-03-22 22:56:33 -07:00
Kartik K. Agaram 8abc3639e0 . 2021-03-22 22:30:39 -07:00
Kartik K. Agaram 02b0317c3b shell: gracefully handle missing data disk 2021-03-22 22:21:51 -07:00
Kartik K. Agaram e6b42204ef shell: read initial expression from secondary disk
See shell/README.md for (extremely klunky) instructions.
2021-03-21 23:10:55 -07:00
Kartik K. Agaram 2718cb453c . 2021-03-21 22:33:33 -07:00
Kartik K. Agaram 0c3f126377 snapshot: reading secondary drive also works
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.
2021-03-21 22:30:44 -07:00
Kartik K. Agaram fba2146593 snapshot: reading from disk without BIOS!!
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.
2021-03-21 22:29:24 -07:00
Kartik K. Agaram 89db4ec100 . 2021-03-21 21:57:20 -07:00
Kartik K. Agaram 36dd179f49 . 2021-03-21 21:53:51 -07:00
Kartik K. Agaram 31e1c46803 . 2021-03-18 22:49:20 -07:00
Kartik Agaram e4a224d3a9 . 2021-03-17 10:23:57 -07:00
Kartik K. Agaram 3240c761e8 . 2021-03-16 23:47:18 -07:00
Kartik K. Agaram eae5483bf6 . 2021-03-16 12:46:53 -07:00
Kartik K. Agaram 2f251aec4d undo previous commit
It was just an experiment.
2021-03-15 21:54:58 -07:00
Kartik K. Agaram 7119d79b8a snapshot: write to disk using BIOS
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.
2021-03-15 21:46:53 -07:00
Kartik K. Agaram bc182ae559 boot.subx is now clean SubX 2021-03-15 21:22:30 -07:00
Kartik K. Agaram 460528e85b reintroduce Entry label 2021-03-15 20:41:13 -07:00
Kartik K. Agaram 9d4ca5f59a clean up padding 2021-03-15 20:36:00 -07:00
Kartik K. Agaram 3a0664e186 clean up magic constants 2021-03-15 20:32:26 -07:00
Kartik K. Agaram be42a9c3ec first pass translating all of boot.subx
There's still a few places to clean up surrounded in:
  == data
  ...
  == code
2021-03-15 15:09:38 -07:00
Kartik K. Agaram 93954f7ccd . 2021-03-15 15:04:31 -07:00
Kartik K. Agaram 2a8f664166 get shell/ working
This mutates the expected binary.
2021-03-15 15:03:33 -07:00
Kartik K. Agaram dae5705067 . 2021-03-15 10:04:16 -07:00
Kartik K. Agaram e352596792 . 2021-03-15 09:41:36 -07:00
Kartik K. Agaram 4f73f09f1a . 2021-03-15 09:22:27 -07:00
Kartik K. Agaram 5a824b6e9a manual labels remaining in boot.subx: keyboard + 1 2021-03-15 09:18:44 -07:00
Kartik K. Agaram e35d4f46fd . 2021-03-15 09:17:15 -07:00
Kartik K. Agaram 4374da4d86 clean up padding
I'm going to explicitly show all reserved data even if I don't use it.
Segment headers are only for padding.
2021-03-15 00:16:19 -07:00
Kartik K. Agaram dfd80bf74b first pass translating boot sector 2021-03-15 00:08:08 -07:00
Kartik K. Agaram e045516014 . 2021-03-15 00:05:14 -07:00
Kartik K. Agaram a718f6a2ef . 2021-03-15 00:04:21 -07:00
Kartik K. Agaram 3ca4728330 . 2021-03-14 23:50:16 -07:00
Kartik K. Agaram 174925e6f9 . 2021-03-14 23:34:41 -07:00
Kartik K. Agaram 4f7758fa15 first use of the padding segment selector 2021-03-14 23:30:58 -07:00
Kartik K. Agaram ee81002eb0 . 2021-03-14 23:24:02 -07:00
Kartik K. Agaram 5c1186a77b fix a few TODOs that mutate the expected binary 2021-03-14 23:04:00 -07:00
Kartik K. Agaram fba0a56add . 2021-03-14 22:56:51 -07:00
Kartik K. Agaram dda5fd08d8 . 2021-03-14 22:46:03 -07:00
Kartik K. Agaram 0e5d7e0624 . 2021-03-14 22:31:42 -07:00
Kartik K. Agaram 97c0176a18 . 2021-03-14 22:29:12 -07:00
Kartik K. Agaram 3192230045 . 2021-03-14 22:23:02 -07:00
Kartik K. Agaram 8c89b047f5 . 2021-03-14 22:20:46 -07:00
Kartik K. Agaram 4d0db2c94e fix a benign bug so far
I'd been assuming that the image would be identical if it worked, but I
need to actually validate this at each step:
  ./translate life.mu  &&  qemu-system-i386 disk.img  &&  diff disk.img 0

The plan is to keep the binary identical until I finish translating boot.subx.
Then I can remove obsolete padding.
2021-03-14 22:12:34 -07:00
Kartik K. Agaram cc7a44f9df . 2021-03-14 21:58:23 -07:00
Kartik K. Agaram fa2c1c040c start converting boot.subx to real SubX
Just one instruction translated so far. The rest is treated as data.

Currently programs only work because the toolchain treats boot.subx as
all data. As we turn it into code we'll move the '== data' segment boundary
further down.
2021-03-14 21:55:08 -07:00
Kartik K. Agaram 98feca922e rename boot.hex to boot.subx 2021-03-14 21:41:47 -07:00