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