Skip to content

Zeal 8-bit OS Release v0.2.0

Compare
Choose a tag to compare
@Zeal8bit Zeal8bit released this 25 Dec 13:07
· 161 commits to main since this release

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