Releases: Zeal8bit/Zeal-8-bit-OS
Zeal 8-bit OS Release v0.5.0
Zeal 8-bit OS is still a beta version, so it is not complete and may still have bugs.
The Operating System is divided in two parts: the kernel, common to all targets and the targets implementation.
Kernel changelog:
- Improved logging by implementing a string formatter in
strutils
. - Added a new
HostFS
file system usable in emulated environment, convenient to access host's file system. - Added a new rule
asmconf
to the Makefile to manually generate the configuration file without going through themenuconfig
. - Added Mac OS build support, by @zoul0813 in #35.
- Implemented HTML documentation for the kernel by @atirut-w in #34.
- Added a reset
ioctl
command for standard output. - Fixed a bug in the binary loader (MMU version) that resulted in files not being closed.
- Fixed a bug in the binary loader that accepted 0-byte programs.
- Added support for user programs as big as 48KB in the binary loader (MMU version).
- Implemented kernel headers for GNU's assembler (
z80-elf
). - Added explicit error codes in the kernel headers to simplify debugging, by @zoul0813 in #39.
- Added support for Multiple User Configs, including default configuration files for different targets, by @zoul0813 in #38
- Added a base SDCC makefile as part of the kernel headers to ease the compilation of new Zeal 8-bit OS programs. (A few fixes to this base makefile were made by @zoul0813 in #42)
Target support changelog:
Zeal 8-bit Computer
- Implement the new
ioctl
command for the video driver, it restores the palette, the video mode, and all the cursor settings. - Fixed a bug in the video driver that always made it the standard output.
Romdisk changes
- Added decimal output and usage to
ls
command, optimized 32 bit decimal output by @sijnstra in #33. - Fixed a bug in
hexdump
command that printed an uninitialized character. - Implemented a new transfer file command named
xfer
. A newtools/
directory has been created at the root of this project, it contains thexfer.py
script that can be used by a host computer. - Added support for commands
_:/
and_:
to switch the current disk (where_
is the letter of the disk to switch to) - Fixed the return registers of
byte_to_ascii
routine to simplify the workflow in some cases. - Added an error message when a subprogram exits a return value different than 0 (only on targets with an MMU)
TRS-80 Model-I
No changes were made
Agon light
No changes were made
New Contributors
Thank you very much to the contributors of this release:
About the assets
The assets below are the build for Zeal 8-bit Computer target, compile with the given configuration *os.conf
.
The disk image 0x0000_os_with_romdisk.img
is meant to be used with the emulator. It has been compiled to run from physical address 0x0000
, as shown in the configuration file. It is not suitable for the real hardware that has a bootloader flashed (at 0x0000
)
The disk image 0x4000_os_with_romdisk.img
is meant to be used with the real Zeal 8-bit Computer hardware as it has been compiled to run from address 0x4000
from ROM.
Zeal 8-bit OS Release v0.4.0
New release for Zeal 8-bit OS. It is still a beta version, so it is not complete and may still have bugs.
The Operating System is divided in two parts: the kernel, common to all targets and the targets implementation.
Kernel changelog:
- Added no-MMU feature to support Z80-based computers that don't have any memory mapper, check
README
for more info - Added a standard serial API usable by user programs
- Added a configuration structure readable from the user programs, to get information about the kernel compiled options
- Added
swap
syscall to exchange two opened device descriptors, useful to temporarily override standard input or output - Added memory-persistent program feature when
exec
syscall invoked, on machines that have MMU support - Added a hook called after all drivers initialization
- Added a configuration option to show the mounted disks letters on boot
- Added an
strformat
routine to simply and improve logs in the kernel - Fixed a bug in user programs written in C that didn't flush the standard output before exiting
- Fixed examples in
kernel_headers
to useZOS_PATH
environment variable instead of relative paths - Fixed a bug in
exec
syscall, related to parameter size - Fixed missing error enum in the C headers (by @chiralos in #16)
- Fixed a typo and video area structure fields name
Target support changelog:
Zeal 8-bit Computer:
- Added Dvorak layout for the PS/2 keyboard
- Implemented the newly defined serial interface
- Implemented an experimental CompactFlash driver, currently only read-only and using rawtable filesystem
- Implemented non-blocking mode for the keyboard driver, useful for writing games
- Improved I2C driver to allow 16-bit reads, the EEPROM drive now takes advantage of it
- Updated video driver to use Zeal 8-bit Video Board v1.0.0 hardware
- Updated video driver to clear the screen on boot
- Updated video driver to set its color palette on boot
- Added a driver hook to enable the interrupts
- Fixed a bug in the UART driver that didn't return send/received bytes count
- Fixed a compile error when UART is the standard output and the video driver is enabled too
- Fixed a bug in the get area IOCTL, in the video driver, that wrongly returned an error
- Fixed a bug in the video driver that didn't report the number of bytes written (by @chiralos in #29)
TRS-80 Model-I
- Implemented an initial port for the TRS-80 Model-I, as an MMU-less target, click here for more information about it
Agon light
- Implemented an initial port for the Agon Light, as an MMU-less target, thanks to @sijnstra in #8 and #14, click here for more information about it
Romdisk changelog:
The romdisk, which is target independent, also saw several changes:
- Moved the project to the root directory to make it common to all targets
- Added parenthesis parsing in the command line parser (by @sijnstra in #19)
- Added
sleep
command - Added
echo
command (by @sijnstra in #19) - Added
cat
command - Modified
exec
command to keepinit.bin
in memory, on kernel compiled with MMU support - Modified the default disk letter by reading the kernel configuration structure
- Modified
Makefile
to be compatible with more releases of z88dk's z80asm - Modified
uartrcv
anduartsnd
commands to be able to interact with files (by @JasonMo1 in #11) - Modified
date
command to be able to set the date in the RTC (by @chiralos in #17) - Modified
less
command to match its original behavior - Optimized
parse_hex_digit
routine instrutils.asm
file (by @sijnstra in #18) - Optimized sections (
BSS
) to make the binary much smaller
Contributors
Thank you very much to the contributors of this release:
About the assets
The assets below are the build for Zeal 8-bit Computer target, compile with the given configuration *os.conf
.
The disk image 0x0000_os_with_romdisk.img
is meant to be used with the emulator. It has been compiled to run from physical address 0x0000
, as shown in the configuration file. It is not suitable for the real hardware that has a bootloader flashed (at 0x0000
)
The disk image 0x4000_os_with_romdisk.img
is meant to be used with the real Zeal 8-bit Computer hardware as it has been compiled to run from address 0x4000
from ROM.
Zeal 8-bit OS Release v0.3.0
New release for Zeal 8-bit OS. It is still a beta version, so it is not complete and may still have bugs.
The Operating System is divided in two parts: the kernel, common to all targets and the targets implementation.
Kernel changelog:
- Implemented an SDCC interface to be able to use SDCC's standard libraries (stdio, stdlib, ...)
- Implemented an internal routine to get the current date from the kernel or the drivers
- Implemented ZealFS filesystem, accessible in both read and write (https://github.com/Zeal8bit/ZealFS)
- Added a text video interfaces (both ABI and API) for moving cursor on screen, modifying background/foreground color, clearing the screen, etc...
- Added a keyboard interface (both ABI and API) to switch between modes (cooked, raw, ...) and defining keyboard keys value
- Modified driver interface to remove unnecessary offset on the stack
- Modified VFS to be able to open disks as block devices
- Modified "Time" to "Timer" in the boot banner
- Fixed a bug in the VFS layer that altered BC registers when invoking
close
syscall - Fixed a bug in the disk layer that returned the wrong filesystem in some cases
- Fixed a bug that corrupted an opened device when closing a duplicate of it
- Fixed a bug in the disk layer that didn't adjust file size when writing new data to it
- Fixed a bug in the driver layer that skipped entries when searching a driver by name
- Fixed two bugs in the VFS layer related to absolute path calculation
- Fixed wrong
O_CREAT
value in VFS header file - Simplified driver initialization error message
- Updated description for the some routines in
strutils
module - Updated
README
andCopyrights
to 2023
Target support changelog:
The only supported target at the moment is still Zeal 8-bit Computer here are the changes related to it:
- Implemented text video interfaces (cursor and colors) for both the UART driver and video driver
- Implemented an I2C EEPROM driver which uses the newly implemented ZealFS filesystem
- Implemented a simple
setdate
routine, called whensetdate
syscall is invoked - Modified I2C driver to generate a much cleaner signal, which has a 50% duty-cycle
- Modified I2C driver to have a write function that accepts two buffer: one for register address, one for data
- Modified UART driver to clear the screen and set background color when used as default video output
- Fixed a bug that affected UART lines when sending data on the I2C bus
- Fixed video text driver to only clean a line when scrolling down
- Fixed a major bug in the keyboard driver that corrupted user memory and dropped some events
- Disabled VBLANK interrupts as it is unused on real hardware at the moment
The romdisk, which should be target independent, also saw several changes:
- Added "cp" command to copy files around
- Added "clear" command to clear the screen
- Added "hexdump" command to show any file content in hexadecimal
- Modified "exec" to be able to pass parameters to programs invoked
- Modified "exec" to make it implicit. It is now possible to execute programs by giving a path to them
- Fixed a bug "less" command that overrode original error when
close
was invoked - Fixed the way empty commands are handled after being trimmed
- Updated error messages to reflect new errors
Zeal 8-bit OS Release v0.2.0
New release for Zeal 8-bit OS. It is still a beta version, so it is not complete and may still have bugs.
The version format changed from vy.x
to vx.y.z
. Thus, versions v0.1
and v0.1.0
name the same version, in fact, they point to the same commit.
The Operating System is divided in two parts: the kernel, common to all targets and the targets implementation.
Kernel changelog:
- Added public kernel headers for C and assembly, more precisely for SDCC and z88dk's z80asm. Users can now write programs using C and assembly respectively, without the need to have the clone/compile the whole kernel or OS.
- Added macros, implemented by targets, to allocate and free RAM pages.
- Fixed an important bug in the VFS's buffer size checker that accepted buffers strictly bigger than a virtual page but refused buffer as big as a page.
- Fixed an important bug in the syscall remap routine. User buffer DE was not remapped correctly when located in the last virtual page during a syscall.
- Optimized
write
,read
,mount
andseek
syscalls implementation in both speed and space. - Optimized some routines implementation by using
jr
for unlikely error cases. - Removed unused
_zos_syscall_ongoing
flag. Cannot be used from drivers anymore. - Fixed unclosed file in the loader.
- Added a Kconfig option to hook a routine after a program exits. It can be implemented by target implementation.
- Targets can now have their own Kconfig file that can be included in the main project one.
- Added reproducible build option in Kconfig.
- Added final binary renaming from the kernel
Makefile
. (and not target makefile anymore) - Fixed a typo in
README.md
file. (Fixes #3) - Made ANSI escape sequences enabled by default.
- Fixed several small bugs in the source code and mistakes in the documentation.
Target support changelog:
The only supported target at the moment is still Zeal 8-bit Computer here are the changes related to it:
- Implemented RAM page allocation macros, required by the kernel.
- Implemented a UART driver (
SER0
), which can also be used as standard output instead of the video driver. - Implemented an I2C driver (
I2C0
) that supports read/write/write-read transactions. - Implemented the I2C RTC integrated circuit driver.
- Added a
NOINIT_DATA
section, persistent between (software) resets. - Added a Kconfig option to choose between video and UART as standard output.
- Modified target
Makefile
to create a new ROM image containing the OS binary and the romdisk. Originalos.bin
file is now kept, unchanged. - Added a Kconfig option to specify the location where the OS will be flashed in ROM. Used to calculate the offset between the OS binary and the romdisk image.
- Added support for SHIFT and CAPS LOCK keys in cooked mode in the PS/2 keyboard driver.
- Added
packer
host program as part of the system build. - Got rid of unused
#include "endian.h"
header line inpacker
host program. (Fixes #1) - Fixed several small bugs in the source code.
The romdisk, which should be target independent, also saw several changes:
- Modified commands to use the assembly public headers.
- Added
date
command to check the current date. - Added a
load
command in theinit.bin
program which loads and executes programs sent overSER0
driver at virtual address0x4000
. - Added a
help
command to list all the commands available. - Fixed several bugs in the romdisk commands.
- Added
EXTRA_ROMDISK_FILES
environment variables as part of romdisk Makefile to include more files inside the romdisk image.
Note: In the following binaries, the V-Blank interrupts are disabled by Zeal 8-bit Computer target. Thus, the PIO system mask is defined as:
DEFC IO_PIO_SYSTEM_INT_MASK = ~(1 << IO_KEYBOARD_PIN) & 0xff
Zeal 8-bit OS Release v0.1.0
First public release. Keep in mind this is a still a beta, that is not complete and may still have bugs.
The Operating System is divided in two parts: the kernel, common to all targets and the targets implementation.
Kernel features
The kernel support the following features:
The kernel itself supports the following features:
- Mono-threaded system
- Up to 26 disks (A to Z)
- Support for files and directories
- Support static drivers, provided at compile time
- Separation between user space and kernel space (no memory protection)
- Abstract "opened devices" which can represent an opened file, directory, or driver in the user space
- Support for Real-Time Clock
- Support for timer, can be a hardware or a software timer
- Support up to 16MB of physical address space divided as 256 banks of 16KB
- Support the following operations for dirvers: open, read, write seek, close, ioctl
- Support the following operations for files: open, read, write, seek, close, remove
- Support the following operations for directories: open, browse, close, remove
- Load raw binaries as init file
- Syscalls to perform communication between user programs and kernel
- Support for file systems: rawtable implemented
- Modular build system, simplifying adding files and targets to the compilation, configurable build with
menuconfig
Target support
Zeal 8-bit Computer target is currently the only supported target, with the following features:
- Use the ROM as a read-only disk formatted in "romdisk" file system
- Support for the MMU
- PS/2 Keyboard input
- Partial Video 640x480 text mode support
- Partial PIO implementation for system port (port B)
- Add a command line interface,
init.bin
, to execute on boot