Sync, but easier to develop.
Go to file
2022-07-10 21:57:48 +01:00
.github Cleanup and Actions build (#6) 2021-06-14 15:41:07 +01:00
img Large rewrites & struggles 2022-02-17 02:03:05 +00:00
inc Fix dodgy APIC implementation 2022-07-10 21:57:48 +01:00
src Fix dodgy APIC implementation 2022-07-10 21:57:48 +01:00
Testing/Temporary Large rewrites & struggles 2022-02-17 02:03:05 +00:00
tools Cleanup and Actions build (#6) 2021-06-14 15:41:07 +01:00
.gitignore Refactor for C++ components 2021-07-04 21:47:09 +01:00
build_and_run.sh Cleanup and Actions build (#6) 2021-06-14 15:41:07 +01:00
chroma.bxrc Delete paging. Time for an overhaul. 2021-03-13 21:24:30 +00:00
chroma.iso Large rewrites & struggles 2022-02-17 02:03:05 +00:00
chroma.json Adjust structure of the image folder 2020-11-28 16:52:34 +00:00
CMakeLists.txt Implement proper PS2 Keyboard driver 2022-07-10 01:01:49 +01:00
LICENSE Create LICENSE 2020-11-29 21:12:49 +00:00
linker.ld Refactor for C++ components 2021-07-04 21:47:09 +01:00
post.sh Add option to postprocessing script to allow skipping VBox integration 2021-06-16 21:05:16 +01:00
pre.sh Cleanup and Actions build (#6) 2021-06-14 15:41:07 +01:00
README.md The realization that we already run on all cores.. 2022-07-08 23:23:49 +01:00
run.bat Move toolchain to VirtualBox. qemu is too restrictive :/ 2020-09-29 01:36:05 +01:00

Chroma Logo

Chroma

The Chromatic OS

About

Chroma is an x86_64 kernel, soon to be Operating System.
It uses the bootboot bootloader.

Features

It can currently:

  • read keyboard input
  • draw to the screen, including text and basic images.
  • output audio over the PC Speaker
  • manage physical memory
  • manage virtual memory
  • switch to ring 3
  • switch tasks
  • schedule tasks
  • handle processes and threads
  • handle mouse input
  • display a basic 3D object
  • display a basic 3D world
  • display a basic 3D world in VR

Once we reach this point... well, the world is our oyster.

Building

Chroma can be built on Windows or Linux.

Windows

I (Curle) use Windows for developing Chroma.
Simply have an x86_64-elf-gcc and ld (included!) in your PATH, run cmake in the source directory, then make. It will compile the kernel, and create an OS image with mkbootimg.

Linux

The system for linux is a lot easier, but you do need an x86_64-elf-gcc cross compiler. You can get one from the AUR on Arch-based distros (like Manjaro), or make one yourself using the OSDev Wiki guide

On the Chroma side, Simply run the init.sh to generate a makefile, then make to create the image file.

The generated IMG works in QEMU, or on a physical test device (unlike a lot of other hobby OSes!) This means you can use any emulator or hypervisor to run it.

Project structure

The repository has a lot of files and folders after setting up a workspace. This is a guide to all the files and folders.


      File Location                          | Description
/
├── bin/                                     |  Binary Output folder
│   └── img/                                 |  Image Output folder.
│       └── chroma.img                       |  Disk Image file, as an alternative to ISO below.
│                                            |                       
├── inc/                                     |  Global header include folder.
│   ├── driver/                              |  Header files for the default driver implementations.
│   ├── editor/                              |  Header files for the builtin editor and debugger.
│   ├── kernel/                              |  Header files for the Chroma kernel itself.
│   └── lainlib/                             |  Header files for the Lainlib standard library.
│                                            | 
├── src/                                     |  Source files.
│   ├── assets/                              |  Assorted linkable files that will be bundled with the built image.
│   ├── drivers/                             |  Handling of the default driver implementations.
│   ├── editor/                              |  Handling of the builtin editor and debugger.
│   ├── global/                              |  Various files used in global objects (ie. the C RunTime, new core bootstrapping, etc)
│   ├── lainlib/                             |  Handling of the Lainlib standard library.
│   ├── system/                              |  Core Kernel files.
│   ├── video/                               |  Writing and drawing on the screen.
│   └── kernel.cpp                           |  The primary kernel entry point.
│                                            | 
├── tools/                                   |  Auxiliary tools used in the buildsystem.
│   └── mkbootimg/                           |  Creates a bootable .img file based on the chroma.json configuration file below.
│                                            | 
├── .gitignore                               |  Git Repository Ignored Files
├── build_and_run.sh                         |  shell script that builds the img file and runs it using run.sh below.
├── choma.bxrc                               |  bxrc (Bochs Runtime Config) file for the Bochs emulator and debugger.
├── chroma.iso                               |  ISO disc image file that can be loaded into a VM or onto a boot disk.
├── chroma.json                              |  MkBootImg configuration file
├── CMakeLists.txt                           |  Buildscript and CMake project configuration file.
├── LICENSE                                  |  Chroma's License. MIT License.
├── linker.ld                                |  GCC linkerscript that places files and addresses at their expected positions.
├── post.sh                                  |  Postprocessing script; Generates the final img file, and attempts to update a VirtualBox configuration named "Chroma" to run this new file instead.
├── pre.sh                                   |  First-time setup script; generates the font file binary and generates the CMake buildscripts.
├── README.md                                |  This file.
└── run.bat                                  |  Attempts to start a Virtualbox VM named "chroma".