-
Notifications
You must be signed in to change notification settings - Fork 0
Simple kernel for Z80
License
HelleBenjamin/Manux
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Manux
=====
Manux is an open-source, single-tasking and minimalist hobby kernel written in Z80 assembly and C. Currently, the kernel supports basic IO, monotasking and has a simple filesystem, but new features will be added in the future. The kernel is designed to be loadable to memory via BASIC "bootloader". The kernel is written in a combination of Z80 assembly and C, and can be built with the z88dk toolchain.
System calls
============
Programs can communicate with the kernel using system calls. Syscalls are mostly implemented in assembly.
The following system calls are implemented:
0x00 - sys_exit
HL - exit code
0x01 - sys_write
BC - file descriptor
DE - length
HL - buffer
0x02 - sys_read
BC - file descriptor
DE - length
HL - buffer
0x03 - sys_gets
DE - length
HL - buffer
0x04 - sys_puts
DE - length
HL - buffer
0x05 - sys_exec
HL - address
0x06 - sys_getinfo
HL - buffer
0x07 - sys_rand
returns word in HL
0x08 - sys_sleep(unimplemented)
HL - milliseconds
0x09 - sys_fork
0x0A - sys_getpid
returns current PID in HL
0x0B - sys_getpcount
returns process count in HL
0x0C - sys_open
DE - filename
returns file descriptor in HL
0x0D - sys_close
HL - file descriptor
0x0E - sys_create
DE - filename
0x0F - sys_execs
DE - filename
HL - arg pointer
See `kernel/system_call.asm` for more information
POSIX support
=============
Manux can run very simple POSIX programs. However, it's not fully POSIX-compliant, so it may not work with some programs. Currently the supported features are input/output and fork.
Minimum system requirements
===========================
- A Z80 CPU
- 16K RAM(32K Recomended)
- 8K ROM (not required if booting from BASIC)
- a serial interface
TODO
====
- [x] Better kernel loader for BASIC
- [] Rework memory management
- [] Minimal Z80 assembler(supports only the main instructions)
- [] More POSIX features
- [] More documentation
- [x] A filesystem
Tips for writing efficient code
===============================
- Use 8-bit and 16-bit variables if possible
- Use preincrement/decrement when possible
- Write simplest code possible
- Use only index registers when required
- Use static variables when possible
- Optimize the source code
- Use `__z88dk_fastcall` when a function requires a single argument
See z88dk documentation for more information
How to write PIC(Position Independent Code)(TODO)
===========================================
- Use index register for accessing memory, for example: `ld a, (ix+1)`. The kernel doesn't use any index registers, so you can use them freely.
- Calculate addresses at runtime
- Use stack to store variables
Pre-requisites
==============
- z88dk (preferably nightly builds)
- make
- kconfig-frontends-nox
- linux
- git
- a serial interface
Building
========
Configure Manux using `kconfig-mconf Kconfig`.
To build Manux, run `make`. The kernel is build with z88dk. You need to have z88dk installed to build the kernel.
You can also use the `kernel_load.asm` to load a small bootloader to BASIC, which can be used to load Manux from a binary file via serial interface. The serial uploading is tested on BASIC 4.7, but it should work with other versions of BASIC with/without minor modifications.
Here's the steps to build Manux:
1. `git clone https://github.com/HelleBenjamin/Manux.git`
2. `cd Manux`
3. `kconfig-mconf Kconfig` (optional)
4. `make`
5. `./upload.sh`
Uploading the kernel to a real machine via serial interface
===========================================================
To upload the kernel to a real machine, you can use the `upload.sh` script. Before uploading, make sure you have the serial interface connected to your machine and reset the machine. When the machine asks for cold/warm boot, stop there. Disconnect all terminal sessions(eg. PuTTY) from the machine to ensure a successful upload. After the upload is complete, you can reconnect the terminal sessions and start using Manux.
Contributing
============
Pull requests are welcome! Feel free to add new features or fix bugs.
License
=======
Manux is licensed under the GNU GPL v2. See `LICENSE` for details.About
Simple kernel for Z80
Topics
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published