Releases: Zeal8bit/Zeal-8-bit-OS
Zeal 8-bit OS Release v0.6.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:
- BREAKING CHANGE:
statstructure now has aflagfield, used to check if an entry is a file or a directory - Implemented ZealFS v2 filesystem, which can be enabled in the
menuconfig - Implement MBR (Master Boot Record) helper functions, which can be enabled in the
menuconfig - Implemented unsigned decimal format for
strformatroutine - Implemented
pallocandpfreesyscalls to dynamically allocate and free 16KB pages respectively. - Implemented
strutilslibraries for user programs usingz88dk-z80asm - Optimized stack buffer allocation helpers
- Optimized
statcall for directories for rawtable FS and ZealFS - Fixed a bug in ZealFS v1 that occurred when writing a multiple of 255 bytes to a file
- Fixed a bug in the disk component, related to the HostFS directory entry structure
- Fixed wrong error code numbers in the kernel headers public API
- Fixed error when trying to read/write a directory (now returns
NOT_A_DIRerror code) - Added error codes in the public kernel headers API
Tools changelog:
- Added a log in
xfer.pyto know which operation is in progress
Target support changelog:
Zeal 8-bit Computer
- [Driver] Implemented TF/microSD support in both R/W, using MBR and ZealFS v2
- [Keyboard] Refactored the keyboard driver to have two layers: a common layer and a device-dependent layer.
- [Keyboard] Implemented Zeal parallel keyboard driver
- [Keyboard] Implemented writes to
stdinto pre-fill the keyboard buffer used in cooked mode - [Keyboard] Modified keyboard driver to use a 255-byte buffer in cooked mode
- [Keyboard] Fixed a bug that cleared the flags when calling the set mode
ioctl - [Video] Added a print to show Zeal VideoBoard firmware revision on boot
- [Video] Fixed a bug in the video driver that returned the wrong cursor X position
- [Video] Fixed missing text controller map in the video driver (clear screen
ioctl) - [Interrupt] Removed the usage of alternate register set in the interrupt handlers, which can now be used by user programs
TRS-80 Model-I
No changes were made
Agon light
No changes were made
Romdisk changes
- Fixed a bug in the parser that made the target crash and reboot
- Implemented
dircommand as an alias ofls ls -lnow appends/after directories name
Contributor
Thanks to @zoul0813 for contributing to 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.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
HostFSfile system usable in emulated environment, convenient to access host's file system. - Added a new rule
asmconfto 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
ioctlcommand 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
ioctlcommand 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
lscommand, optimized 32 bit decimal output by @sijnstra in #33. - Fixed a bug in
hexdumpcommand 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.pyscript 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_asciiroutine 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
READMEfor 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
swapsyscall to exchange two opened device descriptors, useful to temporarily override standard input or output - Added memory-persistent program feature when
execsyscall 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
strformatroutine 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_headersto useZOS_PATHenvironment variable instead of relative paths - Fixed a bug in
execsyscall, 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
sleepcommand - Added
echocommand (by @sijnstra in #19) - Added
catcommand - Modified
execcommand to keepinit.binin memory, on kernel compiled with MMU support - Modified the default disk letter by reading the kernel configuration structure
- Modified
Makefileto be compatible with more releases of z88dk's z80asm - Modified
uartrcvanduartsndcommands to be able to interact with files (by @JasonMo1 in #11) - Modified
datecommand to be able to set the date in the RTC (by @chiralos in #17) - Modified
lesscommand to match its original behavior - Optimized
parse_hex_digitroutine instrutils.asmfile (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
closesyscall - 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_CREATvalue in VFS header file - Simplified driver initialization error message
- Updated description for the some routines in
strutilsmodule - Updated
READMEandCopyrightsto 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
setdateroutine, called whensetdatesyscall 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
closewas 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,mountandseeksyscalls implementation in both speed and space. - Optimized some routines implementation by using
jrfor unlikely error cases. - Removed unused
_zos_syscall_ongoingflag. 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.mdfile. (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_DATAsection, persistent between (software) resets. - Added a Kconfig option to choose between video and UART as standard output.
- Modified target
Makefileto create a new ROM image containing the OS binary and the romdisk. Originalos.binfile 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
packerhost program as part of the system build. - Got rid of unused
#include "endian.h"header line inpackerhost 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
datecommand to check the current date. - Added a
loadcommand in theinit.binprogram which loads and executes programs sent overSER0driver at virtual address0x4000. - Added a
helpcommand to list all the commands available. - Fixed several bugs in the romdisk commands.
- Added
EXTRA_ROMDISK_FILESenvironment 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