Commit Graph

1329 Commits

Author SHA1 Message Date
Kartik Agaram f29b6c6b1a 7383
Currently at commit 7377 except without 7376 (enabling interrupts). Works
as advertised.
2020-12-23 10:03:51 -08:00
Kartik Agaram de7bd3998b 7382 - snapshot
Turns out I've been "testing" with a stale file since commit 7373. We need
to go over everything since then.
2020-12-23 08:41:53 -08:00
Kartik Agaram e82e7d644c 7381 2020-12-23 00:39:42 -08:00
Kartik Agaram 364133226c 7380 2020-12-23 00:37:39 -08:00
Kartik Agaram e412bf9443 7379 2020-12-23 00:34:46 -08:00
Kartik Agaram 6a9fff36c4 7378
Turns out we only had access to 50% of RAM so far. Closing my nose and
moving right along..

Though this _does_ give me practice interacting with ports. That'll be
handy for the keyboard.
2020-12-23 00:20:36 -08:00
Kartik Agaram 2e7798e39c 7377
Ooh, look at that, the device number comes conveniently initialized in
the right register. No need to hardcode it.

https://wiki.osdev.org/MBR_(x86)
2020-12-23 00:04:20 -08:00
Kartik Agaram 2b61e5e0a0 7376 2020-12-23 00:04:20 -08:00
Kartik Agaram 6216a79974 7375
A little more robustness after reading https://stackoverflow.com/questions/43786251/int-13h-42h-doesnt-load-anything-in-bochs/43787939#43787939
2020-12-23 00:04:20 -08:00
Kartik Agaram 50c994dd88 7373
apps/boot.hex doesn't need much by way of syntax highlighting. Have it
work even for people who haven't installed subx.vim
2020-12-21 00:22:12 -08:00
Kartik Agaram 0a4cf3397f 7372 - successful read from disk using BIOS 2020-12-21 00:21:51 -08:00
Kartik Agaram e4edacfecb 7371 2020-12-21 00:13:03 -08:00
Kartik Agaram 946dfe7ffb 7370
Use a more realistically sized disk image. Now we can read the second sector.
2020-12-21 00:04:38 -08:00
Kartik Agaram 6ac16fd1ae 7369 - read hard disk using BIOS
There were two problems:
  a) We have only 1 sector per track (spt=1), so 'second sector' is meaningless.
  b) Drives 0-127 are reserved for floppies.
2020-12-20 23:52:21 -08:00
Kartik Agaram a350fb4c68 7368 - ooh, int 13h works with a floppy
Lots of great tips here:
  https://stackoverflow.com/questions/43786251/int-13h-42h-doesnt-load-anything-in-bochs/43787939#43787939
2020-12-20 23:37:43 -08:00
Kartik Agaram d12094ee4d 7367 - start of boot sector for Mu computer
Not working yet. Reading sectors from disk returns an error (sets carry
flag).
2020-12-20 22:58:37 -08:00
Kartik Agaram 9b867ab438 7366
Move more padding around.

Reading a sector from disk requires about 24 bytes of code.
2020-12-20 21:02:52 -08:00
Kartik Agaram 61a2813f2f 7365 2020-12-20 20:53:08 -08:00
Kartik Agaram d26836caae 7364 2020-12-20 20:51:15 -08:00
Kartik Agaram c1ffd4c0a6 7363
Kinda brutal way to lose the bochs warning. Should suffice for now. As
we add more code we'll introduce more sectors.
2020-12-20 20:47:19 -08:00
Kartik Agaram 3f6bb8a0ca 7362
I hadn't noticed that bochs was getting into a reset loop after executing
my code correctly. Fix that.
2020-12-20 20:38:29 -08:00
Kartik Agaram d5a9a92452 7361
Switch bochs from floppy to hard disk.
Bochs throws a new warning, but otherwise 32bit.hex continues to work.
2020-12-20 20:13:15 -08:00
Kartik Agaram 72e34ecb63 7360
Insert padding in a few places so we don't have to recalculate addresses
quite so much.
2020-12-20 20:03:02 -08:00
Kartik Agaram 02135b7ae8 7359 - boot into 32-bit mode 2020-12-20 00:44:23 -08:00
Kartik Agaram 9b5b8471ca 7358
Snapshot: first draft of a boot image that switches to 32-bit mode as quickly
as possible (~70 bytes)

Doesn't work yet. Gets stuck in an infinite reset loop.
2020-12-20 00:16:15 -08:00
Kartik Agaram 70bb19100e 7357 2020-12-19 21:22:28 -08:00
Kartik Agaram 1e46a0f6b2 7356 2020-12-19 21:09:05 -08:00
Kartik Agaram a84fadd65d 7355 - learning to boot into 32-bit mode
These exercises are from the incomplete "Writing a simple operating system
from scratch" by Nick Blundell.
  https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf
2020-12-19 21:06:05 -08:00
Kartik Agaram cbe8bfd87a 7354 - tile: stop trying to center menu 2020-12-14 22:29:34 -08:00
Kartik Agaram 8c2e580e0f 7353 2020-12-14 22:18:02 -08:00
Kartik Agaram 001efc35f0 7352 2020-12-14 22:14:13 -08:00
Kartik Agaram 88152c621a 7350 - mu.subx optimization: skip no-op copies 2020-12-11 22:43:09 -08:00
Kartik Agaram a6167c6472 7349 2020-12-11 21:59:22 -08:00
Kartik Agaram 84f7026e82 7348 - mu.subx bug with string literals 2020-12-11 21:52:55 -08:00
Kartik Agaram 1626a32f2d 7347 - tile: separate sandbox and function menus 2020-12-06 22:16:22 -08:00
Kartik Agaram 026ab21673 7346 2020-12-06 22:13:48 -08:00
Kartik Agaram 35898016ac 7345 2020-12-06 22:12:49 -08:00
Kartik Agaram b0d323ff87 7344 2020-12-06 22:08:12 -08:00
Kartik Agaram 601785364f 7343 2020-12-06 22:06:44 -08:00
Kartik Agaram 642c7c8cab 7342 - tile: hotkeys for ending function edit 2020-12-06 21:57:27 -08:00
Kartik Agaram bec147690f 7341 - tile: function editing done
A tiny modicum of reuse amidst all this copypasta: I'm able to reuse the
same function that renders lines without stacks in the sandbox.
2020-12-06 21:48:39 -08:00
Kartik Agaram 4cf5916c2b 7340 - tile: function editing almost done
Still a bug in cursor positioning. It's always shown at the start of the
function body.
2020-12-06 21:47:53 -08:00
Kartik Agaram 60ac5d9e93 7339 - tile: position cursor in correct function
Still can't edit functions, but we're getting there.
2020-12-06 20:57:43 -08:00
Kartik Agaram 5c46d55532 7338 - tile: architecture starting to crystallize
In particular, I'm starting to have opinions about how to scalably position
the cursor at the end of each frame.

One advantage of text mode without a pointer device (mouse/trackpad): only
one cursor to track. UI can't be modified anywhere. That simplifies any
reactive UI framework.
2020-12-05 21:01:30 -08:00
Kartik Agaram 4ef29dc9d5 7337 - tile: jumping to a function
We can't yet edit the function once we jump to it.
2020-12-05 01:17:52 -08:00
Kartik Agaram fcdd9238cb 7336 - tile: back to function editing 2020-12-05 00:20:10 -08:00
Kartik Agaram 68a5032ccd 7334 - advent day 5 done 2020-12-04 23:35:18 -08:00
Kartik Agaram d893ae58b7 7333 - advent day 5 part 1 2020-12-04 23:25:21 -08:00
Kartik Agaram 6570a0c146 7332 - advent day 4 done
The code is shit and I can't be arsed to clean it up. But it was a useful
exercise given the bugs and gaps it caught in Mu.
2020-12-04 23:02:53 -08:00
Kartik Agaram eea6659a40 7331 - hacky way to convert slice to string 2020-12-04 23:02:53 -08:00
Kartik Agaram 273c42c066 7330 - snapshot: advent day 4 part 2 easy cases
Now I need to tune the SubX vocabulary.
2020-12-04 23:02:53 -08:00
Kartik Agaram 18d5bab2b6 7329 - snapshot: advent day 4 part 2
I've found two bugs in SubX libraries:

1. next-word had an out-of-bounds read
2. next-word was skipping comments, because that's what I need during bootstrapping.
I've created a new variant called next-raw-word that doesn't skip comments.
These really need better names.

We're now at the point where 4b.mu has the right structure and returns
identical result to 4a.mu.
2020-12-04 23:02:53 -08:00
Kartik Agaram 8a8db34f25 7328 - advent day 4 part 1
Bug #1: forgot to process final passport
Stupid mistake #2: was reporting invalid rather than valid passports
2020-12-04 21:01:59 -08:00
Kartik Agaram 2d14f6c971 7327 2020-12-03 21:49:03 -08:00
Kartik Agaram f2ee237eea 7326 2020-12-03 21:43:21 -08:00
Kartik Agaram 6c7d9300e2 7325 - tile: start implementing function editing 2020-12-03 21:22:32 -08:00
Kartik Agaram ed59e2eda9 7323 - advent day 3 done
Stupid mistake; I missed one slope in the question.
2020-12-02 22:32:27 -08:00
Kartik Agaram 50973ad178 7322 - snapshot: advent day 3 part 2
Answer isn't right.
2020-12-02 22:21:07 -08:00
Kartik Agaram 124f515826 7321 - advent day 3 part 1 2020-12-02 22:12:55 -08:00
Kartik Agaram 36b4bf1f1b 7320 - snapshot: advent day 3 part 1 2020-12-02 22:08:37 -08:00
Kartik Agaram f60ebed0fb 7318 - advent day 2 done
Funny story: I got the right answer for part 1 even though I missed the
':' in the line format. But of course that didn't work for part 2.
2020-12-02 19:36:10 -08:00
Kartik Agaram a41a6eadd1 7317 - advent day 2 part 1
https://adventofcode.com/2020/day/2
2020-12-02 19:20:06 -08:00
Kartik Agaram 74bc598c44 7316 2020-12-01 01:19:07 -08:00
Kartik Agaram 3d291822ca 7315 2020-12-01 01:03:30 -08:00
Kartik Agaram 05ad07b63e 7313 - advent: day 1 done 2020-12-01 01:01:49 -08:00
Kartik Agaram 69f4c36b71 7312 - advent: snapshot of 1b 2020-12-01 00:54:09 -08:00
Kartik Agaram a06611f35c 7310 - advent day 1 part 1
In the process I had to:
* Fix a bug in reading lines from stdin into streams
* Start trailing newlines when parsing ints from streams
* Implement `find` in an array
2020-12-01 00:32:43 -08:00
Kartik Agaram 8a73ef7052 7309 - tile: parsing strings into words 2020-11-30 23:20:13 -08:00
Kartik Agaram 3c84f1ae41 7308 2020-11-29 16:52:46 -08:00
Kartik Agaram 55dfa5b985 7305 - make float-size more consistent as well 2020-11-29 13:26:48 -08:00
Kartik Agaram ee3ddc3961 7302 - tile: at long last, division
Also square roots.

But there's a bug in rendering floats without precision.
2020-11-29 12:51:57 -08:00
Kartik Agaram 614b132b2e 7301 - tile: float computations now working 2020-11-29 12:45:23 -08:00
Kartik Agaram 61cfedceef 7300 - bugfix in type-checking float returns 2020-11-29 12:42:34 -08:00
Kartik Agaram 33a85545e1 7299 - bug in code-generating float returns 2020-11-29 12:20:08 -08:00
Kartik Agaram 6b1cde4761 7297 - tile: use floats everywhere 2020-11-29 12:17:23 -08:00
Kartik Agaram a518d84bf4 7295 2020-11-29 03:40:12 -08:00
Kartik Agaram 8766aa12cd 7294 2020-11-28 08:31:55 -08:00
Kartik Agaram bbcf033aff 7292 - mu.subx: loosen copy-byte checks a bit
Without this there's no way to convert an int to a byte. And that feels
too restrictive, and gives up a lot of safe things one might want to do
with bytes. (Such as divide a number by 10 and emit the remainder as a
byte.)
2020-11-27 22:44:23 -08:00
Kartik Agaram bcd2adfbf3 7291 2020-11-27 22:27:34 -08:00
Kartik Agaram 6f65b65f7d 7290
I've wrestled for a long time with how to support integer division with
its hard-coded registers. The answer's always been staring me in the face:
just turn it into a function! We already expect function outputs to go
to hard-coded registers.
2020-11-27 21:37:20 -08:00
Kartik Agaram 3341af3d92 7288 2020-11-27 00:26:27 -08:00
Kartik Agaram 530af63477 7287
Regression: I'd broken compare on bytes. Apparently I took away support
for bytes from numberlike-output even though I didn't need to by the end.
2020-11-27 00:17:51 -08:00
Kartik Agaram 125bfde435 7286 - mu.subx: isolate bytes from previous values 2020-11-27 00:04:54 -08:00
Kartik Agaram c165b0be5a 7285 2020-11-26 23:20:15 -08:00
Kartik Agaram 736bfe9547 7284 2020-11-26 22:34:32 -08:00
Kartik Agaram b0dfe182ff 7283 2020-11-26 21:59:28 -08:00
Kartik Agaram 7f40e8a3f6 7282 2020-11-26 21:46:46 -08:00
Kartik Agaram 896a353a7d 7281 2020-11-26 21:37:09 -08:00
Kartik Agaram 066014d4b4 7280 2020-11-26 21:23:15 -08:00
Kartik Agaram 5ce7c8dcff 7279 2020-11-26 20:10:46 -08:00
Kartik Agaram e9f411d5c5 7278 - typo in mu.subx 2020-11-26 12:58:02 -08:00
Kartik Agaram 32505d159e 7269 2020-11-21 21:40:23 -08:00
Kartik Agaram fd4d7b38da 7267 - mu.subx: type-check 'convert' statements 2020-11-20 00:20:58 -08:00
Kartik Agaram 1696ed831a 7261 - mu.subx: array bounds-checking done 2020-11-17 18:16:26 -08:00
Kartik Agaram 83221b4e21 7260
This seems to preserve the intent of commit 6555.
2020-11-17 16:32:38 -08:00
Kartik Agaram 98399a621f 7258 2020-11-17 10:04:53 -08:00
Kartik Agaram 18944f44e6 7257 - partially undo commit 7253
I don't need to pass the function pointer quite so low. I think..
2020-11-17 10:04:49 -08:00
Kartik Agaram 789c0ac05a 7256 2020-11-17 09:25:17 -08:00
Kartik Agaram 18579f77c6 7253 - mu.subx: starting to bounds-check 'index'
First step: start passing the function name into code-generation functions.
We're going to need it for the error message.
2020-11-16 22:32:25 -08:00
Kartik Agaram 3d31467c0d 7251 2020-11-16 00:37:37 -08:00