Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/whily/yalo
Lisp OS running on bare metal x86-64 hardware (WIP)
https://github.com/whily/yalo
Last synced: 3 months ago
JSON representation
Lisp OS running on bare metal x86-64 hardware (WIP)
- Host: GitHub
- URL: https://github.com/whily/yalo
- Owner: whily
- License: gpl-2.0
- Created: 2014-01-26T12:21:56.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2022-05-11T01:57:19.000Z (over 2 years ago)
- Last Synced: 2024-05-20T13:33:34.049Z (6 months ago)
- Language: Common Lisp
- Homepage:
- Size: 414 KB
- Stars: 569
- Watchers: 68
- Forks: 32
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
Yalo
====# Target
Yalo is a Lisp OS running on bare metal x86-64 hardware. The system
programming language is **Ink**, a new Lisp dialect which combines the
elegance of Scheme and powerfulness of Common Lisp. The project webpage
is:# Status
The project is only at very very initial stage, with an
[assembler](https://github.com/whily/yalo/blob/master/doc/AssemblyX64.md)
written in Common Lisp, and a 64 bit bootloader."Short term" plan:
- [x] VGA text mode without using BIOS.
- [x] Keyboard handling without using BIOS.
- [x] Switch to 32 bit protected mode.
- [x] Switch to 64 bit long mode.
- [ ] Physical/virtual memory management.
- [ ] Userland and system call.
- [ ] Implement Ink interpreter with assembly.
- [ ] Self hosting a more powerful Ink interpreter with Ink itself.# Getting Started
## Getting Bootable Image
Currently, cross compilation is needed to build one floppy image
containing yalo.### [Cross compilation](https://github.com/whily/yalo/blob/master/doc/CrossCompilation.md)
Although yalo should compile on any Ansi Common Lisp implementation,
it is only tested on SBCL and Clozure CL (aka CCL).Mandatory Requirements:
* [SBCL](http://sbcl.sourceforge.net SBCL) or [CCL](https://ccl.clozure.com/)
* gitOptional Requirements:
* Emacs
* SLIME#### Getting Source Code
Run following command to anonymously checkout the latest source code
of yalo.```shell
$ git clone https://github.com/whily/yalo.git
```#### Setup link for ASDF
Run following commands to make SBCL/CCL aware of the ASDF file for the
cross compiler. Note that one only needs to run the script once.```shell
$ cd yalo/cc
$ ./lnasdf
```#### Build Floppy Image
##### With SBCL or CCL alone
For SBCL, in the root directory of the project (e.g. directory
`yalo`), run script `write-kernel-sbcl`. Afterwards,`floppy.img` is
written directly to the same directory, where scripts to run the image
(e.g. `run-bochs`) are located. It should be noted that it is assumed
that `sbcl` executable is installed in directory `/usr/bin`. Otherwise
modify script `write-kernel-sbcl` accordingly.For CCL, in the root directory of the project, type the following at
REPL to generate `floppy.img`:```lisp
(require 'asdf)
(asdf:oos 'asdf:load-op 'cc)
(in-package :cc)
(write-kernel "../floppy.img")
```One may type `(ccl:quit)` to exit from CCL.
##### With Emacs+SLIME
Inside Emacs,
1. First type `M-x slime` if SLIME is not started.
2. Type `M-x slime-load-system` then type `cc` when prompted for the
system.
3. At REPL, type `(in-package :cc)` to switch to package *cc*
(alternatively, one can user keyboard shortcut `C-x M-p` and then type `cc`).
4. Type `(write-kernel "../floppy.img")` at SLIME REPL to generate the kernel.
Here we assume that current directory is `cc` of the source tree, therefore
`floppy.img` is written directly to the source tree, where scripts to run the
image (e.g. `run-bochs`) are located.Above is applicable for both SBCL and CCL, assuming SLIME is
configured properly for the CL implementation(s).## Run Image
There are various ways to run the image.
### Bochs
Go to the root directory of the source code, where script `run-bochs`
is located. Run the scripts and select *6* to proceed emulation. After
invoking `run-bochs`, select *6*, emulation starts directly.On HiDPI screens, the font of Bochs is too small to see. Therefore in
script `run-bochs`, there is one line related
to using SDL2 (make sure the library is installed) as display library
and starts the emulator in fullscreen mode, as below:```
'display_library: sdl2, options="fullscreen,gui_debug"'
```Bochs header bar is not visible in full screen mode. Therefore one
needs to press `Ctrl+Alt+q` to shutdown Yalo to quit emulator.
Alternatively, one can modify the script files (e.g. removing
`fullscreen` option or deleting the line containing `display_library`
completely).In addition, `scripts/build-boch` is the script the author used to
compile a customized Bochs.Note that on Ubuntu (at least in 16.10), package `bochs-x` should be
installed in addition to package `bochs`.### QEMU
Similar to Bochs, go to the root directory of the source code, where
script `run-qemu` and `debug-qemu` are located.In both `run-qemu` and `debug-qemu`, QEMU monitor is redirectted to
stdio (via argument `-monitor stdio`). Script `run-qemu` will start
the emulator without GDB support; while `debug-qemu` enables GDB
support: `-s` argument makes QEMU listens to port 1234 for GDB, while
`-S` argument makes QEMU pauses at the beginning for GDB's `continue`
command. After running `debug-qemu` and starting GDB, first type
`target remote :1234` to connect to QEMU, then type command `continue`
to resume the emulation.### VirtualBox
In the **Storage** page of the virtual machine settings, right click
and select "Add Floppy Controller". And the select the image file
`floppy.img` for floppy drive. In the **System** page of virtual
machine settings, make sure that Floppy is checked for Boot order.Assuming the VM name is `yalo`, go to the root directory of the source
code, where script `run-virtualbox` and `debug-virtualbox` are
located. Run script `run-virtualbox` to start the emulator, or script
`debug-virtualbox` to start the emulator with debug window.## Software version
So far, the development is done on Arch Linux. For above-mentioned
software, the corresponding version is listed below:* SBCL: 1.4.10 or CCL 1.12
* Emacs: 26.1
* SLIME: 2.22
* Bochs: 2.6.9
* QEMU: 3.0.0
* VirtualBox: 5.2.18