Skip to content

Releases: Zeal8bit/Zeal-8-bit-OS

Zeal 8-bit OS Release v0.5.0

20 Nov 14:47
Compare
Choose a tag to compare

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 the menuconfig.
  • 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 new tools/ directory has been created at the root of this project, it contains the xfer.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

30 Jun 11:54
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:

  • 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 use ZOS_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

Agon light

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 keep init.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 and uartsnd 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 in strutils.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

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