Releases: ghaerr/elks
v0.8.1
We are proud to announce ELKS v0.8.1 released on October 15, 2024.
Thank you to all that have contributed and are using ELKS, and enjoy!
ELKS v0.8.1 Downloads
Prebuilt disk images for floppy and hard disks are downloadable below from Github Assets for this release.
These images can be used to boot from PC/XT/AT or PC-98 hardware, or emulators, such as QEMU or dosbox-x.
The images are built with network support by default, supporting NE2K, WD and 3Com NICs.
See the Wiki HowTo for more information.
ELKS v0.8.1 Enhancements
Thank you to all who contributed to ELKS enhancements, bug identification, testing and fixes.
The system continues to be very stable, with no known crashes and long uptimes.
ELKS v0.8.1 is primarily released as a bug fix release for v0.8.0.
What's Changed
- [build] Fix cross build after version change by @ghaerr in #2038
- [cmds] Fix passwd losing /etc/passwd entries by @ghaerr in #2044
- [cmds] Fix mknod when used with minor == 0 by @ghaerr in #2045
- [cmds] Remove yacc requirement for building bc by @ghaerr in #2046
- [nx] Add CONFIG_ARCH_PC98 to ntetris.h to use same HEIGHT as VGA by @tyama501 in #2048
- Added WSL as supported build platform. by @toncho11 in #2047
- [kernel] Fix BIOS track read retry errors under QEMU by @ghaerr in #2063
- [cmds] Optionally show system startup time in getty by @ghaerr in #2064
- [cmds] Fix sys and makeboot to copy /bootopts and updated required files by @ghaerr in #2066
- [cmds] Fix mkfs to clear reserved sector corresponding to old MINIX superblock by @ghaerr in #2067
- [cmds] Have fdisk check for MBR-capable block device for safety by @ghaerr in #2069
- [build] Add various options (all default OFF) to optimize boot startup times by @ghaerr in #2071
- [cmds] Add env vars to /etc/sashrc, use HOSTNAME env var in getty not /etc/hostname by @ghaerr in #2072
- [tools] Add mtools-4.0.23 to ELKS tools build by @ghaerr in #2074
- [docs,build] Update build.sh to stop on error, update docs on mtools, flex, bison by @ghaerr in #2075
- [directfd] Add IODELAY floppy delay emulation to DF driver by @ghaerr in #2076
- [directfd] Minor code cleanup by @ghaerr in #2077
- [boot] Turn off mfs optimization by @ghaerr in #2078
Full Changelog: v0.8.0...v0.8.1
Thank you and enjoy!
v0.8.0
We are proud to announce ELKS v0.8.0 released on September 24, 2024.
Thank you to all that have contributed and are using ELKS, and enjoy!
ELKS v0.8.0 Downloads
Prebuilt disk images for floppy and hard disks are downloadable below from Github Assets for this release.
These images can be used to boot from PC/XT/AT or PC-98 hardware, or emulators, such as QEMU or dosbox-x.
The images are built with network support by default, supporting NE2K, WD and 3Com NICs.
See the Wiki HowTo for more information.
ELKS v0.8.0 Enhancements
Thank you to all who contributed to ELKS enhancements, bug identification, testing and fixes.
The system continues to be very stable, with no known crashes and long uptimes.
Major Enhancements
Major additions include support for:
- Application development using the Open Watcom C compiler and OS/2 executable format, allowing for
large multisegment programs to run, using all available memory if necessary. Doom was recently ported. - Add NE2K, WD and 3COM networking support to default build.
- Compressed executables by default allowing for many more applications per floppy image.
- Asynchronous I/O was added to the kernel along with @Mellvik's Direct Floppy disk driver, which
allows for other applications to run while waiting for floppy disk I/O. - All kernel resources dynamically adjustable at boot, allowing for the kernel heap, tasks,
inode and file allocations to be adjusted as required for min or max memory usage. - Increased symbolic debugging capabilities with enhancements to the symbolic disassembler,
system call and function tracing capabilities within running applications. - Rewrite of L1/L2 buffer cache operation allowing for faster operation using fewer buffers.
- Precision timing routines and removal of most all long division in the kernel and C library for
fastest operation and better elapsed time measurements.
New Commands
- [cmds] Port ttyclock to ELKS by @ghaerr in #1855
- [cmds] Port ttypong to ELKS by @ghaerr in #1864
- [cmds] Port ttytetris to ELKS by @ghaerr in #1858
- [cmds] Port md5 from Minix/NetBSD to ELKS as md5sum by @ccoffing in #1656
- [kernel,cmds] Add sysctl system call and option get/set command by @ghaerr in #1897
- [beep] Add -f and -l option by @tyama501 in #1812
- [beep] make it round by @floriangit in #1813
Updated Commands
- [cmds] Add "mouse r" for raw mouse output debugging by @ghaerr in #1888
- [cmds] Add -s, -r, and -p options to shutdown, remove reboot, poweroff by @ghaerr in #2000
- [cmds] Add accurate train timing to sl by @ghaerr in #1723
- [cmds] Add decomp - ELKS executable decompressor by @ghaerr in #1866
- [cmds] Add fsck-dos FAT filesystem checker to build by @ghaerr in #1820
- [cmds] Changes to basic.c for OpenWatcom C compilation by @ghaerr in #1903
- [cmds] Cleanup fsck-dos messages and reduce memory requirement by @ghaerr in #1823
- [cmds] Display usage on invalid mount -t parameter by @ghaerr in #1700
- [cmds] Enable more to recognize line wrapping by @ghaerr in #1714
- [cmds] Enhance ps to better recognize task struct size mismatches by @ghaerr in #1695
- [cmds] Finish fsck-dos port to ELKS, add to distribution by @ghaerr in #1821
- [cmds] Fix ELKS_VERSION= on application builds by @ghaerr in #1739
- [cmds] Fix man page reader for filenames > 14 (MINIX max) by @ghaerr in #1682
- [cmds] Fix more to display correct number of lines w/man by @ghaerr in #2030
- [cmds] Fix off-by-one bug in getty @t command by @vkoskiv in #2021
- [cmds] Fix open file on spawn of programs from /etc/inittab by @ghaerr in #1885
- [cmds] Fix rmdir -p by @ghaerr in #1643
- [cmds] Get ttyclock working with keyboard commands by @ghaerr in #1857
- [cmds] Improve fsck output formatting for -lvv and -lvvv options by @ghaerr in #1668
- [cmds] Meminfo and ps updates, small fixes by @ghaerr in #1849
- [cmds] Reduce size of ps to 6k by @ghaerr in #1691
- [cmds] Reduce size of ramdisk app, fix error messages by @ghaerr in #1669
- [cmds] Remove fsck-dos FAT32 support allowing it to work on floppies by @ghaerr in #1822
- [cmds] Reorganize clock.c source code, add AST hardware RTC support by @ghaerr in #1891
- [cmds] Replace ifdef ia16 with ifdef _M_I86 by @ghaerr in #2029
- [cmds] Replace use of non-standard malloc.h header with stdlib.h by @ghaerr in #1804
- [cmds] Rewrite kill to reduce size by @ghaerr in #1876
- [cmds] Show usage on bad options to mount command by @ghaerr in #1666
- [cmds] Speed up 'sl' - let her rip full speed by @ghaerr in #1707
- [cmds] Speed up the sl choo choo train for slow systems by @ghaerr in #1720
- [cmds] Unmount all volumes in shutdown & reboot by @vkoskiv in #1978
- [cmds] Update fsck to work with max size 64Mb HD, enhance verbose output by @ghaerr in #1671
- [cmds] Update sys command with new device numbers by @ghaerr in #1838
- [cmds] meminfo enhancements and man page by @ghaerr in #1847
- [cmds,kernel] Add meminfo -m option to display sorted main memory segments by @ghaerr in #2023
- [libc/cmds] Fix time command hour wrapping problem by @ghaerr in #1722
- [nx] Adding monochrome CGA nano-X driver. Modifying nxtetris parameter for CGA. by @tyama501 in #1957
- [disasm] Fix sign extension bug when disassembling large RAM segment offsets by @ghaerr in #1985
- screen: modernize prototypes by @ccoffing in #1781
- lp and misc cleanups by @ccoffing in #1811
- Printing by @ccoffing in #1809
- Size reductions by @ccoffing in #1783
- Tidy cal by @ccoffing in #1769
- smaller which by @ccoffing in #1776
Networking
- [net] Fix connection hang on lost SYN packet by @ghaerr in #1908
- [net] Temp fix ftpd startup with QEMU=1 set by @ghaerr in #1925
Boot and Runtime Configuration
- [config] Add CONFIG_ASYNCIO config option, cleanup INIT_REQUEST by @ghaerr in #1650
- [config] Build distribution images using CONFIG_APPS_xxx image size by @ghaerr in #1853
- [config] Do not read MK_ARCH & MK_CPU if already defined by @and3rson in #1760
- [config] Fix duplicate CONFIG_EXEC_MMODEL=y output by @ghaerr in #1883
- [config] Update config files from recent changes by @ghaerr in #1744
- [config] Update configurations for standard IBM PC build by @ghaerr in #1841
- [boot] Add enhanced debug display to setup.S for early startup debugging by @ghaerr in #1981
- [boot] Add media descriptor 0xfe and boot signature in image FD1232 for PC-98 by @tyama501 in #1851
- [boot] Allow separate EXT/L2 and XMS buffer overrides to compiled configuration by @ghaerr in #1672
- [boot] Fix boot issues when /linux or /bootopts deleted by @ghaerr in #1681
- [boot] Remove /bootopts requirement for booting from direct floppy driver by @ghaerr in #1738
- [boot] Replace panic with printk when bootopts argv/envp overflow by @ghaerr in #1986
- [bootopts] Add heap= option for dynamic sizing of kernel heap by @ghaerr in #1993
PC-98 Port
- [bioshd] 720KB 2DD support for PC-98 2HD/2DD common drive by @tyama501 in #1779
- [menuconfig] Fix PC98-1232k typo that makes error by @tyama501 in #1874
- [pc98_config] Fix typo of capital Y by @tyama501 in #1882
- PC-98 beep support by @tyama501 in #1806
Kernel Enhancements and Fixes
ELKS v0.7.0
ELKS v0.7.0 Downloads
Prebuilt disk images for floppy and hard disks are downloadable below from Github Assets for this release. These images can be used to boot from PC/XT/AT or PC-98 hardware, or emulators, such as QEMU or dosbox-x. The images are built with network support by default, supporting NE2K, WD and 3Com NICs. See the Wiki HowTo for more information.
ELKS v0.7.0 Enhancements
Thank you to all who contributed to ELKS enhancements, bug identification, testing and fixes. The system continues to be very stable, with no known crashes and long uptimes.
New Systems Supported
- MK-88 Russian IBM PC/XT compatible (8088 clone CPU), K1810BM88 w/256k RAM. Use CONFIG_HW_MK88 (@Vutshi)
- Monotech NuXT 2.0 board (NEC V20 CPU) using Sergey Kiselev’s BIOS (@tt1542)
- Book 8088 IBM PC/XT compatible laptop (8088 or NEC V20) (@tt1542, @Vutshi)
- Extensive testing of older IBM 5160 PC/XT/AT and Amstrad 1640 (@toncho11)
New Commands
- Port
mail
application from MINIX (@ccoffing) - Add
fm
visual file manager - Add
disasm
for ELKS binary file symbolic disassembler - Add
cons
to display console screen from remote console - Add
ttyinfo
for testing mouse and ANSI arrow, function key and mouse parsing - Add
hostdisasm
for host-based ELKS disassembler - Add tiny
min_init
replacement for /bin/init on very small systems - Add
matrix
screen saver - Port text adventure game
advent
from Fuzix - Port
sl
(train) program for mistypedls
- Port
split
from BSD 4.3reno (@Mellvik) - Support D-Flat Project and
memopad
editor application - Add
ps
,edit
(visual screen editor), andfsck
to 360k floppy - Add
nxtetris
to 1440k floppy
Updated Commands
- Enhance
meminfo
to include process names - Fix
cron
memory leak, other fixes (@ccoffing, @ghaerr) - Fix
tinyirc
to operate using ping/pong protocol (@Redfoxymoon, @DutchComputerKid) - Use PATH_MAX in all applications to prevent buffer overflow (@ccoffing)
- Nano-X won’t display cursor when no mouse present
- Fix
login
handling on locked accounts, no home dir or long login name (@ccoffing) - Fix
passwd
to work on FAT filesystems - Update
nxtetris
to work at constant speed and no mouse (adds GrGetNextEventTimeout) - Update
disasm
disassembler from 86sim project, add symbolic disassembly to ELKS binaries - Add
disasm -k
option to disassemble running kernel with symbols, -a for asm input - Update
ls
for better operation with deeply nested directories and no permissions (@ccoffing) - Update
ash
for invalid TERM variable checking (@ccoffing) - Fix
xargs
with long input lines (@ccoffing) - Fix possible memory corruption with
dd
errors (@ccoffing) - Add MOUSE_PORT=none for all Nano-X applications
- Cleanup cmds source tree to remove many compilation warnings
- Fix
screen
to run from FAT filesystem - Remove
pwdauth
,prems
and mtools from distribution image - Rename all test programs /bin/test_xxx
- Fix various
tr
bugs and crashes (@ccoffing) - Fix
ash
build error on non-standardrindex
/index
definitions (@ccoffing) - Fix
fsck
out of memory problem, display issues and -r (@Mellvik, @ghaerr) - Update
mount
anddf
to display free space and all mounted filesystems (@Mellvik) - Fix
fm
stack overwrite - Use default drive for
fdisk
when none specified (@Mellvik) - Fix
find
stack overflow - Fix sometimes improper time sort and display using
ls -l
- Enhances
more
to clear screen and display (END) - Use
cp -R
insys
to fix large copy on large /bin directories (@Mellvik) - Add PEEK and POKE to
basic
(@tyama501) - Rename
mined
toedit
(MINIX visual editor) - Fix
hostbasic
for compilation on macOS - Enhance
fsck
to use main memory, works on 65Mb MINIX filesystems
Networking
- Add multi-NIC network support, allows linking all NIC drivers at once
- Major update for NE1K NIC in 8-bit mode, use 8k buffer (@Mellvik)
- Cleanup NE2K driver (@Mellvik)
- Major WD driver enhancements for speed and reliability (@Mellvik)
- Support /bootopts flags in all NIC drivers (@Mellvik)
- New Etherlink III/3C509 NIC driver (@Mellvik)
- Add optional 8390 chip check
Boot and Runtime Configuration
- UMB address set in /bootopts
- Add blink16.config to allow symbolic kernel debugging using
blink16
- Decrease group ID numbers in /etc/{passwd,group} from 501 to fit in byte for kernel
- Optional
uname -v
in /etc/profile to show build commit number - Enhance
makeboot
functionality with new options (@Mellvik) - Fix MINIX filesystem boot when root directory larger than 1 block
- Add
comirq=
to set serial IRQ in /bootopts (@Mellvik) - Pass capitalized environment variables set in /bootopts to /bin/login
- Add CONFIG_SYS_NO_BININIT to build system without
/bin/init
- Add CONFIG_SYS_DEFSHELL_SASH to set default shell to
sash
- Add NIC flags as optional 4th parameter to
ne0=
/wd0=
/3c0=
/bootopts (@Mellvik) - Allow forcing RAM and kernel heap size in config.h for testing small memory
PC-98 Port
- Add ANSI cursor on/off sequence (@tyama501)
- Fix
meminfo
build (@tyama501) - Support high-resolution PC-H98 (@tyama501)
- Fix 16-bit cylinder numbers (@tyama501)
- Calculate total mem available at boot (@tyama501)
- Add CGA compatible colors to
basic
(@tyama501) - Use calculated kernel timeouts in serial driver
- Add PC-98 bus mouse driver and XOR drawing to Nano-X (@tyama501)
- Fix Nano-X CI build
- Fix
clock
andps
build - Add timeout to avoid hanging when serial cable not connected (@tyama501)
- Clear text and graphics ram on Nano-X applications startup (@tyama501)
- Fix freezing issue by removing BIOS call to old IRQ 0 vector (@tyama501)
- Add serial port driver (@tyama501)
- Add PC-98 to CI build
- Add PC-98 screen and ramfont drivers to Nano-X (@tyama501)
- Disable whole-track reads for PC-98 for now (@tkchia)
- Read /bootopts on FAT boot (@tyama501)
- Detect number of FD driver, probe for 1232/1440 and support both (@tyama501)
8018X Port
- Add
romprg
program to flash chips (@cocus) - Add ATC-compatible RTC for clock app (@cocus)
- Add 8018X port to CI build
- Add
disable_irq
to disable IRQs (@cocus) - Fix ROMFS 8018X build
C Library
- Add
test_libc
test suite for large portion of C library (@ccoffing) - Fix
sleep
return value (@ccoffing) - Fix major
strncat
bug, affectskilo
,sash
history,tinyirc
(@ccoffing) - Use PATH_MAX and NAME_MAX for overflow prevention (@ccoffing)
- Cleanup various compilation warnings using const and size_t
- Fix wildcard expression undefined behaviour using []? (@ccoffing)
- Fix
abort
calling kill with arguments reversed (@tkchia) - Rewrite
memcpy
in ASM for speed (found through blink16 emulator) - Fix
fgets
boundary bug found through libc test suite (@ccoffing) - Fix tui lib cursor location for
fm
andmoria
- Optimize
opendir
for memory allocations and speed (@ccoffing) - Fix
fclose
to close file even when flush fails (@ccoffing) - Optimize C library startup using __argc, __argv
- Add instrumentation routines for automatic symbolic function tracing
- Add optional
--ftrace
/FTRACE=
command option for optional program function call tracing - Standardize C library constructor/destructor function names, priorities
- Use __argc/__argv from .postinit section
- Add
__weaken
and__LINK_SYMBOL
weak symbol support (@tkchia, @ghaerr) - Cleanup exec* library functions
- Use weak linking for optional C library floating point support
- Remove use of __P, __const and extern in header files
- Enhance library for possible use of new REGPARMCALL calling convention
- Remove include <linuxmt/config.h> unless required to stop unnecessary rebuilds
- Reduce min executable and distribution image size by separating out syscall wrappers
- Remove C library kenel callback code when
signal
not used by application - Add C library support for
-mregparmcall
calling convention (@tkchia) - Fix build to allow
-mregparmcall
calling convention for most ELKS applications - Fix
usleep
for POSIX return value,basename
failure, remove__sys_errlist
(@ccoffing) - Accurate dependency handling for C library build (@tkchia)
- Delete duplicate leap year function (@coffing)
- Reduce size of
__tm_conv
andstrerror
(@coffing) - Add stack backtrace and 8086 disassembler to debug library
- Fix buffer overflow in
isatty
(@tkchia) - Add
mktime
library function - Fix incorrect results returned by
strtol
andstrtoul
when string not NUL terminated - Fix
memcmp
library function in C lib and kernel (@Mellvik) - Cleanup use of
__extension__
,asm
andvolatile
to allow option-Wpedantic
- Add 64-bit long long
lltostr
andulltostr
functions
Kernel Enhancements and Fixes
- Support UMB memory for automatic kernel and application use (@mirevall)
- Update Spanish keyboard layout and support AltGr (@jsedanoj)
- Support floppy drives on NuXT computer using Sergey Kiselev’s BIOS v0.9.9
- Fix FAT filesystem /dev emulation to require /dev entry to operate
- Fix and allow multiple signals pending per process, add test_sigfail
- Fix potential
readlink
buffer overflow (@ccoffing) - Introduce precision kernel timeouts (used in IDE query and serial drivers)
- Update all ethernet device names to 3 character names (@Mellvik)
- Enhance disc probing to be faster
- Always save BP across INT 10h calls for early IBM BIOS support
- Add KIOSOUND
ioctl
for console terminal (@tkchia) - Enhance
ustatfs
to optionally not calculate freespace for FAT fs speed - Fix MINIX filesystem to allow 64Mb filesystems and
truncate
bug - Fix memory leak in
free_irq
- Fix dynamic IRQ mapping in serial driver (@Mellvik)
- Set COM4 default IRQ to 7
- Map ESC A through ESC Z to Alt-a through Alt-a for D-Flat and other TUI projects
- Replace non-highlighted standard colors with standard colors on ...
ELKS v0.6.0
ELKS v0.6.0 Downloads
Prebuilt disk images for floppy and hard disks are downloadable below from Github Assets for this release. These images can be used to boot from PC/XT/AT or PC-98 hardware, or emulators, such as QEMU or dosbox-x. The images are built with network support by default, using the NE2K network card, set for I/O address=0x300 and IRQ=12. See the Wiki HowTo for more information.
ELKS v0.6.0 Enhancements
Thank you to all who contributed to ELKS enhancements, bug identification, testing and fixes. The system continues to be very stable, with no known crashes and long uptimes.
New Commands
- BASIC Interpreter suitable for desktop and ROM systems
- BASIC graphics commands (MODE, PLOT, CIRCLE, DRAW) on PC-98 (@tyama501)
- BASIC LOAD/SAVE/DIR and various new functions (@cocus, @tyama501)
- Working tar program
- Add compress/decompress command for compressed man pages
- Add eman command to display ELKS man pages on host
- Add man command and man pages
Updated Commands
- Add internal test/[ commands to bash shell
- Add ls -S to sort by size, -U for non-sorted output, -t reverse time
- Mount command shows mounted volumes, defaults to auto-mount, -a, -q options
- Add net restart
- Fix mv command on FAT filesystems
- Enhance ls speed on FAT filesystems
- Enhance more to know about number of screen lines, Enter/2 for single/2 lines
- Add autosync to /bin/init
- Rewrite nslookup, now works
Networking
- Major fixes and 8-bit support to NE2K driver (@Mellvik)
- Major overhaul and rewrite of ftpd (@Mellvik)
- Add SITE command and idle timeout to ftpd (@Mellvik)
- Improve connect return message on ICMP dest unreachable
- Bug fixes in ftp (@Mellvik)
- Add DNS name resolution to in_gethostbyname and all network apps
- Fix premature removal of FIN packets in retransmit queue
Boot and Runtime Configuration
- Updated sys command with full disk copy for hard disks
- Add netirq=, netport= and netram= options to WD8000 driver
- New setup command to quickly configure hostname and IP address
- Add LOCALIP=, HOSTNAME=, QEMU=, TZ=, sync=, bufs= to /bootopts
PC-98 Port
- Add SCSI and IDE hard drive support (@tyama501)
- Rewrote INT 1B handler from scratch (@tyama501)
- Fix stack overflow on PC-98 BIOS
- Add BOOTCS and remove BOOTSEG to allow hard disk boot (@tyama501)
- Add option to makeboot for using external boot file (@tyama501)
- Update partition code to handle PC-98 disk partitions (@tyama501)
8018X Port
- Add capability to add applications by rom image size
- ROM support for /bin/init and full system startup
- Add interrupt pin mapping to logical IRQs (@cocus)
C Library
- Add floating point support to printf/sprintf
- Add strtod, fcvt, ecvt for floating point output
- Add math library
- Rewrite strcmp in ASM for speed
- Fix itoa/ltoa to display INT_MIN/LONG_MIN properly
- Fix various routines (strcasecmp/strncasecmp) from signed char bugs
- Rewrite ctype.h library to use small functions not table lookup
- Enhancements to save executable space, tiny printf for most applications
- Replace buggy qsort routine
- Add in_connect routine w/timeout
- Add in_resolv DNS resolver
- Use paths.h in libc functions
Kernel Enhancements and Fixes
- Fix bad directory info on large FAT disks
- Increase max mounts to 6
- Increase FAT /dev table to 41
- Add compile-time TZ= timezone support to kernel
- Fix FAT to use localtime for files
- Add process CPU % utilization and uptime
- Fix signals on systems not running /bin/init
- Add uname application and system call
- Fix integer overflow in calculating FAT start data sector
- Add alarm system call
- Rewrite kernel timer routines from scratch
- Improve floppy probing performance
- Add ustatfs system call
- Check for 386 CPU before enabling A20 for XMS buffers
- Display of free space on FAT volumes
- Dynamically allocate up to 2500 ext_buffer heads in (far) main memory
Documentation
- Man pages for most commands and system calls for ELKS runtime on disks >= 2880k
- Write boot documentation
Tools
- All images created after Github push or PR
Chief maintainer: @ghaerr
ELKS v0.5.0
ELKS v0.5.0 Downloads
Prebuilt disk images for floppy and hard disks are downloadable below from Github Assets for this release. These images can be used to boot from PC/XT/AT or PC-98 hardware, or emulators, such as QEMU or dosbox-x. The images are built with network support by default, using the NE2K network card, set for I/O address=0x300 and IRQ=12. See the Wiki HowTo for more information.
ELKS v0.5.0 Enhancements
Thank you to all who contributed to ELKS enhancements, bug identification, testing and fixes. The system is now very stable, with no known crashes and long uptimes. Two new platform ports have been contributed and the internal architecture of the system allows for this work to be performed in an effective manner, producing working systems with only the specific changes each platform requires, with increasingly organized source code.
Ports to New Architectures
NEC PC-98 port (@tyama501)
- Includes writing new console and disk drivers for PC-98 (@tyama501)
- Kernel support for variable sector sizes (512 & 1024 bytes)
8018X port (@cocus)
Networking
- Major networking enhancements and bug fixes (@Mellvik)
- New ftp client and ftpd server (@Mellvik)
- Wide variety of debug message settings
- 8-bit NE2K driver (@cocus)
- 1500 MTU receive packets and enhanced throughput
- RST packet handling
- Runtime selection of network card I/O port (@Mellvik)
- Major updates to urlget & ftpget, new ftpput (@Mellvik)
- Add net stop support
- Major fixes to TCP protocol (sliding window, accept, FIN processing, close, retrans, SWS)
Boot and Runtime Configuration
- Added /etc/net.cfg for network settings
- Added /etc/mount.cfg for automounting disks
- New /bootopts bufs= option for dynamic xms and ext buffers, netirq, netport
- Increased /bootopts size to 511 bytes
Kernel Enhancements and Fixes
- Add XMS buffers (> 1MB memory for system buffers)
- Unreal mode, A20 gate handling, INT 15 block move
- Major source cleanups
- Lots for source reorganization for 8018X and PC-98 ports
- PTY driver data loss fixes
- Dynamic buffer allocation for pipes
- Compressed executable support
- New SSD driver
- Dynamic initial kernel heap size support
- Dynamic IRQ kernel handling (@mfld-fr)
- /dev/port kernel driver (@marcin-laszewski)
- Separate kernel PIT, PIC drivers to architecture-specific files
- Enhancements to run on smaller-memory (256K) systems
- Enable interrupts during block I/O
New System Calls
- getsockname, getpeername, setsockopt (SO_REUSEADDR, SO_RCVBUF, SO_LINGER)
Tools
ELKS v0.4.0
ELKS v0.4.0 Downloads
Prebuilt disk images for floppy and hard disks are downloadable below from Github Assets for this release. These images can be used to boot from PC/XT/AT hardware, or an emulator, such as QEMU. The images are built with network support by default, using the NE2K network card, set for I/O address=0x300 and IRQ=12. See the Wiki HowTo for more information.
ELKS v0.4.0 Enhancements
Kernel
- Tested and works on PCs with 8088, 8086, 80286, 80386 … CPUs and later
- No compiler warnings on kernel build
- Strace working, calculates kernel stack usage
- Implement task zombie state, rewrite wait
- Implement kernel local heap (@mfld-fr)
- Improved memory segment allocator (@mfld-fr)
- Fix userland signals
- Use single far address for kernel process signaling (@tkchia)
- New synchronization primitives
- Remove unneeded and slow kernel locks
- Add race-safe sleep/wait prepare_to_wait etc
- Fix select busylooping, network semaphore lockups
- Much improved kernel debug macros and mechanism
- ^P kernel/application debug mechanism using SIGURG
- Restartable system calls
- Reduce kernel stack to 600 bytes from 988
- Align stack pointer to even boundary to save malloc issues
- Kernel FAR text section, saves 11k bytes of .text space
- Enhance I/O performance w/direct fmemcpy to/from user space
- Rewritten fmemcpy routines to use word copy
System Call Fixes: wait, rmdir, access, brk, link, stat, gettimeofday
Exec
- Separate heap & stack, v1 a.out header
- chmem command enhanced
- New compiler options for heap and stack (@tkchia)
- Tuned 4k stack / 4k heap for all processes, tuned min memory usage
- Run programs w/historical Minix a.out header (@tkchia)
- Load medium-model programs (@tkchia)
Filesystems
- FAT filesystem debugged and working
- Mountable Minix and FAT partitions
- Improved MBR, use sect_offset to support MBR boots to /dev/hda1 etc
- Add VFAT long filename support, virtual /dev directory
- Fix Minix mount/unmount superblock checking/write
- 16-bit or 32-bit inodes in kernel
- Mount readonly, remount options, can boot readonly
- Fix romdisk read directory
- Allow ramdisk size larger than 64k
- Allow preloaded ramdisks in upper memory
- FAT32 fixes, large drive mount fix
Disk & I/O Subsystem
- Rename /dev/bdX to /dev/hdX
- Support for USB drives
- Variable number of L2 buffers
- Revise /dev/hda from 4 to 8, implement partitions
- Floppy I/O to use DMASEG only when necessary
- IDE query to BIOS HD driver for reliable CHS data (@Mellvik)
- Replaced DDPT allows running on IBM XT v1 BIOS machines (@tkchia)
- Align buffers on 1K to remove DMASEG requirement
- Floppy track caching, improves floppy speed tremendously
- Block I/O subsystem enhanced, no mapbuffer or buffer copying
- 32-bit block numbers for FAT
Console
- Direct Console fnkey sequences
- Direct console CapsLock/Numlock and LED support (@Mellvik)
- Direct Console ANSI sequences for vi and sh line editing
- Combine ANSI code in BIOS and Direct Console
- Direct and BIOS console driver refactoring and cleanup
- Serial console rewritten, improved structure
- Kernel printk allowed before console init
- Add headless console for SBC systems
Drivers
- Fast serial driver
- Serial driver FIFO
- Add O_EXCL for serial com/mouse
- Implement VMIN/VMAX, termios cleanup in applications
- Dynamically allocate TTY I/O queues
- Char I/O excess wakeup calls removed for speed
- Character queues don’t have to be power of 2
- Customizable IRQ and I/O ports for all drivers
- Use simpler wait routines in network drivers
- New WD8003 network driver (@pawosm-arm)
- NE2K network driver rewritten (@Mellvik)
Networking
- Packet statistics via netstat
- Fixed ARP, Added ARP cache list display
- Debug RTO values
- Multiple session support to telnetd
- Tune timeouts for TCP transmissions
- Remove double buffering in network drivers
- Tuned network buffer sizes, implement send window write throttling
- Network throughput increased substantially
- File transfers both ways now supported
Networking Bug Fixes
- Tons of TCP/IP fixes to ktcp and kernel
- Fixed Async ARP packet handling
- Fixes to telnet, telnetd and httpd to get them actually working
- Implement SLIP driver
- Fix SLIP buffer overrun
- Fix odd length IP/ICMP checksum calcs
- Networking fixes for connections, PTY fixes, keypress to continue fix
Boot
- Boot option parsing in /bootopts
- Serial console via /bootopts
- Init run modes for multi-user/multi-console
- FAT 12/16 boot (@tkchia)
- FAT32 boot
- Improved FAT booter, /linux and /dev first 8 entries (@tkchia)
- Implement ELKS parameter block in boot blocks (@tkchia)
- MBR boot loader
- Revised single stage boot loader design for Minix (@mfld-fr)
- Minix boot loader enhancements (@tkchia)
- Major setup.S cleanup, source cleanups
- Refactor REL_SYS, remove !REL_SYS, CONFIG_ROMCODE working
New Commands
- sys - transfer system images
- makeboot command to write boot blocks
- mkfat - create FAT filesystems
- kilo - visual editor enhancements (@georgp24)
- cron - schedule background jobs (@georgp24)
- arp - display ARP cache
- net - network start/stop script
- df - disk free
- time - calculate elapsed time running command (@Mellvik)
- busyelks - BusyBox for ELKS (@marcin-laszewski)
- tty - display current TTY (@Mellvik)
- hd - hex dump
- unreal - switch to 8086 unreal mode (@georgp24)
- uuencode/uudecode - encode / decode binary files for network transmission (@Mellvik)
- fdtest - floppy disk tester
- sercat - serial port tester
- mouse - mouse tester
- Add Nano-X and games into build tree
Improved Commands
- Sh line editing (@georgp24)
- BASH command completion
- Sash history (@Mellvik)
- Dynamic window size for vi, kilo
- ANSI /etc/termcap for vi, vi works from serial port
- Enhanced ps, meminfo, miniterm, ls
- Major bug fixes to init, getty
- ^C handling, no shell exit
- Workaround kernel directory rename with improved mv command
- Add recursive option to cp to copy entire disks
- Fixed mkfs and fsck to work
- Fixed fdisk to work
- Fixed clock and added to startup for correct date/time from BIOS at boot
- Fixed init to properly read /etc/inittab, with single and multi-user run modes
- Fixed getty to handle multiuser logins on serial ports
C Library
- Debug malloc heap trace
- Libc Routines added or fixed: putenv, basename/dirname (@cjsthompson), chgrp, snprintf/ vsnprintf (@tkchia), getpass, times, tzset, sleep, rand, srand, gmtime, in_aton, in_ntoa, in_gethostbyname
- Header file cleanup and all prototypes
- No warnings on libc compile
- Split all functions to separate .c files (@marcin-laszewski)
- Localtime support and TZ=
- Add stdcall support (@tkchia)
- Add multilib support (@tkchia)
Build
- MacOS build
- Disk images built with mfs tool, no root or host filesystem driver needed
- Add setboot for managing boot blocks
- Elkscmd/ reorganization, all commands built w/any config
Compiler / Tools
- Toolchain enhancements for medium model (@tkchia)
- Enhance thunk code for 0-6 argument near calls from fartext (@tkchia)
- Move to new elf linker (@tkchia)
- Use ligbcc from toolchain (@tkchia)
- Add objdump86
- Elksemu enhancements (@tkchia)
- GCC tools update for GCC v10 (@tkchia)
- mfs tool to create Minix images w/o being root
Images
- Build all disk images automatically
- Images include 2.88M, 1.44M, 1.2M, 720k and 360k, FAT and Minix, 32MB HD, 32MB MBR
- Config image build system for app category and disk image size
- Select applications by image size as well as application category
- Consolidate commands to /bin
Documentation
- Wiki
- Improved HTML documentation (@georgp24)
ELKS 0.3.0
End of migration from DEV86 to GCC-IA16:
- Own LIBC
- Own MINIX boot block
- User land migration
Minor changes:
- EMU86 integration
- E3 editor removal
- RC shell removal
- Protected mode removal
- License clarification (thanks @jbruchon)
Bug fixes:
- BIOS console driver
- SETUP to kernel
- configuration & build (thanks @tkchia).
ELKS 0.2.1
This is an intermediate release that accumulates all the changes performed since 2015.
Main changes:
- Continuous kernel fixing, optimization and cleanup (thanks @lithoxs)
- FAT support (but still unstable & incomplete) (thanks @georgp24)
- Kernel migration from BCC to GCC (thanks @lithoxs)
- ROM filesystem support
- Unified & revised configuration for kernel & user land
- Ethernet support & NE2K new driver (thanks @georgp24)
Minor changes:
- Halt on idle option
- No more build as root but sudoer
- New list allocator
- Internet applets tuning
Bug fixed:
- Socket interface
- BIOS console
- Shell signals
ELKS 0.2.0 with disk images
ELKS kernel configuration used to build images can be found in the "kernel_config" file.