BCOS DocumentationProject Map
BCOS Project Log
 

Contents

1          Introduction
2          Year 2009
2.1          November 2009
2.2          October 2009
2.3          September 2009
2.4          August 2009
2.5          July 2009
2.6          June 2009
2.7          May 2009
2.8          April 2009
2.9          March 2009
2.10         February 2009
2.11         January 2009
3          Previous Work



1   Introduction

This log is intended to be used to track progress and (eventually) show release history. All entries in the log are in chronological order. All dates listed here are approximate only, mostly due to time zone differences (the dates reflect Central Australian Time and are subject to local daylight savings changes rather than being based on UTC, and sometimes things that were done very early in the morning may have been listed as being done the night before).


2   Year 2009

2.1   November 2009

    
November 8:
Created "kexe86.inc" include file, to generate headers for Kernel Modules
Initial design of linear address space layouts
November 7: Initial work on Kernel Setup Modules (32-bit paging, PAE paging and 64-bit Kernel Setup Modules)


2.2   October 2009

    
October 26 to October 31:
Added Framework for Kernel Setup Modules in the Stage 2 Manager
Added Transmeta CPU detection in the CPU Detection Module
October 21 to October 24:
Added brand string detection code for all AMD CPUs in the CPU Detection Module
October 19:
Added cache detection code for older AMD CPUs in the CPU Detection Module
Added brand string detection code for older Intel CPUs in the CPU Detection Module
Added cache detection code for older (80486 and Pentium) Intel CPUs in the CPU Detection Module
Added cache detection code for CUID 0x80000005/0x80000006 in the CPU Detection Module
October 18:
Added cache detection code for CUID 0x00000004 in the CPU Detection Module
Added cache detection code for CUID 0x00000002 in the CPU Detection Module
Added code to check if HPET is accessable when A20 is disabled in the Stage 2 Manager
Added code to handle "A20 disabled" correctly when BIOS data structures are converted to free pages in the Stage 2 Manager
October 17:
Updated code to add video modes to the video mode list so that video modes that require A20 to be enabled are ignored when A20 is disabled in the Common PC BIOS Module
Added code to check if tables are accessable when A20 is disabled for MP specification tables, ACPI tables and SMBIOS tables in the Common PC BIOS Module
Regression testing
Modified AP CPU stack handling (AP CPUs now use 1024 byte stacks instead of 4096 byte stacks) to increase the "maximum number of CPUs that can be started during boot before you run out of RAM below 4 GiB" limit so that the OS can handle 1048576 CPUs, in the Stage 2 Manager
October 12 to October 14:
Initial "Memory Testing Module" framework
Code to merge the "memory domain list" data into the PASM in the Stage 2 Manager
Code to convert BIOS data (e.g "ACPI reclaimable" areas) into free pages in the Stage 2 Manager
October 10 to October 11:
NUMA domain handling for memory ranges in the Stage 2 Manager
NUMA domain handling for CPUs in the Stage 2 Manager
October 7: ACPI SRAT table parsing in the Stage 2 Manager
October 6:
Added x2APIC support to the CPU Detection Module
Added ACPI parsing (for AP CPU detection) in the CPU Detection Module
October 5:
Added AMD CPU topology detection in the CPU Detection Module
Added MP Specification parsing (for AP CPU detection) in the CPU Detection Module
Added AP CPU startup code in the CPU Detection Module
Added Intel CPU topology detection in the CPU Detection Module
October 4:
Added "no CR4" detection in the CPU Detection Module
Implemented Cyrix 'tead' bug work-around in the CPU Detection Module
October 3:
Added generic code to parse CPUID feature flags and set corresponding OS feature flags in the CPU Detection Module
Updated NSC Geode GX2/AMD Geode GX and AMD Geode LX detection and configuration code in the CPU Detection Module
Added support for "kernel only" CPU features to code to display CPU descriptions in the CPU Detection Module
Defined "kernel only" CPU features
October 1 to October 2:
Many small changes in the CPU Detection Module
NSC Geode GX2/AMD Geode GX and AMD Geode LX detection and configuration code in the CPU Detection Module


2.3   September 2009

    
September 30:
FPU detection (for CPUs that don't support CPUID) in the CPU Detection Module
Vortex86 CPU detection in the CPU Detection Module
September 29:
Initial work on CPU detection for CPUs that don't support CPUID in the CPU Detection Module
Added code to display all details for all detected CPUs in the CPU Detection Module
CPU detection framework in the CPU Detection Module
September 27: Added code to do consistancy checks on MP Specification structures and add the MP Specification Data to the Boot Catalogue in the Common PC BIOS Module
September 26:
Added code to detect Hyper-V in the CPU Detection Module
Added code to detect Xen in the CPU Detection Module
Added code to detect Linux KVM in the CPU Detection Module
Added code to detect Qemu in the CPU Detection Module
Added code to detect Bochs in the CPU Detection Module
September 25:
Added code to detect VirtualBox in the CPU Detection Module
Added code to (attempt to) identify the motherboard and add the motherboard information to the Boot Catalogue, in the Common PC BIOS Module
September 24:
Added code to do consistancy checks on SMBIOS structures and add the SMBIOS Data to the Boot Catalogue in the Common PC BIOS Module
Improved virtual machine detection "hints" code (so that cache performance test is capable of using counters when RDTSC isn't supported) in the CPU Detection Module
September 23:
Framework for counter support in the Stage 2 Manager
Added HPET counter support in the Stage 2 Manager
Added PIT counter support in the Stage 2 Manager
Added "get counter details", "read counter" and "wait" functions in the Stage 2 Manager
September 22:
Added code to find a specified ACPI table in the Stage 2 Manager
HPET detection code in the Stage 2 Manager
September 20 to 21:
Added code to find BIOS tables (System Management BIOS, Multiprocess Specification tables and ACPI tables) in the Common PC BIOS Module
Added code to do consistancy checks on ACPI tables and add the ACPI Data to the Boot Catalogue in the Common PC BIOS Module
September 19:
Added virtual machine detection code for VirtualPC and VMware in the CPU Detection Module
Added support for executing code at CPL=3 in the Stage 2 Manager
Added support for exception hooks (for invalid opcode exception and general protection fault exceptions) in the Stage 2 Manager
September 18:
Added framework for "CPU Detection Modules" and code to start a CPU Detection Module in the Stage 2 Manager
Added GDT and IDT setup code (including basic interrupt handlers) in the Stage 2 Manager
Added critical error handling in the Default Video Boot Display Module and updated the "abort boot" code in the Stage 2 Manager
September 17:
Added Boot Log output functions to the Stage 2 Manager
Wrote the Stage 2 Display Module Interface Specification and the Stage 2 Manager Interface Specification
September 14 to September 16: Added code to display the character buffer in all video modes (4-bpp, 8-bpp, 15-bpp, 16-bpp, 24-bpp and 32-bpp) in the Default Video Boot Display Module
September 13: Added code to process the Boot Log and update a character buffer in the Default Video Boot Display Module
September 1 to September 12:
Improved Unicode support in the Default Video Boot Display Module
Improved Unicode support in the Common PC BIOS Module
Completed font data in the Default Video Boot Display Module


2.4   August 2009

    
August 23 to August 31: Wrote first half of font data in the Default Video Boot Display Module
August 21 to August 23: Code to scale font data in the Default Video Boot Display Module
August 16 to August 20:
Framework for Boot Display Modules in the Stage 2 Manager
Started Default Video Boot Display Module.
August 15: - Ported code to check the Boot Image and find files in the Boot Image, from the Common PC BIOS Module into the Stage 2 Manager
August 14:
Renamed the "Boot Manager" (it's now the "Stage 2 Manager") to avoid confusion between it and third part boot utilities
Ported code to initialize/precheck the Boot Catalogue, and all the code to handle the memory manager and the Boot Log, from the Common PC BIOS Module into the Boot Manager
August 12:
Added code to support the "Stage 1 Interface" in both the Boot Manager and the Common PC BIOS Module (still need to do "Function 0x0000000 - Hand-off" in the Common PC BIOS Module)
Added code to set the final default video mode for the OS, and start the Boot Manager in Common PC BIOS Module
August 9:
Added "Allocated for Boot Manager" page type to the page usage viewer in the interactive boot menu in the Common PC BIOS Module
Added code to find a Boot Manager in the Boot Image, do consistancy checks, allocate memory for it and copy it into the allocated memory; in the Common PC BIOS Module
Created "do nothing" Boot Manager code
Created include files to define CPU features, and to make it easier to create native executable files
August 3 to August 8: Wrote the 80x86 CPU Feature Flags Specification
August 1: Wrote an initial/experimental set of macros to be used for generating headers (to comply with BCOS Native Executable File Format Specification) and assist in writing executables


2.5   July 2009

    
July 29: Completed the BCOS Native Executable File Format Specification
July 28: Wrote most of the BCOS Native Executable File Format Specification
July 27: Wrote the BCOS Transition State 1 Specification
July 26:
Modified the PXE Boot Loader so that the first page of RAM is classed as the new "reclaimable BIOS data" (same as for CD-ROM Boot Loader); and so that the area of RAM used by PXE is also classed as the new "reclaimable BIOS data" (and therefore not considered "free RAM" until after later stages stop using real mode, in case the PXE ROM continues to use an ethernet card IRQ after it's been told to unload itself)
Modified the Floppy Boot Loader and Multiboot Boot Loader so that the first page of RAM is classed as the new "reclaimable BIOS data" (same as for CD-ROM Boot Loader)
Modified the CD-ROM Boot Loader so that the first page of RAM is classed as the new "reclaimable BIOS data" in the PASM, and adjusted the memory manager initialization so that only data used by the boot loader is allocated (e.g. from 0x00007C00 to the end of the ".bss"), rather than the entire area (e.g. from 0x00000000 to the end of the ".bss"); which gives the rest of the boot code 6 extra pages (24 KiB) of free RAM to play with
Added support for new "reclaimable BIOS data" Physical Address Space Map area type in the PASM detection code and Common PC BIOS Module
July 1 to July 25: Graphics file format research


2.6   June 2009

    
June 1 to June 30: Graphics file format research


2.7   May 2009

    
May 11 to May 31: Graphics file format research
May 3 to May 10:
Added code for "Change Default Videl Mode Preferences" menu option
Added code for "Test Current Default Video Mode" menu option
Initial code to find the best video mode to use as the default video mode, in the Common PC BIOS Module
May 2:
Support for forcing video modes to use established timings that are supported by the monitor, in the Common PC BIOS Module
Code to sort the Video Mode List in the Common PC BIOS Module


2.8   April 2009

    
April 30: Performance improvements in the code to generate a test pattern in the Common PC BIOS Module
April 29:
Several minor bugfixes in the test pattern code in the Common PC BIOS Module
Replaced code to generate a test pattern (2 vertical bars and 7 horizontal bars, where each bar shows shades from one colour to another) in the Common PC BIOS Module
Replaced error diffusion code (used for video mode test patterns) with full Floyd-Steinberg dithering in the Common PC BIOS Module
April 27: Added initial/experimental code to generate test patterns for any supported video mode (including "96 bits per pixel" error diffusion) in the Common PC BIOS Module
April 25 to April 26:
Implemented code to switch to a selected video mode in the interactive boot menu in the Common PC BIOS Module
Added "Test Other Video Modes Menu" to the interactive boot menu in the Common PC BIOS Module
April 22 to April 23: Rewrote object handling code in the Common PC BIOS Module - one generic function to draw all object types (menus, dialog boxes, etc) and one generic keyboard handler. Small performance improvement, much more powerful and a lot easier to use...
April 21:
Improved performance of memory management code in the Common PC BIOS Module (keep track of the lowest guaranteed tested page to avoid unnecessary retesting some pages that have already been tested)
Improved performance of memory management code in the Common PC BIOS Module (keep track of the highest possibly free page to avoid unnecessary searching of the Free Page Bitmap during allocations)
April 20:
Added "Boot Log Viewer" to the interactive boot menu in the Common PC BIOS Module
Added highlighting for text sent to the Boot Log where appropriate (for all current code)
Improved the "Physical Address Space Map Viewer" so it uses a vertical scroll bar if the number of entries/lines is large enough, in the interactive boot menu
Improved the "Page Usage Viewer" so it uses a vertical scroll bar in the interactive boot menu
Added support for vertical scroll bars to the interactive boot menu in the Common PC BIOS Module
April 19: Added "Physical Address Space Map Viewer" to the interactive boot menu in the Common PC BIOS Module
April 18: Added "Memory Statistics Viewer" to the interactive boot menu in the Common PC BIOS Module
April 17:
Improved the "Page Usage Viewer" in the interactive boot menu in the Common PC BIOS Module (split the "allocated" page type into many separate page types, so you can see what these pages are being used for)
Added code in all boot loaders to free memory that the boot loader was using
April 16: Added "Page Usage Viewer" to the interactive boot menu in the Common PC BIOS Module
April 15: Started the interactive boot menu in the Common PC BIOS Module
April 11 to 14: More work on generating the list of video modes in the Common PC BIOS Module
April 9:
Completed EDID parsing code in the Common PC BIOS Module
Added code to find horizontal frequency and pixel clock frequency from resolution and vertical field rate using GTF with default values
April 2: Continued EDID parsing code in the Common PC BIOS Module
April 1: Started EDID parsing code in the Common PC BIOS Module


2.9   March 2009

    
March 30:
Wrote initial code to generate CRTC timing parameters using GTF in the Common PC BIOS Module (still needs some polishing)
Wrote code to get the square root of a 32-bit integer (without using the FPU) in the Common PC BIOS Module
March 29: Started rewriting video mode detection code in the Common PC BIOS Module (still needs some polishing)
March 28: Completely rewrote EDID detection in the Common PC BIOS Module, and added support for overriding information from the monitor using a file from the Boot Image (either explicitly, or automatically)
March 27: Added code to find files (including permission checks) in the Boot Image in the Common PC BIOS Module
March 26:
Wrote the BCOS "Get EDID" Utility Documentation
Wrote utility to create a normal file from EDID stored on contiguous sectors (direct from a floppy disk or from a floppy image)
Completed bootable utility to get the EDID information and store it on the same floppy it booted from
March 25:
Started writing a utility (as a bootable floppy image) to get the EDID information and store it on the same floppy it booted from.
Wrote the BCOS EDID File Format Specification
Wrote the BCOS "Make Boot Image" Utility Documentation
Added code in the Common PC BIOS Module to test the internal structure of the Boot Image, and found/fixed a few minor bugs in the utility that creates boot images
March 23: Wrote remainder of utility to create boot images
March 21:
Deleted assembly source code to create the installation boot image, and started writing a utility to create boot images. The original idea (use NASM and "incbin" to create boot images) can't preserve timestamps on binaries being included in the boot image.
Wrote the BCOS Compression Utility Documentation
Wrote the BCOS "Make Floppy" Utility Documentation
March 19:
Minor changes to the BCOS Boot Image File Format Specification
Completed writing the BCOS Native File System Attributes Application Note.
March 18: Completed writing the BCOS Compressed Native File Format Specification.
March 15:
Added code to (recursively!) decompress the Boot Image in the Common PC BIOS Module.
Minor tweaks to improve Boot Catalogue code in the Common PC BIOS Module
March 12:
Added code to return Boot Catalouge to a consistant state in the Common PC BIOS Module
Added full checksum handling in "squish" file compression/decompression utility
Modified all boot loaders so that they accept compressed files instead of boot images
March 11: Wrote most of "squish" file compression (and decompression) utility. Only missing checksum handling.
March 9: Started specification for native compressed file format
March 8: Implemented code to handle accessed and modified flags for boot variables and the "original Boot Script is obsolete" flag in the Common PC BIOS Module
March 7:
Implemented support for the IgnoreEDID boot variable in the Common PC BIOS Module
Increased size of variable name length in Boot Variable Workspace documentation and in the associated code in the Common PC BIOS Module
Changed the Common PC BIOS Module to use the new code to reallocate memory instead of doing the reallocation itself, including:
The code to add a byte to the Boot Log
The code to get space for a new boot variable in the Boot Variable Workspace
Rewrote code to reallocate memory in the Common PC BIOS Module to change input parameters (bytes not pages) and make sure end of new area is filled with zeros
March 1: Added code to reallocate memory in the Common PC BIOS Module to improve efficiency


2.10   February 2009

    
February 28: Code to delete boot variables in the Boot Variable Workspace in the Common PC BIOS Module (still missing handling for accessed and modified flags)
February 26:
Initial code to add boot variables to the Boot Variable Workspace in the Common PC BIOS Module (still missing "delete", and handling for accessed and modified flags)
Code to find boot variables in the Boot Variable Workspace in the Common PC BIOS Module
February 24:
Improved Unicode support in the Boot Script parsing and display output routines in the Common PC BIOS Module
February 23:
Completed code in Common PC BIOS Module needed to parse the Boot Script
Wrote initial documentation in BCOS Boot Scripts
February 21: Rewrote most of previous code in Common PC BIOS Module needed to parse the Boot Script (added Unicode support)
February 16: Wrote most of the code in Common PC BIOS Module needed to parse the Boot Script
February 15: Added documentation for the Boot Script Workspace Entry in the BCOS Boot Catalogue Specification
February 12:
Changed documentation for the Selected Video Mode Entry and Default Video Mode List Entry in the BCOS Boot Catalogue Specification
Removed all code to generate the Default Video Mode List (due to design changes)
February 11: Added code in all boot loaders to disable RAM tests if all RAM testing is disabled in the FRL
February 4: Added code to generate the Default Video Mode List for VBE video modes
February 1: Added code to generate the Default Video Mode List for standard VGA only


2.11   January 2009

    
January 31:
Added documentation for EDID and default video mode to the BCOS Boot Catalogue Specification
Implemented code to get EDID from first monitor in Common PC BIOS Module
Memory management and Boot Log code added to Common PC BIOS Module
January 27:
Implemented code to check if trusted areas of RAM are known to be faulty in all current Boot Loaders. If the Boot Loader (or code that loaded the Boot Loader in some cases) has relied on any RAM that is known to be faulty, then nothing the Boot Loader does can be assumed to be correct, and boot is aborted.
January 26:
Implemented code to create the Boot Catalogue in all current Boot Loaders. This means all Boot Loaders comply with the Common PC BIOS Module Transition State Specification now.
Removed code to test if the number of set bits in the Faulty Page Bitmap matches the "faultyPages" variable from Boot Loaders. The "faultyPages" variable only counts faulty pages of usable RAM, while the Faulty Page Bitmap can include pages that aren't currently considered usable (in certain cases the number of set bits in the Faulty Page Bitmap should not match the "faultyPages" variable, and this code complained that something was wrong when everything is right)
January 25:
Fixed bug in code in Boot Loaders that test pages for faulty RAM (which made it look like there were problems with the memory management code when there wasn't)
Implemented code in Boot Loaders to test if the number of set bits in the Faulty Page Bitmap matches the "faultyPages" variable, and to test if the number of set bits in the Free Page Bitmap matches the "freePages" variable (mostly to detect corruption in either of these bitmaps caused by bugs in memory management)
Implemented code in Boot Loaders to test pages for faults when pages are allocated. Noticed problems with Boot Loader memory management while testing support for faulty page detection.
Fixed memory Boot Log management problems in all current Boot Loaders
January 25: Started this log


3   Previous Work

Some work was done before this log was started (before the 25th of January, 2009). This work mostly includes utilities to handle building the project, the initial work on the boot loaders (for booting from floppy, CD-ROM, PXE/network and Multiboot), code to create CD images, a utility to create floppy images and various pieces of documentation and specifications.


Generated on Sun Nov 8 03:50:51 2009