Sync, but easier to develop.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Curle 73f6c0dade Fix dodgy APIC implementation 2 years ago
.github Cleanup and Actions build (#6) 3 years ago
Testing/Temporary Large rewrites & struggles 2 years ago
img Large rewrites & struggles 2 years ago
inc Fix dodgy APIC implementation 2 years ago
src Fix dodgy APIC implementation 2 years ago
tools Cleanup and Actions build (#6) 3 years ago
.gitignore Refactor for C++ components 3 years ago
CMakeLists.txt Implement proper PS2 Keyboard driver 2 years ago
LICENSE Create LICENSE 3 years ago
README.md The realization that we already run on all cores.. 2 years ago
build_and_run.sh Cleanup and Actions build (#6) 3 years ago
chroma.bxrc Delete paging. Time for an overhaul. 3 years ago
chroma.iso Large rewrites & struggles 2 years ago
chroma.json Adjust structure of the image folder 3 years ago
linker.ld Refactor for C++ components 3 years ago
post.sh Add option to postprocessing script to allow skipping VBox integration 3 years ago
pre.sh Cleanup and Actions build (#6) 3 years ago
run.bat Move toolchain to VirtualBox. qemu is too restrictive :/ 3 years ago

README.md

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".