[Project] ZeSystemPlus - Freestanding x86 OS with IDE Driver, Custom FS (ESFS) & Native Installer

This forums is for OS project announcements including project openings, new releases, update notices, test requests, and job openings (both paying and volunteer).
Post Reply
ZeSystem
Posts: 7
Joined: Thu Jul 02, 2026 6:27 am
Libera.chat IRC: #ZeSystem

[Project] ZeSystemPlus - Freestanding x86 OS with IDE Driver, Custom FS (ESFS) & Native Installer

Post by ZeSystem »

Z.eSystem Plus 3SU

Hello everyone!

I'd like to introduce my operating system project, Z.eSystem Plus.

The project is written entirely from scratch using Assembly and freestanding C++. It targets the x86 Legacy BIOS platform and is intended as a learning project for operating system development.

Unlike operating systems built on existing kernels, Z.eSystem Plus boots directly from the BIOS, switches the CPU into 32-bit Protected Mode, and starts its own kernel.

Main Features
  • Custom BIOS Bootloader
    - Written entirely in Assembly.
    - Loads the kernel directly from disk.
    - Enters 32-bit Protected Mode.
    - Transfers execution to the kernel without using external bootloaders.
  • 32-bit Protected Mode Kernel
    - Freestanding C++ kernel.
    - Assembly entry point.
    - Linked using a custom linker script.
    - No dependency on existing operating systems.
  • VGA Text Console
    - Direct access to VGA memory.
    - Colored text output.
    - Screen management functions.
    - Text-based user interface.
  • Keyboard Driver
    - PS/2 keyboard support.
    - Interactive shell input.
    - Scan code processing.
  • Command Shell
    - Built-in command interpreter.
    - Kernel commands.
    - System information.
    - File system interaction.
  • ESFS (Experimental File System)
    - Custom file system developed specifically for Z.eSystem Plus.
    - Educational implementation.
    - File management experiments.
    - Designed to be expanded in future versions.
  • IDE Disk Driver
    - ATA/IDE disk access.
    - Low-level sector reading and writing.
    - Used by the bootloader and kernel.
  • PCI Support
    - PCI device detection.
    - Hardware enumeration.
    - Foundation for future hardware drivers.
  • ACPI Support
    - Basic ACPI initialization.
    - Beginning of hardware abstraction improvements.
  • Installer Module
    - Experimental installation framework.
    - Intended for future disk installation support.
  • ZASM
    - Custom module reserved for project-specific Assembly functionality.
    - Planned for future low-level extensions.
  • LNC Module
    - Internal kernel component.
    - Modular design for future expansion.
  • Modular Source Tree
    - Each subsystem is implemented in separate source files.
    - Avoids a monolithic kernel source.
    - Easier to maintain and extend.
Architecture

Code: Select all

BIOS
│
▼
boot.asm
│
▼
Protected Mode
│
▼
kernel_entry.asm
│
▼
Kernel (C++)
│
├── VGA Console
├── Keyboard Driver
├── Shell
├── Disk Driver
├── ESFS
├── PCI
├── ACPI
├── Installer
├── ZASM
└── LNC
Development Goals
  • Learn x86 architecture
  • Develop a complete operating system from scratch
  • Understand bootloaders and kernel development
  • Experiment with hardware programming
  • Develop a custom file system
  • Keep the code modular and maintainable
Project Information

Language:
  • Assembly
  • Freestanding C++
Platform:
  • x86
  • Legacy BIOS
Releases

https://github.com/ZeSystem-Inc/Z.eSyst ... ag/Plus3SU

Repository

https://github.com/ZeSystem-Inc/Z.eSystem-Plus-3SU

Releases

Prebuilt os.img images are available on GitHub Releases.

Building

Code: Select all

chmod +x build.sh
./build.sh
Current Status

The project is actively being developed. New features, hardware support, and kernel improvements are continuously being added.

Feedback, suggestions, and code reviews are greatly appreciated.


NOTE: Scrolling has returned in this version.
Last edited by ZeSystem on Sat Jul 11, 2026 9:33 am, edited 6 times in total.
Octocontrabass
Member
Member
Posts: 6245
Joined: Mon Mar 25, 2013 7:01 pm

Re: [Project] ZeSystemPlus - Freestanding x86 OS with IDE Driver, Custom FS (ESFS) & Native Installer

Post by Octocontrabass »

ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amfrom-scratch
Your bootloader looks like you copied it from a tutorial...
ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amthe object linkage strategy
Setting the entry point in the linker script doesn't do anything when you're creating a flat binary. You might also need more wildcards in your linker script.
ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amthe LBA driver boundaries
I can give comments on your IDE driver in general (polling instead of interrupts, legacy I/O ports instead of PCI enumeration), but I don't know what the "boundaries" are.
ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amor the overall design layout of the ESFS structure.
Did you look at how any real filesystems work before you came up with ESFS?
ZeSystem
Posts: 7
Joined: Thu Jul 02, 2026 6:27 am
Libera.chat IRC: #ZeSystem

Re: [Project] ZeSystemPlus - Freestanding x86 OS with IDE Driver, Custom FS (ESFS) & Native Installer

Post by ZeSystem »

Octocontrabass wrote: Thu Jul 02, 2026 8:22 pm
ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amfrom-scratch
Your bootloader looks like you copied it from a tutorial...
ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amthe object linkage strategy
Setting the entry point in the linker script doesn't do anything when you're creating a flat binary. You might also need more wildcards in your linker script.
ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amthe LBA driver boundaries
I can give comments on your IDE driver in general (polling instead of interrupts, legacy I/O ports instead of PCI enumeration), but I don't know what the "boundaries" are.
ZeSystemInc wrote: Thu Jul 02, 2026 7:22 amor the overall design layout of the ESFS structure.
Did you look at how any real filesystems work before you came up with ESFS?
Hi Octocontrabass,

Thank you for the valuable feedback! I highly appreciate you taking the time to review the project.

Regarding the linker strategy: You were absolutely right. Since I am creating a flat binary, relying on implicit object file sorting was causing the "boot by luck" behavior.

As for your comments on the IDE driver (polling/legacy I/O) and the ESFS design layout: These are great points. Since this is an incremental learning project, those components were kept minimal for version 2. I am planning to fully address them—including PCI enumeration, interrupts (IRQs), and standard filesystem implementations—in the upcoming ZeSystem Plus 3 release.

The repository is now fully updated with the linker fixes. Thanks again for pointing this out!
Octocontrabass
Member
Member
Posts: 6245
Joined: Mon Mar 25, 2013 7:01 pm

Re: [Project] ZeSystemPlus - Freestanding x86 OS with IDE Driver, Custom FS (ESFS) & Native Installer

Post by Octocontrabass »

ZeSystemInc wrote: Sat Jul 04, 2026 2:19 pmRegarding the linker strategy: You were absolutely right. Since I am creating a flat binary, relying on implicit object file sorting was causing the "boot by luck" behavior.

The repository is now fully updated with the linker fixes.
But you didn't fix it.
ZeSystem
Posts: 7
Joined: Thu Jul 02, 2026 6:27 am
Libera.chat IRC: #ZeSystem

ZeSystemPlus3 — a from-scratch x86 OS

Post by ZeSystem »

ZeSystemPlus3 — a from-scratch x86 OS

Hi everyone,

I'd like to share the latest iteration of my OS project, ZeSystemPlus3 (successor to ZeSystemPlus2). Everything is written from scratch: bootloader, filesystem, assembler and executable format — no GRUB/Limine, no third-party libraries.

Features
  • Hand-written NASM bootloader (16-bit real mode -> 32-bit protected mode), no GRUB/Limine
  • IDT-based interrupt handling: PIC remap, PIT timer, interrupt-driven PS/2 keyboard driver
  • ESFS — custom filesystem with dynamic sector allocation, files up to ~4GB (uint32_t size field)
  • ATA PIO disk driver
  • ACPI-based shutdown/restart and PCI scanning
  • ZASM — a custom assembler producing the custom LNC executable format (magic: 0x434E4C02)
  • Shell with built-in commands:

    Code: Select all

    help, clear, version, color, shutdown, reboot, editor, cat, ls, rm, zasm, runl, format, install
  • Installer that copies the bootloader and ESFS sectors from USB to hard disk
Project structure

Code: Select all

boot.asm            - bootloader
kernel_entry.asm     - kernel entry point
idt.asm              - IDT / PIC / PIT / keyboard interrupts
kernel.cpp/.hpp       - kernel: screen output, shell, command parsing
disk.cpp/.hpp         - ATA PIO disk driver
esfs.cpp/.hpp         - ESFS filesystem
acpi.cpp/.hpp         - ACPI support
pci.cpp/.hpp          - PCI scanning
zasm.cpp/.hpp         - ZASM assembler
lnc.cpp/.hpp          - LNC executable loader
installer.cpp/.hpp    - hard disk installer
linker.ld             - linker script
Building from source

Code: Select all

rm -f *.o *.bin os.img hdd.img

nasm -f bin boot.asm -o boot.bin
nasm -f elf32 kernel_entry.asm -o kernel_entry.o
nasm -f elf32 idt.asm -o idt.o

g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c kernel.cpp -o kernel.o
g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c disk.cpp -o disk.o
g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c esfs.cpp -o esfs.o
g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c installer.cpp -o installer.o
g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c pci.cpp -o pci.o
g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c lnc.cpp -o lnc.o
g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c zasm.cpp -o zasm.o
g++ -m32 -ffreestanding -fno-pie -fno-rtti -fno-exceptions -c acpi.cpp -o acpi.o

ld -m elf_i386 -T linker.ld --oformat binary kernel_entry.o idt.o acpi.o kernel.o disk.o esfs.o installer.o pci.o lnc.o zasm.o -o kernel.bin

truncate -s 25600 kernel.bin
cat boot.bin kernel.bin > os.img
truncate -s 10M os.img
Running (from a release build)
Download os.img from the GitHub releases page, then:

Code: Select all

qemu-img create -f raw hdd.img 25M
qemu-system-i386 -drive file=hdd.img,format=raw,if=none,id=drive-hdd -device ide-hd,bus=ide.0,unit=0,drive=drive-hdd -drive file=os.img,format=raw,if=none,id=drive-os -device ide-hd,bus=ide.0,unit=1,drive=drive-os,bootindex=1
Once it boots, run install inside Z.eSystem, choose "e" when asked to format, then power off and boot with:

Code: Select all

qemu-system-i386 -drive file=hdd.img,format=raw,index=0,media=disk
Releases
https://github.com/ZeSystem-Inc/Z.eSyst ... /tag/Plus3

Source
https://github.com/ZeSystem-Inc/Z.eSystem-Plus-3

Feedback and critique are very welcome — that's exactly how the last few bugs got fixed. :)

NOTE: Scrolling has been removed in this version. It will be reintroduced in future versions.
Last edited by ZeSystem on Thu Jul 09, 2026 4:39 am, edited 1 time in total.
Octocontrabass
Member
Member
Posts: 6245
Joined: Mon Mar 25, 2013 7:01 pm

Re: ZeSystemPlus3 — a from-scratch x86 OS

Post by Octocontrabass »

ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amACPI support
You have to actually implement the things described in the ACPI specification before you can say you have ACPI support.
ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amZASM — a custom assembler producing the custom LNC executable format (magic: 0x434E4C02)
How much of the x86 instruction set does your assembler support?
ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amBuilding from source
Why isn't there a makefile or a script to automate all of that?
ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amNOTE: Scrolling has been removed in this version.
Why?
klange
Member
Member
Posts: 691
Joined: Wed Mar 30, 2011 12:31 am
Libera.chat IRC: klange
Discord: klange

Re: ZeSystemPlus3 — a from-scratch x86 OS

Post by klange »

Why are you posting a new announcement thread for something you just posted about a few days ago?

Why is this a separate repository with a separate history from "Z.eSystem-Plus-2" and "Z.eSystem-Plus-1"?
ZeSystem
Posts: 7
Joined: Thu Jul 02, 2026 6:27 am
Libera.chat IRC: #ZeSystem

Re: ZeSystemPlus3 — a from-scratch x86 OS

Post by ZeSystem »

Octocontrabass wrote: Wed Jul 08, 2026 9:06 pm
ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amACPI support
You have to actually implement the things described in the ACPI specification before you can say you have ACPI support.
ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amZASM — a custom assembler producing the custom LNC executable format (magic: 0x434E4C02)
How much of the x86 instruction set does your assembler support?
ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amBuilding from source
Why isn't there a makefile or a script to automate all of that?
ZeSystemInc wrote: Wed Jul 08, 2026 4:51 amNOTE: Scrolling has been removed in this version.
Why?
Fair points, thanks for the pushback.

- ACPI: you're right, "ACPI support" oversells it. What I actually have is RSDP/RSDT/FADT parsing plus locating the _S5_ package in the DSDT to get SLP_TYPx values, used for shutdown/reboot via PM1a/b_CNT_BLK. No AML interpreter, no device enumeration, no power management beyond that. I'll update the description to "ACPI-based shutdown/reboot" instead of "ACPI support".

- ZASM: right now it only supports mov, xor, call, and ret. It's early — I built it to bootstrap my own executable format (LNC) rather than to be a general-purpose assembler yet. More instructions are planned as I need them for actual programs.

- Makefile: this was a deliberate choice on my end — I've found Makefile errors hard to debug when something goes wrong, so I've been using a plain ordered command list (derleme_komutu.txt) instead. I get that this isn't ideal for anyone trying to build it themselves; I'll consider wrapping it in a simple shell script at least so it's one command to run.

- Scrolling: it's not implemented correctly yet — I ran into bugs with it and pulled it out rather than ship something broken. I'm actively working on fixing it for a future update.
Post Reply