Go back to the Visopsys Home Page.

What is Visopsys?



Download Visopsys and associated files.


Resources for Visopsys development

OS Development Resources

Search the Visopsys Site

 


VERSION 0.51
31/12/2004

Overview: This is a maintenance and bugfix release, with some additional features, such as the Disk Manager's ability to fix small partition table consistency errors.

  • Enhanced the bootstrap code so that it is possible to boot on some trickier hardware platforms, such as Toshiba laptops.
  • The disk manager now offers to fix errors turned up by the partition table check.
  • The disk thread now respawns when it is killed [ thanks Thomas Kreitner ].
  • The 'install' program now show a progress meter in text mode while copying files.
  • When the shutdown program is attempting to eject the disk, it now shows a banner dialog since sometimes it takes a couple of seconds.
  • In the text area code, when the screen is cleared, the existing screen contents are no longer rolled back into the buffer -- they are discarded.
  • Deprecated the windowPack() and windowSetPacked() API functions.
  • While attempting builds with gcc version 3.4.2, fixed a number of bugs and details that the newer compiler found.
  • Fixed: The program manager wasn't really putting threads under their correct process parents; it merely put them in order as received from the kernel.
  • Fixed: The getopt() library function was being used incorrectly by a number of the user applications.
  • Fixed: It was possible to kill the exception handler thread, which caused an immediate triple fault [ thanks Thomas Kreitner ].
  • Fixed: Broken CD-ROM floppy disk emulations no longer trick the loader into detecting nonexistent floppies.
  • Fixed: On some hardware, the kernel's hardware detection could be tricked into detecting nonexistent fixed disks with NULL geometry.
  • Fixed: The 'megabytes' value being printed for hard disks by the loader was severely wrong.

VERSION 0.5
12/12/2004

Overview: This release adds logical partition capabilities to both the kernel and the Disk Manager (which has been substantially rewritten), window minimizing, a GUI taskbar for managing windows, new icons and cleaner desktop layout, a 'Program Manager' application, and a temporary file interface -- as well as lots of bug fixes and smaller tweaks.

  • Added support for hard disk logical partitions
  • Added a 'taskbar' menu to the top of the root window.
  • Added 'minimize' functionality to windows.
  • Made a 'program manager' program that allows a user to manage running processes, etc.
  • Enlarged the disk manager window and its canvas, and added a more action buttons.
  • Added a 'show info' action to the disk manager.
  • Implemented the ability to 'hide' partitions in the disk manager
  • The disk manager now includes an option for writing a fresh partition table to a disk.
  • The disk manager now allows the disk to be specified as a command line argument.
  • The disk manager now has a better GUI interface for creating a new partition.
  • Implemented a temporary file interface
  • The install program now shows which install disk is selected when in graphics mode.
  • Made a new 'shell' icon for the command window, added icons for the program manager and configuration editor, and removed the 'logout' and 'shutdown' icons from the desktop.
  • Programs that can run in both graphics and text modes (such as the disk manager and the installer) now have a standard -T argument that causes them to run in text mode.
  • Added a libvsh 'cursor menu'. Converted imgboot, fdisk, etc. to use it.
  • Added the ability to have comment lines in the install files
  • Created a libvsh function for parsing a command line into command and args, suitable for passing to the loaderLoadAndExec function.
  • Added a user-space 'process' struct, and converted the 'ps' command to use it.
  • The date/time printing library functions have been cleaned up and fixed so that they don't print superfluous spaces
  • Restored the 'ownership' attributes of input streams, and restored the CTRL-C functionality.
  • Moved the 'dist' directory out of the 'utils' area and into the top level directory
  • Added strchr and strrchr C library functions
  • Added a kernelStreamDestroy() function to complement kernelStreamNew()
  • Attempting to mount a CD will now close the tray before the attempt, if it's open.
  • Removed the icons= line from windowmanager.conf. The window shell will now figure out the list of icons dynamically based on which ones are actually specified in the file
  • The 'format' now has 2 additional modes: a graphical mode, and a non- interactive 'silent' mode.
  • (Re)-implemented the ability to get a screen shot from a key press.  The 'instant screenshot' is triggered by [PRINT SCRN] key, and multiple shots can be taken this way without overwriting one another.
  • The vsh prompt is no longer the whole directory path; just the current directory name.
  • The window checkbox widget now ignores the user-specified foreground color for the 'x', since we always use white for the background behind it, and if the foreground was white, no 'x' would be visible.
  • The graphical shutdown program now offers an 'eject CD-ROM' checkbox when booted from CD-ROM, since otherwise the door stays locked and getting the CD out during the BIOS POST can be tricky.
  • CTRL-ALT-DEL now does a proper shutdown, so that the disks are synced before rebooting.
  • Removed the exception handler's 'core dump' code, since it wasn't all that useful without tracing/debugging facilities.
  • Clicking outside of all of a window's components now removes the focus from any focussed component.
  • Fixed: The 'cdrom' program's help page claimed that it will attempt to guess the name of the device is not specified, but that hadn't been implemented. It always picked the first cdrom.
  • Fixed: The ATAPI driver was not reliably ejecting CD-ROMs.
  • Fixed: The window manager screenshot code was crashy
  • Fixed: The 'display settings' program's 'show clock on the desktop' thing was very crashy.
  • Fixed: The kernelFileStreamClose() function now destroys the stream.  Previously it didn't do so and was a memory leak.
  • Fixed: The installation program now calculates the required space more accurately, and verifies adequate disk space *before* starting the installation.
  • Fixed: Extra (second) floppy disks were showing up where they didn't exist
  • Fixed: The disk manager's formatting functionality was crashy
  • Fixed: In graphics mode, the disk manager's action buttons were not being laid out properly.
  • Fixed: In graphics mode, the disk name argument of the disk manager didn't properly select the disk in the disk list.
  • Fixed: The kernel logger was inserting random characters into the log at 512-byte boundaries.
  • Fixed: The return value of the library memcmp function. If comparison failed on the first byte, it was returning success (0).
  • Fixed: Partition Magic was complaining about the disk manager's CHS values being incorrect.  In particular it wasn't liking our 'maxed out' head and sector values when a partition started or ended at a cylinder > 1024.
  • Fixed: When creating new partitions in the disk manager, Partition Magic was showing multiple ones as active.
  • Fixed: Dragging an icon was executing the program, as if the icon were simply clicked
  • Fixed: Seeking/writing to the end of a file stream was broken.
  • Fixed: Typing during a graphics mode screen scroll left stray cursors on the screen and could cause crashes
  • Fixed: When snapping the icons in the root window, the window layout was being redone too many times (once for *every* icon that moved).
  • Fixed: The menu bar component was ignoring any user-specified font.
  • Fixed: Window title bar menus are no longer drawn if there are no items in them.
  • Fixed: The window canvas component was generating a kernelMemoryRelease message about a pointer not being mapped.
  • Fixed: Causing the console text area to scroll while it wasn't visible caused a triple-fault.
  • Fixed: The status messages in the graphical install program were wrapping off the window.
  • Fixed: If a CD-ROM was a master with a slave, that CD-ROM was not detected.  If the slave was also a CD-ROM, neither was detected.
  • Fixed: The system was unable to boot from the second CD-ROM device.
  • Fixed: Running the 'install' program with a disk name argument was not working

VERSION 0.42
11/09/2004

Overview: This is primarily a bugfix release, with some added features including the ability to format partitions from the Disk Manager, plus vertical scroll bars on text areas and visual reimplementation of "greyed out" window components.

  • Enabled filesystem formatting functionality in the disk manager.
  • Implemented vertical scroll bars and extended buffers on window text area components
  • Improved the 'greying out' functionality in the window manager; it didn't look great with the default colors and looked positively silly with some other color schemes.
  • Reimplemented the 'hidden' functionality of window text areas so that the buffer contains the real content, and the visible area contains the asterisks. The 'get data' function returns the data from the buffer.
  • The window manager now makes more use of the busy mouse pointer
  • Restored window list locking, now that interrupt handlers don't need access.
  • Created a new logo for the splash image
  • In the disk manager, there is now a confirmation dialog before moving partitions
  • Added a 'get disk by file' function.
  • The 'disk' structures now contain a set of flags to indicate which filesystem functions are available from the appropriate driver, if applicable.
  • Moved the window event processing out of the execution path of interrupt handlers and into the window manager thread
  • Added 'new' and 'destroy' functions for kernelTextAreas
  • Moved icons and fonts into subdirectories under /system
  • Added a way to specify whether a loadable font should be fixed-width
  • Removed instances of 'bzero' calls in the kernel. We have a much better kernelMemClear() function.
  • Added a 'strncasecmp' C library function
  • Simplified the management of 'kernelFilesystem' structures in the filesystem code.
  • The graphics code (main, framebuffer driver, and window manager and friends) now uses ints instead of unsigneds for widths and heights
  • Moved the font argument from some window components into the componentParameters structure
  • Fixed: Setting the widest item in a GUI menu to not enabled caused a bit of the menu border to get greyed out as well.
  • Fixed: State changes in the disk manager's disk and partition lists caused by key events were not being handled properly.
  • Fixed: In the User Manager, when adding a new user, if the user already existed the program would still prompt for a password.
  • Fixed: In 16-bit video mode, window titles were not displaying proper transparency
  • Fixed: The size/drawing of the items in list components was slightly off.
  • Fixed: If fonts or icons are missing, there's a panic
  • Fixed: The text mode console driver was not scrolling properly when printing long lines. The next line would overwrite the wrapped part of the previous one.

VERSION 0.41
09/08/2004

Overview: This is primarily a bugfix release, with some added features, including the ability to move partitions, a configuration editor, and a keymap editor.  There are also a number of small tweaks to graphical components and GUI user settings.

  • The disk manager can now move partitions in contiguous space (i.e. it can 'slide' them from side to side)
  • Created a 'configuration editor' for editing configuration files
  • Created a 'keymap editor' for choosing keyboard layout.
  • In the Disk Manager, clicking on a colored slice in the canvas area now selects the partition
  • Added a 'color chooser' window library dialog box
  • The window shell thread now loads programs automatically based on things specified in the window manager config file.
  • Added a pretty xterm font (modified from the xterm program under Linux).
  • Made it possible to set the default foreground, background, and desktop colors for all graphics operations in the kernel.conf file.
  • Added a 'show clock on desktop' checkbox to the display properties app with an accompanying clock app.
  • Implemented right and middle mouse click events.
  • The radio button GUI widget will now accept focus and allow keyboard control
  • In the Disk Manager, when a new partition is created, it is now selected afterward.
  • When copying disks in the disk manager, added a better prompt dialog to ask which disk to copy to, with a clickable list instead of a typing prompt, and it doesn't prompt about which disk to copy to if there's only one other choice
  • Made the 'scroll bar' GUI widget available from user space
  • Calling 'set selected' with GUI list widgets now scrolls the list if necessary so that the selected one is visible.
  • The window manager no longer re-saves its config file at shutdown
  • Added a 'cancel' button to the 'copy disk' dialog of the disk manager
  • Mouse dragging events now filter down to the user space via the event stream.
  • Added a 'kill by name' function to the multitasker.
  • Added a 'focus' routine to the menu widget, so that when the menu will disappear itself if it loses the focus
  • Made a more friendly error message for the help command when there is not a help file for the topic.
  • Fixed: In 15-bit graphics modes, the colors were all wrong.
  • Fixed: The window list component was not responding very accurately to movements of the vertical slider, the slider was picking up both up-and-down mouse clicks, and dragging wasn't all that perfect either.
  • Fixed: It was possible to resize a window down to nothing (or less than nothing!!).
  • Fixed: The mouse pointer was leaving tracers when dragging or resizing windows, or dragging icons
  • Fixed: Compilation failed on SuSE 9, with gcc 3.3.3 and (more importantly) whatever GNU ld comes with it.
  • Fixed: It wasn't possible to hide a GUI component if they had the focus.
  • Fixed: The format command stopped accepting a lone disk name argument
  • Fixed: The framebuffer graphic driver was not drawing any part of outlined rectangles if part of the rectangle was off the screen.
  • Fixed: Resizing list components was not resizing the subcomponent list items
  • Fixed: Multiple buttons inside a container component were not picking up window events.
  • Fixed: The arial bold 10 font's equals ('=') sign was a plus ('+')
  • Fixed: Pressing CTRL-ALT-DELETE in graphics mode produced a panic with 'can't yield() in interrupt handler'

VERSION 0.4
19/07/2004

Overview: This release features a number of graphical interface improvements, including several new GUI widgets and "newbie" usability tweaks. The 'install' and 'disk manager' programs have been properly GUI-enabled, and this release also adds user authentication with MD5 password encryption.

  • Implemented the following GUI widgets: checkbox, radio button, menu bar (plus menu, and menu item), progress bar, canvas, scroll bar, list (plus list item), and password field
  • Implemented 'container' components which can be nested arbitrarily, and have their layout done individually. Added a top level 'container' component to the window structure and removed the simple list of components.
  • When running from a CD-ROM or other read-only filesystem, there is now a general warning that the user can't modify settings or change anything generally.
  • The OS loader now gives the kernel a list of supported graphics resolutions/depths that are supported, and there is user preference for choosing the mode, which the OS loader now reads from a file.
  • Improved the hardware structure in the OS loader so that it makes use of NASM's STRUCT directive
  • Added text-mode password prompting code to the vsh library
  • Exported locking and variable list functionality to user space.
  • The 'configuration reader/writer' code is more sophisticated, so that it preserves comment lines (if replacing an existing config file)
  • Updated the install image generation scripts, and fixed the naming of the generated images
  • Created a new background image that isn't so 'busy'. Removed the old ones.
  • The 'start program' loaded by the kernel is now specified dynamically in a file, and added an 'image boot' program to be loaded first when booting from an ISO or floppy image distribution that will prompt the user whether they want to install, or simply run from that image.
  • In the vsh, you no longer need to put a space between the last command argument and any ampersand
  • Implemented Bresenham's lines and circles algorithms in the framebuffer graphic driver.
  • Both the native installer and the UNIX installation scripts now use file lists and include options to do a 'basic' versus 'full' install.
  • The FAT filesystem driver no longer calculates the filesystem free space asynchronously. Previously, this meant that an application could not know
  • how long to wait before it could begin writing to a freshly-mounted filesystem.
  • Graphicized both the 'install' and 'disk manager' programs
  • After copying a larger disk to a smaller one in the disk manager, we now go through the entries in the partition table and adjust them so that none have illegal values. That means, for example, deleting or truncating partitions that don't fit on the smaller disk.
  • Added a 'cursoring' effect to the text mode disk manager, since it makes the flow better (not required to type partition numbers, etc.), and which means that a partition or empty space is always selected, which fits better with the graphics mode use model.
  • The disk manager program now saves disk-specific backup MBRs in the /system/boot directory
  • The window manager thread now checks that windows' processes are still alive, so that it doesn't require a mouse click to dispose of the window. Also, if the window manager thread dies it is now restarted
  • 'Visopsys blue' is now the default foreground color for most GUI components (rather than black).
  • Removed the start window and replaced it with a simple splash image
  • Changed remaining 'csh' scripts to 'sh' and removed the unused stuff from the /utils/src-mgmt directory
  • Rearranges the source code directory structure and build system a little bit, so that there is a top-level 'build' directory which contains all the installable stuff in the correct places. This allowed the installer to be a lot simpler and facilitated the implementation of installation file lists.
  • Implemented a 'getopt' library function and converted the contents of the 'programs' directory to use it.
  • Added a 'window shell' thread which is the new user login process in graphics mode, and which handles events on components in the root window.
  • Added 'delete user' functionality to both the kernelUser code and the 'user manager' program.
  • Added a 'passwd' command that shows as a 'user manager' in the GUI, that can be used to change passwords and create/delete accounts.
  • Separated the source files for the different libraries into subdirectories, and broke out the libvsh and libwindow code into separate source files to reduce executable sizes.
  • Added a 'file selection' dialog box into the window lib.
  • Font printing by default draws the background color under the character.  Transparent images are still an option.
  • Added a 'flags' field to the kernelWindow structure, since there were a few booleans and it's a waste of space to make them all ints.
  • Vsh file completion now works like bash when there's only one 'real' item in a directory - complete it with just a [tab]
  • Made it possible to click between multiple text areas in window
  • Added user authentication to the login program
  • Improved handling of width specifiers for 'printf' number parameters.
  • Added an MD5 encryption implementation
  • A commands is no longer added to the vsh history if it's the same as the previous one
  • The keyboard code now reads the lights status at startup so that it doesn't reset them improperly. Also, numlock works.
  • Implemented enable/disable functionality for GUI components.
  • Implemented a 'set visible' function for components
  • Implemented 'set disabled' functionality for window menu items
  • Added 'resizable X' and 'resizable Y' fields in the component parameter structure, and only resize components appropriately
  • Simplified the process of adding components to windows, so that you only have to call the 'new' function, with the component parameters, and it will be added to the window automatically.
  • Removed the 'size' parameters from the 'button' component constructor
  • Implemented the 'get data' and 'set data' methods of text label components, so that the label contents can be dynamic.
  • Added a window component flag that will prevent a [tab] from unfocusing certain components.
  • Removed the coordinate and size parameters from the "new window" function of the window manager. The window size is determined automatically unless the "set size" function is called.
  • Window layout happens automatically. The programmer no longer has to do this explicitly.
  • Added resizing capability to the windows in the window manager.
  • Window buttons are now focusable and can handle various keyboard events
  • Implemented proper 'focussing' of window components
  • Added a function for getting the contents of a text field or text area component in the window manager
  • The window close button no longer uses the little 'X' image file, but rather draws its own 'X' using the new bresenham line drawing abilities.
  • Changed the 'shutdown' program so that in graphics mode it prompts for a reboot or shutdown
  • Added a better 'install' icon.
  • Added a GPL banner to the image boot program
  • Disabled the left-right cursor keys in the vsh, as they tend to make people think they can do line editing (which they can't, yet).
  • Fixed: If the screen dimensions are too small to accommodate a window, it doesn't appear at all.
  • Fixed: Pressing CTRL-ALT-DELETE in graphics mode produces a panic with 'can't yield() in interrupt handler'
  • Fixed: The 'screenshot' program was crashing when attempting to write to read-only filesystems.
  • Fixed: If the floppy was removed while the boot loader was loading the kernel, it was going into long retry loops
  • Fixed: File input streams were horribly broken in the ISO9660 filesystem driver. Before the fix they would only read the first sector.
  • Fixed: argv[0] was not being set by the loader code. It was only being set explicitly by the vsh when programs are executed, which it shouldn't do at all.
  • Fixed: The arrangement of icons in the root window so that they wrap into the next column when they hit the bottom of the screen
  • Fixed: There was trouble (triple-fault) drawing outline (non-filled) rectangles in the framebuffer graphic driver, if they were partially off the edges of the screen
  • Fixed: The ELF loader was not allocting enough memory for the uninitialized data that executables might require.
  • Fixed: The free spaces calculation in the disk manager was incorrect, particularly when there was only one partition that didn't start at zero
  • Fixed: "component cannot focus" error messages when clicking on icon components
  • Fixed: When booting from the hard disk , the opening of the kernel log file often failed with a "not enough space" message.
  • Fixed: In text mode, the login process was not properly setting supervisor privilege for the 'admin' user
  • Fixed: When windows were dragged, the focus was lost from the focused component.
  • Fixed: Text fields were coming up with their cursors on by default.
  • Fixed: The kernel.log file was not being updated/written correctly.
  • Fixed: The fileWrite routine was not behaving as expected when writing a single-block file. The file size was zero, even though the file was written and closed properly
  • Fixed: When writing a file using the file stream functions, there was a newline inserted at the beginning of a file.

VERSION 0.33
11/01/2004

Overview: This is primarily a bugfix release, with bootable CD-ROM support added as a new feature.

  • Added bootable ISO9660 (el-torito) CD-ROM support.
  • The 'no boot' boot sector code no longer reboots the system, but instead properly calls the next boot option
  • Fixed: Spurious error messages when booting from a read-only file system.
  • Fixed the kernel heap allocation code, which was losing and corrupting blocks of memory, and leaving small, odd-sized gaps of unused memory.
  • Polished up the scripts for creating floppy & CD-ROM images
  • Fixed: No longer attempt to recalibrate ATAPI disks.
  • If a CD-ROM read fails because there is no disk, the driver no longer leaves the number of sectors at zero, since that will stop all subsequent read attempts
  • The CD-ROM driver code can determine more elegantly whether there is a data CD in the drive and if not, print a friendly error message.

VERSION 0.32
04/01/2004

Overview: This is primarily a bugfix release, with CD-ROM and ISO9660 filesystem support added as new (alpha) features.

  • Added (multi-session capable) CD-ROM driver code
  • Fixed: The 'date' command day of the week was wrong.
  • Created a set of help text files for all of the commands, in a /programs/helpfiles subdirectory. The 'help' command is now an executable which can provide command-specific help.
  • The 'vsh' shell now has a '-c' option so that it can be used to execute commands, non-interactively.
  • Added a 'system' Visopsys C library function
  • Added a 'driver data' field in the physical disk object, so that the different drivers can store device-specific data there. Implemented the floppy driver's 'detect' and 'register device' routines to remove some of the floppy-specific stuff from the hardware detection code.
  • The 'mount' and 'umount' commands will now accept relative pathnames
  • Added an ISO9660 filesystem driver
  • Eliminated spurious floppy timeout error messages when booting from hard disks.
  • Fixed: Unknown floppy drive types were causing hardware detection (and therefore the whole startup) to fail.

VERSION 0.31
12/12/2003

Overview: This is primarily a bugfix release, with EXT2 filesystem support added as a new (alpha) feature.

  • Implemented a preliminary, alpha, read-only EXT2 filesystem driver
  • The libraries and (non-kernel) include files have been relicensed under the GNU LGPL to permit use by proprietary programs
  • The IDE/ATA/ATAPI driver was not responding to disks on the secondary controller.
  • Fixed: The 'cat' program wasn't printing tabs properly the way the 'more' program does.
  • Fixed: kernelMalloc allocations were not necessarily being done on any boundaries. It is now done on sizeof(unsigned) (dword) boundaries.
  • Added a *very* basic 'find' program which only traverses whole directory trees. Initially to aid in development of new filesystems

VERSION 0.3
24/11/2003

Overview: This release is very much an "under the hood" release. The user interaction is similar to that of 0.2, but a great deal of work has gone into improving the structure, performance, and stability of the underlying code -- particularly the disk subsystem. However, some eye candy has been added, and the GUI is more functional and consistent.

  • A thread of a process can now kill the parent process.
  • Created a multitasker 'detach' function for daemons or other programs to use to detach themselves from any programs that might be blocking on them.
  • Fixed: Windows wasn't entirely happy with our FAT short filename aliases.  Complained about the format of the short name of "/system/boot/bootsect.fatnoboot"
  • Changed the naming of the kernel window components (removed the'component' bit from the names)
  • Fixed: File completions were completing things they shouldn't; i.e. when you "cd system; ls b[tab]" it completed "background" but there's a "boot" directory as well.
  • The window manager thread is now the login process for a user when in graphics mode, rather than a text shell running in a console window.
  • Reduced the stack sizes of processes. They shouldn't need nearly as much (260K) as they were being given.
  • Removed all the 'binary distribution' stuff (the Java installer, shell scripts, readmes, etc). We will only do binary distributions as floppy or ISO images from now on.
  • The console window is no longer shown by default. Added a program and icon ('console') to display it and handle the window events, etc. Added external API functions to put a console widget into a user program.
  • Changed the error reporting interface for the disk drivers. Removed the 'last error message' and 'last error code' functions -- these were leftovers from the days of ASM drivers that couldn't use the normal error reporting mechanisms.
  • Fixed: The mouse was not being redrawn when windows close themselves.
  • Implemented 'levels' for GUI components within a window, in the same manner as windows have levels. This way if components overlap, we can only send windowEvents to the uppermost one.
  • Sped up the scrolling of graphics text areas. Now only scroll as much of the width of the area as the longest line of contents.
  • Fixed up the framebuffer graphic driver a little bit more so that it draws most efficiently for the bit depth it's using.
  • Implemented kernel versions of malloc() and free() so that we're not always wasting whole pages of memory for small things.
  • Added shutdown and reboot buttons to the login screen in graphics mode.
  • Implemented text labels on kernelWindowButton components, with selectable font.
  • Fixed: Window layout problems. Attempting to add reboot and shutdown buttons to the login screen, I discovered that setting the component's gridWidth parameters to 2 causes a crash. In addition, when I incorrectly left the gridWidth at 1 and attempted to add the 2 buttons below (using 2 grid places) they were erroneously placed on the line above, and the other widgets got squashed together.
  • Added an event notification callback mechanism for user programs that use the GUI. When a user performs a GUI action, such as clicking a button, the user application can now read that event from the component.
  • As a supplement to this, implmented user-mode library code for monitoring window component event queues. It includes a "GUI run" function that signals the application is ready to begin monitoring its widgets for events, after all its setup is done. The rest of the flow can be driven by callbacks from events. All of the included programs have been converted to use these features.
  • Added a logout procedure for the window manager (rather than having to log out by hand from the console window)
  • Implemented a better "kernel panic" routine that displays something useful in either text or graphics mode and shuts things down quickly.
  • Interrupt handlers and their actions are no longer allowed to yield(), wait(), block(), etc.
  • Fixed: Moving the mouse in text mode is disrupting keyboard input
  • The fdisk program will save a backup copy of the MBR before writing changes, and provides an option to restore it.
  • The graphic/text console drivers, as well as the FAT filesystem driver, have abstracted driver registration procedures like the hardware drivers do.
  • The API calls in kernelApi.c are now 'hashed' according to their function number, for faster API throughput.
  • Added a routine to the generic disk code for reading the disks' partition tables (instead of in the hardware enumeration code). It is be re-callable anytime so that programs like fdisk can create/delete partitions and have the change be reflected immediately in the list of logical disks.
  • Cleaned up the management of the kernel's built-in drivers. The drivers now have an 'init' that registers the driver structure with the kernel, so that the kernelDriverManagement code doesn't have to have all the functions hard-coded in there.
  • Disk caches are invalidated when removable media is unmounted.
  • The boot sector and the OS loader can now boot from a cylinder > 1024.
  • Large disk geometries are now correctly evaluated by the hardware detection code and by the fdisk program.
  • Created a 'non-bootable' FAT boot sector, that the formatting code uses to make non-system FAT volumes
  • When files are copied, the sizes are now being set correctly.
  • The new floppy driver C code no longer freezes up the computer if you remove the media unexpectedly.
  • Hardware enumeration and fdisk no longer fail when there is no partition table on the hard disk
  • FAT filesystem root directories now have '.' entries (and '..' entries when they're not '/')
  • Removing the last file in a directory (for example, in the root of a filesystem) no longer produces an error message.
  • Fixed up the filesystem driver stuff, so that there is only one instance of each driver of each known type
  • In the FAT filesystem driver, file names that start with '.' were listed, but could not be created or accessed. This is fixed.
  • Implmented FAT filesystem driver formatting functionality
  • Improved the fdisk program so that it can do most common operations
  • When there are no files in a directory, 'ls' no longer prints an error message.
  • When doing disk reads, we now do read-ahead caching
  • The kernel is now able to handle operation from a read-only or write-protected media without spewing errors and getting panicky.
  • kernelLocks are now exclusive even to the same process. i.e. If a process owns a lock, calling kernelLockGet() a second time fails.
  • Added a UK English keyboard mapping
  • The disk code should launches a new 'synchronizer' thread if the existing one dies.
  • The exception handler tries to do a stack dump when an exception occurs.
  • The filesystem code is now correctly updating FAT short filename aliases when files are moved.
  • Updated the loader code that searches for a valid video mode. It now searches for *any* LFB video mode first, and reports an error to that effect if it finds none. That is a different scenario than not finding a 'desired' video mode.
  • Added LFB graphic driver support for bit depths of 32, 16, and 15 BPP.
  • Remove the FAT sector caching from the FAT filesystem driver.
  • Changed the filesystem synchronizer so that it is now a *disk* daemon that simply turns removable drives' motors off.
  • Implemented proper asynchronous disk caching.
  • Kernel symbols to aid debugging, in the /system/kernelSymbols.txt file, which is read at startup and used for stack traces and whatnot.
  • Converted all built-in drivers from ASM to C, with inline ASM in a processor-specific header file. This makes it easier for them to use the C data structures, etc., for better integration with the rest of the kernel.
  • THERE IS NO LONGER ANY NASM ASSEMBLY CODE IN THE KERNEL. Woo!
  • Changed 'root' user to 'admin' user -- something less geeky/UNIXy.
  • The kernelDisk structure is broken up into physical objects and logical disks (volumes, i.e. hard disk partitions, but every physical disk has at least one logical disk). The disk cache, 'idle since' value, physical characteristics, etc., are in the physical disk. Things like starting sector, number of sectors, etc., are in the logical disk structure. The physical disk structure contains the logical ones.
  • Added some memory manager macros so that each memory block request doesn't require an alignment specification (only where desired)
  • Fixed: rm system/windowmanager.conf ; sync ...Errors in the filesystem.
  • The window icon code is better able to deal with long icon names. Previously it printed the whole name on one long line.
  • When a user logs out of the window manager, all windows belonging to that user are destroyed
  • Fixed: Mouse driver initialization was sometimes causing the boot sequence to 'hang' a little bit -- wiggling the mouse or pressing keys was required to continue
  • The kernel log utility was losing some log messages that come early in the boot process, before the root filesystem is mounted.
  • Change start.o (.c) to crt0.o for more UNIX C compatibility.
  • Fixed: When running a command window, all the shell processes suddenly start hogging CPU. Was a case of 2 'ready' processes constantly yield()ing to one another. Changed the scheduler so that a process will get a low weight if it has yielded that timeslice before (a little different from the previous algorithm)

VERSION 0.2
03/06/2003

Overview: This release was a huge leap ahead from version 0.1 (and it took a long time, too). This release added a basic GUI, whereas version 0.1 was text-mode only. Really, the list of changes below is very incomplete -- Especially in listing new features.

  • Fixed: When rebooting from other operating systems such as Windows or Linux, Visopsys would triple-fault. Clearing the page cache seems to do the trick. Also changed the way page caching is done. Turned off write-through which improved the performance of the graphics as well.
  • Updated the shell 'help' text.
  • Fixed: Can't move/copy a file over top of another by the same name in a different location unless you specify the destination filename explicitly (i.e. if you just specify the directory, it fails)
  • When using the 'more' program, pressing [enter] to list a new line no longer leaves the "--More--(xx%)--" message on the screen
  • When a process has finished but is waiting for its child threads to terminate (i.e. mount), any process that is blocking on that process now stops waiting.
  • Fixed: Crashes when running the 'install' program, and other types of long disk writes. When this happened under the old exception handler, the handler used to go into an endless loop complaining about an exception in the idle process. This was the fault of the 'timed event scheduler'.  Got rid of that.
  • Fixed: The floppy motor was staying on all the time on many machines
  • Fixed: The FAT filesystem code was not properly filling all long filenames. They were cut off after some number of characters.
  • Fixed: When in the multitasker the killing of a process is delayed because of child threads, the process never seems to be killed when the children have all terminated. For example, when you mount a large FAT filesystem (C:), the thread that reads the FAT keeps the "mount" process alive, waiting, forever.
  • Fixed: When pushing some of the "non-printable" keys such as 'num lock' and then doing command history, the shell was backing up by one character before completing the filename.
  • Added support for non-fixed-width fonts in the kernelFont functions.
  • Added support for loading fonts. The system font looks lame on titles and whatnot, particularly on the login screen.
  • The login is now a little more meaningful in graphics mode. Previously, a console window would open with a login: prompt, but the user could happily start opening other command windows and such, and ignore the login (unless they wanted root permissions).
  • Added loading support for 24-bit bitmaps. We already saved in that format.
  • Fixed: Umounting a filesystem was not properly dereferencing either the filesystem or the disk. Couldn't mount->unmount->mount the same disk.
  • Changed the shell to do filename completions on the same line as the current line, rather than starting on the next line.
  • Implemented multiple text output streams, with the text input stream changing to the active window, so that we can have multiple text windows open at the same time
  • Implmented the FAT filesystem driver checking functionality [It's very primitive, but it does detect and fix some errors]
  • Moved the exception handler code into the multitasker. It really needs to interact with the multitasker quite a bit.
  • The new exception handler thread was hanging the terminal (breakable with CTRL-C) when the exception message happened at the bottom of the text area and caused the screen to scroll
  • The kernel's exception handler is now a spawned thread with its own stack, etc., so that it doesn't run as part of whatever process caused the exception in the first place. This helps to prevent the exception handler itself from crashing if things have gone seriously wrong with a process.
  • Adding permission checking to the kernel functions that are be exported to the rest of the world.
  • Fixed: The boot progress indicator was progressing beyond the end of the indicator
  • The 'getchar' routine now does the work of polling/yielding, rather than the programs that call it.
  • Added a basic 'fdisk' program that can do things like swap the active partition on hard disks
  • Fixed: The hard disk enumeration routine was crashing when there was more than one physical disk
  • Added the ability to copy directory trees in the filesystem functions, one level up from the filesystem driver. Could be a library routine instead someday.
  • Fixed: The 'cp' command was crashing when copying files involving the hard disk
  • Implmented the 'write' function in the IDE disk driver. Previously it was left out since the filesystem driver is still imperfect.
  • Fixed: Mounting hard disk partitions on my 30GB hard disk was not working.  LBA versus CHS issue
  • Fixed: The mouse driver initialization sometimes hung, waiting for a response from the mouse to a command
  • Added ELF executable capability and moved the programs to ELF format
  • Fixed: Incomplete filenames were still having an / appended to them by the shell.
  • The PS2 mouse driver and the keyboard driver now share a lock on the device, since they both deal with the same registers, etc.
  • Fixed: Sometimes an error in another program could cause a fault in the idle process (?!?), then the exception handler routines would get into an endless loop
  • Fixed: When a process created a new process, the unmapping of the new process' memory from the parent process space would sometimes cause a page fault.
  • Fixed: The 'log file updater' thread was been crashing frequently, most often when another process crashed
  • The scheduler no longer spawns a new idle thread while the multitasker is in the process of shutting down.
  • Fixed: The 'date' command was producing wrong results. The year, dotm, hour, minute, etc., were correct, but the month and dotw were wrong.
  • Fixed: When shortening a filename, one extra character from the old filename got left on the end of the new name. This was because of strncpy changes.
  • Fixed: There was a little sequencing error in the kernelMemoryManager's share memory routine -- it was deallocating the memory from the sharer process before allocating it to the sharee.
  • Simplified the default driver management. It was ridiculously overcomplicated.
  • Fixed: The FAT code that lowercases short filenames wasn't lowercasing the file extensions
  • Fixed: Most of the device driver initialization routines were being called twice; once in kernelDriverManagement.c and once in the abstraction layer initialization

VERSION 0.1
02/08/2001

Initial public release.

 

Go back to the Visopsys Home Page.   What is Visopsys?      Download Visopsys and associated files.   Resources for Visopsys development      Search the Visopsys Site
This site is copyright © 1999-2004, J. Andrew McLaughlin
Visopsys and Visopsys.org are trademarks of J. Andrew McLaughlin
Last updated on September 11, 2004