about summary refs log tree commit diff stats
path: root/boot.subx
Commit message (Collapse)AuthorAgeFilesLines
* ok, function modal now has full coverageKartik K. Agaram2021-06-081-12/+26
|
* .Kartik K. Agaram2021-05-301-10/+10
|
* fix a bug in loading code diskKartik K. Agaram2021-05-291-1/+1
| | | | Identical bug to commit 2f10bc7302.
* shell: skeleton for scrollingKartik K. Agaram2021-05-291-0/+14
|
* press '0' to reset all stateKartik K. Agaram2021-05-161-1/+1
|
* .Kartik K. Agaram2021-05-141-1/+1
|
* load debug info from disk on abortKartik K. Agaram2021-05-141-6/+28
|
* expand stack to 16MBKartik K. Agaram2021-04-251-4/+4
| | | | It's also no longer contiguous with code.
* expand heap to Qemu defaultKartik Agaram2021-04-251-2/+2
|
* .Kartik K. Agaram2021-04-191-1/+2
|
* fix a bug in loading code diskKartik K. Agaram2021-04-181-1/+1
|
* revert experiment: expand heapKartik K. Agaram2021-04-181-3/+2
| | | | | There are several things in the codebase right now that don't seem sustainable. I need to take them out and bring them back in more gradually.
* experiment: expand heapKartik K. Agaram2021-04-181-2/+3
|
* update the memory mapKartik K. Agaram2021-04-181-1/+1
|
* shell: ctrl-r runs on real screen without a traceKartik K. Agaram2021-04-171-0/+14
| | | | | We run out of memory fairly early in the course of drawing a chessboard on the whole screen.
* write-multiple supportKartik K. Agaram2021-04-171-3/+24
| | | | | | | Is flush-ata-cache even needed? Reading the ATA 5 spec more closely, it looks like it's only required by ATAPI devices! (Packet Interface is what the 'PI' stands for!) And it's unclear if my driver actually supports ATAPI at the moment.
* start flushing the ATA disk cacheKartik K. Agaram2021-04-171-0/+18
| | | | | | "Make sure to do a Cache Flush (ATA command 0xE7) after each write command completes." https://wiki.osdev.org/index.php?title=ATA_PIO_Mode&oldid=25664#Writing_28_bit_LBA
* starting write-multiple supportKartik K. Agaram2021-04-171-52/+55
|
* data.img now has more than one sector of dataKartik K. Agaram2021-04-161-33/+78
|
* support for arrow keysKartik K. Agaram2021-04-051-4/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mu's keyboard handling is currently a bit of a mess, and this commit might be a bad idea. Ideally keyboards would return Unicode. Currently Mu returns single bytes. Mostly ASCII. No support for international keyboards yet. ASCII and Unicode have some keyboard scancodes grandfathered in, that don't really make sense for data transmission. Like backspace and delete. However, other keyboard scancodes don't have any place in Unicode. Including arrow keys. So Mu carves out an exception to Unicode for arrow keys. We'll place the arrow keys in a part of Unicode that is set aside for implementation-defined behavior (https://en.wikipedia.org/wiki/C0_and_C1_control_codes#C1_controls): 0x80: left arrow 0x81: down arrow 0x82: up arrow 0x83: right arrow The order is same as hjkl for mnemonic convenience. I'd _really_ to follow someone else's cannibalization here. If I find one later, I'll switch to it. Applications that blindly assume the keyboard generates Unicode will have a bad time. Events like backspace, delete and arrow keys are intended to be processed early and should not be in text. With a little luck I won't need to modify this convention when I support international keyboards.
* undo previous commitKartik K. Agaram2021-04-051-118/+89
|
* snapshot: stupid debugging sessionKartik K. Agaram2021-04-051-89/+118
| | | | | | | | | | | | | | | 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.
* delete some obsolete filesKartik Agaram2021-04-041-2/+0
| | | | | They stopped working ever since boot.subx started relying on functions (for the disk driver) implemented in Mu.
* .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
|