Gicho (기초, "basic" in Korean) is a simple operating system running in 16-bit real mode. Written in C and Assembly, made primarily for learning purposes and for fun.
It has a CLI interface that supports basic low-level commands like peek
and poke
. It can also call BIOS interrupts, read and write data from/to a disk, as well as execute other programs.
To build Gicho, you will need a couple of prerequisites:
- A Linux host system - while it is theoretically possible to set up the environment on other OSes, it is not supported. On Windows, you can use WSL.
gcc-ia16
- if you're on an Arch-based distro, you can install it from the AUR. Otherwise, you'll probably need to build it from source.- GNU make - you should be able to install it from your package manager, e.g.
apt install make
for Debian-based distros. - NASM - it should also be available in your package manager.
- QEMU (optional) - in case you want to run or debug the OS, it's recommended to use QEMU. Like with Make and NASM, the package manager should have it.
- Get the source code. You can either download the ZIP archive by pressing the Code > Download ZIP button, or clone the repository with Git by running
git clone https://github.com/bemxio/gicho
. - Ensure all variables in the
Makefile
are correct. You can change GCC, NASM, and QEMU paths if they are different on your system, as well as the path of the disk image. - Run
make
in the root directory of the project. This will compile the kernel and the bootloader, link them together, and create an image file you can run.
The Makefile
has a target for running the OS in QEMU. If you installed it earlier, just run make run
and it should start Gicho up in a new window.
In case you want to start it up manually, you can execute the following command:
qemu-system-i386 -drive file=<image path>,format=raw
with <image path>
being the path to the disk image. By default, it's build/gicho.img
.
It is also possible to run Gicho in VirtualBox. To do so, create a new VM, set whatever settings you want, then go to the Storage tab in the settings, add a floppy controller and attach the disk image to it. Start the VM and it should boot right up.
Gicho is a hit-or-miss when it comes to running on real hardware. It is unable to run on UEFI PC's with no legacy boot support. If you have a computer that supports it, you can write the image file onto a USB drive using tools like dd
or balenaEtcher, and then boot from it.
Here's an example of how to write the image using dd
:
dd if=<image path> of=/dev/sdX status=progress
where <image path>
is the path to the disk image and /dev/sdX
is the USB drive. Make sure you have specified the correct device, as this command will overwrite data on it.
Gicho has 9 available commands:
help
- displays a list of available commands.echo [text]
- prints the specified text to the screen.clear
- clears the screen.peek <address>
- reads a byte at a specified address in memory.poke <address> <value>
- writes a byte to the specified memory address.int <interrupt> [registers]
- calls a BIOS interrupt with optional register values, in the format of space-separated assignments (e.g.ah=0 al=0x03 bx=0x0449
).read <drive number> <sector amount> [offset] [memory address]
- reads sectors from a disk into memory. By default, the offset is 0 and the memory address is0x7e00
.write <drive number> <sector amount> [memory address] [offset]
- writes sectors from memory to a disk. THe defaults are the same as forread
.run [address]
- executes a program at the specified address. By default, it's0x7e00
.
The image file contains two sample programs, hello.asm
and rainbow.asm
. You can run them by first reading them into memory by running read 0x80 1 18
, then executing one of them with the run
command for hello.asm
and run 0x7e29
for rainbow.asm
.
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! If you want to contribute, whether it's an issue you've encountered or a pull request with new features, feel free to do so.