A Linux Bash-inspired interactive shell built from scratch in x86 Assembly Language — simulating how real operating systems handle commands at the hardware level.
ZENITH OS Shell is a DOS-based command-line shell developed as part of the Computer Organization & Assembly Language course
The goal was simple — build something that works like a real shell, but without any high-level language helping you. No frameworks, no libraries, no abstractions. Just registers, memory, and interrupts.
The shell mimics the look and feel of a Linux Bash terminal — complete with a pritam@root:$ prompt — and supports real filesystem operations like creating files, deleting them, navigating directories, and listing contents.
| Command | Description |
|---|---|
ls |
List contents of current directory |
cd <dir> |
Change directory |
mkdir <name> |
Create a new directory |
create <file> |
Create a new file |
write <file> |
Write text into a file |
rm <file> |
Delete a file |
echo <text> |
Print text to the screen |
clear |
Clear the screen |
help |
Display all available commands |
about |
Info about the developer |
exit |
Exit the shell |
1. Clone the repository
git clone https://github.com/Pritam-Kumar-911/zenith-os-shell.git
cd zenith-os-shell2. Assemble the source file
masm shell.asm;
link shell.obj;3. Open DOSBox and mount the project folder
mount c <path-to-project-folder>
c:
4. Run the executable
shell.exe
The shell runs as a continuous loop:
Start
└── Print Banner
└── Print Prompt (pritam@root:$)
└── Read Input
└── Parse & Match Command
└── Execute → Repeat
Every command is matched manually using a custom string comparison routine. There are no built-in string functions — each character is compared byte by byte using CPU registers.
Filesystem operations like create, rm, mkdir, and cd are handled through DOS interrupt INT 21h — the same way real operating systems talk to hardware.
- How an OS shell actually processes and dispatches user commands
- Manual memory management — buffers, segments, and pointers
- How filesystem operations work at the system call level
- Low-level input/output using DOS interrupts
- Writing structured, maintainable code in Assembly without any abstractions
Pritam Kumar
CS Undergraduate — SZABIST, Karachi (Batch 2028)
GitHub
Built as part of Computer Organization & Assembly Language course