{"id":13711069,"url":"https://github.com/whily/yalo","last_synced_at":"2025-05-06T20:31:43.481Z","repository":{"id":13560411,"uuid":"16252635","full_name":"whily/yalo","owner":"whily","description":"Lisp OS running on bare metal x86-64 hardware (WIP)","archived":false,"fork":false,"pushed_at":"2022-05-11T01:57:19.000Z","size":424,"stargazers_count":569,"open_issues_count":1,"forks_count":32,"subscribers_count":67,"default_branch":"master","last_synced_at":"2024-08-03T23:23:10.201Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whily.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-01-26T12:21:56.000Z","updated_at":"2024-07-14T15:23:02.000Z","dependencies_parsed_at":"2022-09-11T07:23:58.423Z","dependency_job_id":null,"html_url":"https://github.com/whily/yalo","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whily%2Fyalo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whily%2Fyalo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whily%2Fyalo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whily%2Fyalo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whily","download_url":"https://codeload.github.com/whily/yalo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224528333,"owners_count":17326343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T23:01:04.115Z","updated_at":"2024-11-13T21:31:26.977Z","avatar_url":"https://github.com/whily.png","language":"Common Lisp","funding_links":[],"categories":["Common Lisp","Lisp Operating System","Applications"],"sub_categories":["Operating System"],"readme":"Yalo\n====\n\n# Target\n\nYalo is a Lisp OS running on bare metal x86-64 hardware. The system\nprogramming language is **Ink**, a new Lisp dialect which combines the\nelegance of Scheme and powerfulness of Common Lisp. The project webpage\nis: \u003chttps://github.com/whily/yalo\u003e\n\n# Status\n\nThe project is only at very very initial stage, with an\n[assembler](https://github.com/whily/yalo/blob/master/doc/AssemblyX64.md)\nwritten in Common Lisp, and a 64 bit bootloader.\n\n\"Short term\" plan:\n\n- [x] VGA text mode without using BIOS.\n- [x] Keyboard handling without using BIOS.\n- [x] Switch to 32 bit protected mode.\n- [x] Switch to 64 bit long mode.\n- [ ] Physical/virtual memory management.\n- [ ] Userland and system call.\n- [ ] Implement Ink interpreter with assembly.\n- [ ] Self hosting a more powerful Ink interpreter with Ink itself.\n\n# Getting Started\n\n## Getting Bootable Image\n\nCurrently, cross compilation is needed to build one floppy image\ncontaining yalo.\n\n### [Cross compilation](https://github.com/whily/yalo/blob/master/doc/CrossCompilation.md)\n\nAlthough yalo should compile on any Ansi Common Lisp implementation,\nit is only tested on SBCL and Clozure CL (aka CCL).\n\nMandatory Requirements:\n* [SBCL](http://sbcl.sourceforge.net SBCL) or [CCL](https://ccl.clozure.com/)\n* git\n\nOptional Requirements:\n* Emacs\n* SLIME\n\n#### Getting Source Code\n\nRun following command to anonymously checkout the latest source code\nof yalo.\n\n```shell\n$ git clone https://github.com/whily/yalo.git\n```\n\n#### Setup link for ASDF\n\nRun following commands to make SBCL/CCL aware of the ASDF file for the\ncross compiler. Note that one only needs to run the script once.\n\n```shell\n$ cd yalo/cc\n$ ./lnasdf\n```\n\n#### Build Floppy Image\n\n##### With SBCL or CCL alone\n\nFor SBCL, in the root directory of the project (e.g. directory\n`yalo`), run script `write-kernel-sbcl`. Afterwards,`floppy.img` is\nwritten directly to the same directory, where scripts to run the image\n(e.g. `run-bochs`) are located. It should be noted that it is assumed\nthat `sbcl` executable is installed in directory `/usr/bin`. Otherwise\nmodify script `write-kernel-sbcl` accordingly.\n\nFor CCL, in the root directory of the project, type the following at\nREPL to generate `floppy.img`:\n\n```lisp\n(require 'asdf)\n(asdf:oos 'asdf:load-op 'cc)\n(in-package :cc)\n(write-kernel \"../floppy.img\")\n```\n\nOne may type `(ccl:quit)` to exit from CCL.\n\n##### With Emacs+SLIME\n\nInside Emacs,\n\n1. First type `M-x slime` if SLIME is not started.\n2. Type `M-x slime-load-system` then type `cc` when prompted for the\n   system.\n3. At REPL, type `(in-package :cc)` to switch to package *cc*\n   (alternatively, one can user keyboard shortcut `C-x M-p` and then type `cc`).\n4. Type `(write-kernel \"../floppy.img\")` at SLIME REPL to generate the kernel.\n   Here we assume that current directory is `cc` of the source tree, therefore\n   `floppy.img` is written directly to the source tree, where scripts to run the\n   image (e.g. `run-bochs`) are located.\n\nAbove is applicable for both SBCL and CCL, assuming SLIME is\nconfigured properly for the CL implementation(s).\n\n## Run Image\n\nThere are various ways to run the image.\n\n### Bochs\n\nGo to the root directory of the source code, where script `run-bochs`\nis located. Run the scripts and select *6* to proceed emulation. After\ninvoking `run-bochs`, select *6*, emulation starts directly.\n\nOn HiDPI screens, the font of Bochs is too small to see. Therefore in\nscript `run-bochs`, there is one line related\nto using SDL2 (make sure the library is installed) as display library\nand starts the emulator in fullscreen mode, as below:\n\n```\n    'display_library: sdl2, options=\"fullscreen,gui_debug\"'\n```\n\nBochs header bar is not visible in full screen mode. Therefore one\nneeds to press `Ctrl+Alt+q` to shutdown Yalo to quit emulator.\nAlternatively, one can modify the script files (e.g. removing\n`fullscreen` option or deleting the line containing `display_library`\ncompletely).\n\nIn addition, `scripts/build-boch` is the script the author used to\ncompile a customized Bochs.\n\nNote that on Ubuntu (at least in 16.10), package `bochs-x` should be\ninstalled in addition to package `bochs`.\n\n### QEMU\n\nSimilar to Bochs, go to the root directory of the source code, where\nscript `run-qemu` and `debug-qemu` are located.\n\nIn both `run-qemu` and `debug-qemu`, QEMU monitor is redirectted to\nstdio (via argument `-monitor stdio`). Script `run-qemu` will start\nthe emulator without GDB support; while `debug-qemu` enables GDB\nsupport: `-s` argument makes QEMU listens to port 1234 for GDB, while\n`-S` argument makes QEMU pauses at the beginning for GDB's `continue`\ncommand. After running `debug-qemu` and starting GDB, first type\n`target remote :1234` to connect to QEMU, then type command `continue`\nto resume the emulation.\n\n### VirtualBox\n\nIn the **Storage** page of the virtual machine settings, right click\nand select \"Add Floppy Controller\". And the select the image file\n`floppy.img` for floppy drive. In the **System** page of virtual\nmachine settings, make sure that Floppy is checked for Boot order.\n\nAssuming the VM name is `yalo`, go to the root directory of the source\ncode, where script `run-virtualbox` and `debug-virtualbox` are\nlocated. Run script `run-virtualbox` to start the emulator, or script\n`debug-virtualbox` to start the emulator with debug window.\n\n## Software version\n\nSo far, the development is done on Arch Linux. For above-mentioned\nsoftware, the corresponding version is listed below:\n\n* SBCL: 1.4.10 or CCL 1.12\n* Emacs: 26.1\n* SLIME: 2.22\n* Bochs: 2.6.9\n* QEMU: 3.0.0\n* VirtualBox: 5.2.18\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhily%2Fyalo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhily%2Fyalo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhily%2Fyalo/lists"}