Commit Graph

9 Commits

Author SHA1 Message Date
Kartik K. Agaram fc951149a0 shell: support loading 128x128px images
I'm loading them in uncompressed ASCII format, and all streams and gap
buffers all over the place need to get massively scaled up to 256KB
capacity. But the tests don't yet run out of RAM, so I'll keep going.
2021-07-28 23:58:46 -07:00
Kartik K. Agaram 74d6a4d382 . 2021-06-21 22:02:47 -07:00
Kartik K. Agaram 29795a0db4 start emitting indent tokens 2021-06-18 21:42:01 -07:00
Kartik K. Agaram 0f2d0d6abe shell: stop punning tokens as cells 2021-06-18 06:53:55 -07:00
Kartik K. Agaram 4de6f80334 . 2021-05-29 16:25:38 -07:00
Kartik K. Agaram 8be6fe2485 bump up the token limit again
Current state of code in the Mu computer:
  (
    (globals . (
      (hline1 . (fn () (screen y lo hi color)
                  (if (>= lo hi)
                    ()
                    ((fn ()
                       (pixel screen lo y color)
                       (hline1 screen y (+ lo 1) hi color))))))
      (vline1 . (fn () (screen x lo hi color)
                  (if (>= lo hi)
                    ()
                    ((fn ()
                       (pixel screen x lo color)
                       (vline1 screen x (+ lo 1) hi color))))))
      (hline . (fn () (screen y color)
                 (hline1 screen y 0 (width screen) color)))
      (vline . (fn () (screen y color)
                 (vline1 screen y 0 (height screen) color)))
      (andf . (fn () (a b)
                (if a
                  (if b
                    1
                    ())
                  ())))
      (brline . (fn () (screen x0 y0 x1 y1 color)
                   ((fn (dx dy sx sy)
                      ((fn (err)
                         (brline1 screen x0 y0 x1 y1 dx dy sx sy err color))
                       (+ dx dy)))
                    (abs (- x1 x0))
                    (- 0 (abs (- y1 y0)))
                    (sgn (- x1 x0))
                    (sgn (- y1 y0)))))
      (brline1 . (fn () (screen x y xmax ymax dx dy sx sy err color)
                   (pixel screen x y color)
                   (if (andf (= x xmax) (= y ymax))
                     ()
                     ((fn (e2)
                        (brline1 screen
                          (if (>= e2 dy)
                            (+ x sx)
                            x)
                          (if (<= e2 dx)
                            (+ y sy)
                            y)
                          xmax
                          ymax
                          dx
                          dy
                          sx
                          sy
                          (+ err
                             (+
                               (if (>= e2 dy)
                                 dy
                                 0)
                               (if (<= e2 dx)
                                 dx
                                 0)))
                          color))
                      (* err 2)))))
      (read_line_2 . (fn () (keyboard stream)
                       ((fn (c)
                         (if (= c 10)
                           stream
                           (if (= c 0)
                             stream
                             (read_line_2 keyboard (write stream c)))))
                        (key keyboard))))
      (read_line . (fn () (keyboard)
                     (read_line_2 keyboard (stream))))
      (fill_rect . (fn () (screen x1 y1 x2 y2 fill_color)
                     (if (>= y1 y2)
                       ()
                       ((fn ()
                          (hline1 screen y1 x1 x2 fill_color)
                          (fill_rect screen x1 (+ y1 1) x2 y2 fill_color))))))
      (chessboard . (fn () (screen px)
                      (chessboard1 screen px 0 15)))
      (chessboard1 . (fn () (screen px y color)
                      (if (>= y (height screen))
                        ()
                        ((fn ()
                           (chessboard2 screen px y 0 color)
                           (chessboard1 screen px (+ y px) (- 15 color)))))))
      (chessboard2 . (fn () (screen px y x color)
                      (if (>= x (width screen))
                        ()
                        ((fn ()
                           (fill_rect screen x y (+ x px) (+ y px) color)
                           (chessboard2 screen px y (+ x px) (- 15 color)))))))
    ))
    (sandbox . (chessboard screen 8))
  )
2021-04-17 22:35:35 -07:00
Kartik K. Agaram 1a74c3a1e6 loosening a few more buffers
Mu computer now has more code in it:

  (
    (globals . (
      (hline1 . (fn () (screen y lo hi) (if (>= lo hi) () ((fn () (pixel screen lo y 12) (hline1 screen y (+ lo 1) hi))))))
      (vline1 . (fn () (screen x lo hi) (if (>= lo hi) () ((fn () (pixel screen x lo 12) (vline1 screen x (+ lo 1) hi))))))
      (hline . (fn () (screen y) (hline1 screen y 0 (width screen))))
      (vline . (fn () (screen y) (vline1 screen y 0 (height screen))))
      (andf . (fn (a b)
                (if a
                  (if b
                    1
                    ())
                  ())))
      (brline . (fn (screen x0 y0 x1 y1)
                   ((fn (dx dy sx sy)
                      ((fn (err)
                         (brline1 screen x0 y0 x1 y1 dx dy sx sy err))
                       (+ dx dy)))
                    (abs (- x1 x0))
                    (- 0 (abs (- y1 y0)))
                    (sgn (- x1 x0))
                    (sgn (- y1 y0)))))
      (brline1 . (fn (screen x y xmax ymax dx dy sx sy err)
                   (pixel screen x y 12)
                   (if (andf (= x xmax) (= y ymax))
                     ()
                     ((fn (e2)
                        (brline1 screen
                          (if (>= e2 dy)
                            (+ x sx)
                            x)
                          (if (<= e2 dx)
                            (+ y sy)
                            y)
                          xmax
                          ymax
                          dx
                          dy
                          sx
                          sy
                          (+ err
                             (+
                               (if (>= e2 dy)
                                 dy
                                 0)
                               (if (<= e2 dx)
                                 dx
                                 0)))))
                      (* err 2)))))
    ))
    (sandbox . (brline screen 1 1 5 5))
  )
2021-04-17 08:29:43 -07:00
Kartik K. Agaram e5ff0c39a6 7849 - shell: literal numbers 2021-03-04 22:05:39 -08:00
Kartik K. Agaram 71e4f38129 7842 - new directory organization
Baremetal is now the default build target and therefore has its sources
at the top-level. Baremetal programs build using the phase-2 Mu toolchain
that requires a Linux kernel. This phase-2 codebase which used to be at
the top-level is now under the linux/ directory. Finally, the phase-2 toolchain,
while self-hosting, has a way to bootstrap from a C implementation, which
is now stored in linux/bootstrap. The bootstrap C implementation uses some
literate programming tools that are now in linux/bootstrap/tools.

So the whole thing has gotten inverted. Each directory should build one
artifact and include the main sources (along with standard library). Tools
used for building it are relegated to sub-directories, even though those
tools are often useful in their own right, and have had lots of interesting
programs written using them.

A couple of things have gotten dropped in this process:
  - I had old ways to run on just a Linux kernel, or with a Soso kernel.
    No more.
  - I had some old tooling for running a single test at the cursor. I haven't
    used that lately. Maybe I'll bring it back one day.

The reorg isn't done yet. Still to do:
  - redo documentation everywhere. All the README files, all other markdown,
    particularly vocabulary.md.
  - clean up how-to-run comments at the start of programs everywhere
  - rethink what to do with the html/ directory. Do we even want to keep
    supporting it?

In spite of these shortcomings, all the scripts at the top-level, linux/
and linux/bootstrap are working. The names of the scripts also feel reasonable.
This is a good milestone to take stock at.
2021-03-03 22:21:03 -08:00