Skip to content

Releases: Zeal8bit/Zeal-8-bit-OS

Zeal 8-bit OS Release v0.3.0

06 May 14:47
Compare
Choose a tag to compare

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 and Copyrights 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 when setdate 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

25 Dec 13:07
Compare
Choose a tag to compare

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 and seek 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. Original os.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 in packer 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 the init.bin program which loads and executes programs sent over SER0 driver at virtual address 0x4000.
  • 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

26 Oct 15:37
Compare
Choose a tag to compare

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