Commit Graph

65 Commits

Author SHA1 Message Date
Kartik K. Agaram
316bf37541 undo previous commit 2021-04-05 21:16:45 -07:00
Kartik K. Agaram
928fd47d68 snapshot: stupid debugging session
I spent a while building a little keyboard scancode printer:

  $ ./translate ex1.mu &&  qemu-system-i386 disk.img

..and wondering why up-arrow was 0x48 in hex but 724 in decimal. I ended
up paranoidly poking at a bunch of crap (though there _is_ a cool chromatography-based
debugging technique in 126write-int-decimal.subx) before I realized:

  - 724 just has one extra digit over the correct answer
  - the 0xe0 scan code is a 3-digit number in decimal -- and the final digit is '4'

There's nothing actually wrong.
2021-04-05 21:15:06 -07:00
Kartik Agaram
2839c89b80 delete some obsolete files
They stopped working ever since boot.subx started relying on functions
(for the disk driver) implemented in Mu.
2021-04-04 16:30:40 -07:00
Kartik K. Agaram
3e9a266eda . 2021-04-02 22:53:11 -07:00
Kartik K. Agaram
cfe4fea124 . 2021-03-28 08:32:48 -07:00
Kartik K. Agaram
a3a7ffe4da . 2021-03-28 08:32:15 -07:00
Kartik K. Agaram
dfda825e55 always acknowledge enabled interrupts
Now we can start enabling the timer interrupt. It doesn't do anything yet,
but keyboard continues to work.
2021-03-28 08:30:57 -07:00
Kartik K. Agaram
763719c211 .
Clean up some debug prints.
2021-03-27 17:53:15 -07:00
Kartik K. Agaram
7bf8adb893 explicitly pass data disk to main 2021-03-27 17:50:44 -07:00
Kartik K. Agaram
9818f1de98 .
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.
2021-03-27 08:38:01 -07:00
Kartik K. Agaram
55adbda2d9 . 2021-03-23 21:41:40 -07:00
Kartik K. Agaram
7b89f8e67e reorg boot.subx 2021-03-23 21:27:06 -07:00
Kartik K. Agaram
49a9938333 mouse support that requires polling 2021-03-23 21:14:49 -07:00
Kartik K. Agaram
e0f6dd5240 get rid of unnecessary padding
Now we only specify addresses where it matters.
2021-03-23 20:00:15 -07:00
Kartik K. Agaram
49464e5866 . 2021-03-23 19:37:07 -07:00
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