Commit Graph

1359 Commits

Author SHA1 Message Date
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
Kartik Agaram 8d2dece291 7250 2020-11-16 00:00:32 -08:00
Kartik Agaram 002f2609e9 7248 - mu.subx: new primitive 'clear-object' 2020-11-15 23:13:23 -08:00
Kartik Agaram b6b94712a1 7246 - tile: segment each function's area 2020-11-15 22:05:33 -08:00
Kartik Agaram bdbf2093ea 7245 - tile: right-align functions 2020-11-15 21:45:20 -08:00
Kartik Agaram 7ca4b6a2f7 7244 - tile: new layout for primitives 2020-11-15 21:01:17 -08:00
Kartik Agaram 56ed1a1073 7243 - tile: starting to make functions editable 2020-11-15 20:30:01 -08:00
Kartik Agaram a8dfb603fd 7242 2020-11-15 20:24:41 -08:00
Kartik Agaram 0879555213 7241 - mu.subx: check float registers 2020-11-15 17:24:38 -08:00
Kartik Agaram dcf004d51e 7240 2020-11-15 17:14:07 -08:00
Kartik Agaram 91dc5814df 7239 2020-11-15 16:06:00 -08:00
Kartik Agaram 0e0a60013d 7238 - mu.subx: final restrictions on 'addr'
I had to tweak one app that wasn't following the rules.
2020-11-15 13:18:38 -08:00
Kartik Agaram e996502f01 7237
Minor tweaks to get Mu shell running nicely on a Linux console atop Qemu.

We also need to switch a few 256-color codes to 8-color mode. I'm not
sure whether/how to patch the repo for those.
2020-11-14 20:27:43 -08:00
Kartik Agaram ea8a64cfb0 7232 - mu.subx: more checks for byte types 2020-11-12 23:56:41 -08:00
Kartik Agaram f3d33ac462 7231 2020-11-12 23:25:45 -08:00
Kartik Agaram 165ed256a3 7230 - mu.subx: some more checks for stmt outputs 2020-11-12 23:13:48 -08:00
Kartik Agaram 37ebd39253 7229 - tile: fix ctrl-e 2020-11-12 20:37:42 -08:00
Kartik Agaram 2ee741b0d3 7228 2020-11-12 20:33:37 -08:00
Kartik Agaram d715599246 7226 2020-11-11 23:30:56 -08:00
Kartik Agaram 307745bcc2 7225
Both manual tests described in commit 7222 now work.

To make them work I had to figure out how to copy a file. It
requires a dependency on a new syscall: lseek.
2020-11-11 23:25:55 -08:00
Kartik Agaram 3ae62cfd79 7222
Ok, I found a failing manual test for files as well.

Here are the two steelman tests, one for screens and one for files:

1.
  5 5 fake-screen =s

  s 1 down 1 right

  ctrl-d foo

  expand

final state:

  s       foo                                            foo
               s       1       down    1       right   ⇗
   ┌─────┐                                                ┌─────┐
                ┌─────┐      1  ┌─────┐      1  ┌─────┐    │
                        ┌─────┐  │      ┌─────┐  │         ─
                                         │       │
                                         │       │
                                                 ─
   └─────┘                                                └─────┘
                └─────┘         └─────┘         └─────┘
                        └─────┘         └─────┘

2.

  "x" open =f

  f read f read

  ctrl-d read2

  expand

final state:

  f      read2                                read2
                f      read   f      read   ⇗
    FILE                                       ❝def❞
                  FILE  ❝abc❞   FILE  ❝❞
                               ❝def❞  ❝ghi❞

In both cases there are 3 levels of issues:

- getting a single-line expression to work
- getting a single-line expression to work when operating on a binding
  defined in a previous line
- getting an expanded function call to work

The third is where the rub is right now. And what both examples above share
is that the function performs 2 mutations to the screen/file.

So we need a deep copy after all. And it's not very clear how to copy a
file descriptor including the seek location. Linux's dup() syscall creates
an alias to the file descriptor. And opening /proc seems awfully Linux-specific:

https://stackoverflow.com/questions/54727231/duplicating-file-descriptor-and-seeking-through-both-of-them-independently/54727424#54727424
2020-11-10 19:32:54 -08:00
Kartik Agaram 021c2975aa 7221
I can't get file values to exhibit the same problem. Why are fake screens
special?
2020-11-09 21:56:21 -08:00
Kartik Agaram f20984f44a 7220
Even this isn't enough. While shallow copies keep us from transferring
new bindings to callers, the screen object is still the same, so mutations
to bindings are contagious.

Basically I'm losing IQ points from programming in a language that encourages
mutation over copying.
2020-11-09 21:44:38 -08:00
Kartik Agaram 7e4f8983f8 7219
We're still busted, but on the right track.
2020-11-09 21:25:56 -08:00
Kartik Agaram c01289ddde 7218
This bug was incredibly painful to track down: the one-line fix is to replace
'line' with 'first-line' in the call to 'evaluate' in render-line before
recursing.

Things that made it challenging:
- A high degree of coiling with recursive calls and multiple places of
  evaluation.
- An accidental aliasing in bindings (when rendering the main column in
  render-line) that masked the underlying bug and made things seem to work
  most of the time.
- Too many fucking arguments to render-line, a maze of twisty line objects
  all alike.
2020-11-09 21:16:09 -08:00
Kartik Agaram 148f2c9b65 7217 2020-11-08 11:31:54 -08:00
Kartik Agaram 2be7af86db 7216
In addition to fixing a segfault, the realization here is that we don't
always have a type name. Error messages need to take that into account.
2020-11-08 09:43:35 -08:00
Kartik Agaram 4cf8be04e9 7215
Attempt #3: always create a copy of the bindings before each column/evaluate.
The details are fuzzy in my head, but it seemed worth trying. I figured
I'd either see the old duplication behavior or everything will work. Instead
I'm seeing new problems.

  commit 7208:
    5 5 fake-screen =s
    s 1 down 1 right

    expected:
      |
      -

    observed:
      |
      |
      -

  commit 7210-7212:
    5 5 fake-screen =s
    s 1 down 1 right
    [define foo]
    s foo
    [expand foo]

    observed: no bindings available when rendering foo expanded

  commit 7213:
    5 5 fake-screen =s
    s 1 down 1 right
    [define foo]
    s foo
    [expand foo]

    expected within foo:
      |
      -

    observed within foo:
      |
      |
      -

  commit 7215:
    5 5 fake-screen =s
    s 1 down 1 right
    [define foo]
    s foo
    [expand foo]

    observed: no bindings available when rendering foo expanded
2020-11-07 21:13:10 -08:00
Kartik Agaram 8fdf344ea9 7214 - undo 7213
Turns out even that doesn't work.

There are two distinct use cases here:
  1. Keeping columns from infecting each other.
  2. Expanding function calls.

Perhaps ping-ponging between them is a sign I need tests.
2020-11-07 20:22:19 -08:00
Kartik Agaram 97b665c9b4 7213 - redo the bugfix of 7210
It turns out deciding when to initialize the table of bindings is quite
a thorny problem in the presence of function calls (since they need their
args bound). In time I should probably support a linked list of tables.
For now I'll just continue to reuse tables, but perform lookups in reverse
order so that the correct binding is always returned.
2020-11-07 20:12:21 -08:00
Kartik Agaram 9185512dba 7212 2020-11-07 19:51:31 -08:00
Kartik Agaram 4f86220a6c 7211 2020-11-07 19:49:11 -08:00
Kartik Agaram f2a3c381a7 7210
Bug fixed; I had to reinitialize the table of bindings.
Interesting debugging experience.
2020-11-07 19:45:58 -08:00
Kartik Agaram 412304cf45 7209 2020-11-07 18:26:08 -08:00
Kartik Agaram 776f1eee0b 7208 - tile: start new line
Only the final line shows the stack for now. No way to move cursor back
up.

One bug I'm noticing: creating a screen on one line and then reusing it
in a second causes operations to be performed multiple times.
2020-11-07 18:23:05 -08:00
Kartik Agaram d7ad7f9753 7207 - tile: bugfix 2020-11-07 18:02:03 -08:00
Kartik Agaram 5e3927f7e1 7206 - tile: up/down/left/right now print lines 2020-11-07 16:36:47 -08:00
Kartik Agaram 8338c38698 7205 - tile: magnitudes for up/down/left/right 2020-11-07 15:26:04 -08:00
Kartik Agaram 88e53f5628 7202 - rendering screens above other values 2020-11-06 18:26:25 -08:00
Kartik Agaram 1f77feff37 7201 2020-11-06 18:25:52 -08:00
Kartik Agaram cea9b05bb6 7200 - tile: cursor movement helpers 2020-11-06 18:18:42 -08:00
Kartik Agaram 7ee2129ef4 7199 - tile: primitive 'move' 2020-11-06 17:46:42 -08:00
Kartik Agaram aa96c23f0c 7198 - tile: primitive 'print' 2020-11-06 17:46:27 -08:00
Kartik Agaram abba997d1b 7197 - tile: render screen contents and cursor 2020-11-06 16:05:33 -08:00
Kartik Agaram 2855bc69bd 7196 - tile: render empty screen 2020-11-06 14:26:42 -08:00
Kartik Agaram 443140ae3e 7195 - tile: create 'screen' objects 2020-11-06 13:39:46 -08:00
Kartik Agaram 9a0412b858 7194 2020-11-06 13:39:46 -08:00
Kartik Agaram 0181e9eeb6 7193 - tile: extract taxonomy of values into a separate file 2020-11-06 13:39:46 -08:00
Kartik Agaram 494eb64aaf 7192 - more checks around literals
We can copy non-zero literals only to non-addr non-offset scalars.

This change is surprisingly short for the magnitude of the limb I felt
myself going out on for it. Surprising that there were no unpleasant discoveries.
2020-11-05 23:50:12 -08:00
Kartik Agaram bdb48b5211 7191 2020-11-05 21:03:57 -08:00
Kartik Agaram ed146be6bc 7190
Training sights now on some gaps with offset types.
2020-11-05 20:49:00 -08:00
Kartik Agaram 4b41663394 7189 - some validations on function name
Mu has no overloading or static dispatch for now.
2020-11-05 20:10:46 -08:00
Kartik Agaram 7a25625c43 7188 - raise error on deref of var on stack 2020-11-05 19:08:44 -08:00
Kartik Agaram c31d1d3a3d 7185 - type checks for 'populate-stream'
Lots of copy-pasta.
2020-11-05 16:35:47 -08:00
Kartik Agaram 2ea3107c21 7184 - type checks for 'populate' 2020-11-05 16:27:46 -08:00
Kartik Agaram 6017f1e240 7183 - type checks for 'allocate' 2020-11-05 15:06:25 -08:00
Kartik Agaram 9b91efeadd 7182 - type checks for 'copy-object' 2020-11-05 01:20:23 -08:00
Kartik Agaram 686b87cc06 7181 - type checks for 'address' instruction 2020-11-05 00:51:15 -08:00
Kartik Agaram cc356b35bf 7180
More bugfixes, now all apps are working.

In the process of fixing the bugs in translating apps/browse, I found a
typo in apps/tile that just happened to accidentally be compiling fine.
2020-11-04 22:58:13 -08:00
Kartik Agaram 8767e709c5 7179
After this bugfix, apps/tile/ is now working.

apps/browse/ is still failing.
2020-11-04 22:38:39 -08:00
Kartik Agaram 940dad03c2 7178 - type checks for 'compare' instruction 2020-11-04 20:34:43 -08:00
Kartik Agaram 179d26ae8e 7177 - type checks for 'copy-to' instruction 2020-11-04 19:04:43 -08:00
Kartik Agaram 0102aa377a 7176 - type checks for 'copy' instruction 2020-11-04 19:04:15 -08:00
Kartik Agaram 768aeffbbe 7174 - function returns should now be safe 2020-11-03 22:32:50 -08:00
Kartik Agaram bd57b37fc5 7173
All tests passing again.
2020-11-03 21:31:48 -08:00
Kartik Agaram da2dc3ee9d 7172 2020-11-03 20:37:26 -08:00
Kartik Agaram c623ff2975 7171 2020-11-03 20:23:39 -08:00
Kartik Agaram 71d21ae662 7170
One more test.
2020-11-03 20:13:41 -08:00
Kartik Agaram aa36ee1cdf 7169
Now test-return-unavailable-value is passing,
but test-convert-return-with-duplicate-values is failing.

Time to think.
2020-11-03 20:13:02 -08:00
Kartik Agaram ec638f029d 7168 - snapshot
2 new tests:
  test-return-unavailable-value - currently failing
  test-convert-return-with-duplicate-values - currently passing

I don't yet know how to make both pass.
2020-11-03 19:15:32 -08:00
Kartik Agaram f7cd97c197 7167 2020-11-03 18:10:32 -08:00