diff --git a/articles/Changelog.html b/articles/Changelog.html index d0f636223..4c0b4edb7 100644 --- a/articles/Changelog.html +++ b/articles/Changelog.html @@ -5,9 +5,9 @@ - Devkit changelog + DevKit changelog - + @@ -188,7 +188,7 @@
-

Devkit changelog

+

DevKit changelog

c5c087c697d106348adbcff86d5d43331500e648 (update then merged in)

Features

@@ -198,6 +198,7 @@

Features

Breaking changes

Plugs are now included via a nuget package, to update cosmos past this commit you need to add the Cosmos.Plugs package to your kernel project. Don't forget to tick the Include prerelease checkbox and to set the package origin to All!

+

Last updated on 4 September 2023.

diff --git a/articles/Compiler/il2cpu.html b/articles/Compiler/il2cpu.html index 9a4800ca9..136ada914 100644 --- a/articles/Compiler/il2cpu.html +++ b/articles/Compiler/il2cpu.html @@ -190,12 +190,13 @@

IL2CPU

-

This is one of the most important pieces of code in Cosmos. It's an AOT (Ahead-Of-Time) compiler.

-

When you compile your C# (or any .NET language) program, it is compiled into CIL (common intermediate language). The CIL is then interpreted and executed by a virtual machine when you open your exe.

-

Cosmos is written in C# and Visual Studio compiles it into CIL as always. But a PC does not come with an interpreter for the CIL code. And writing a virtual machine for running an operating system is not always ideal.

-

This is where IL2CPU comes in. IL2CPU takes the CIL code and translates it to processor opcodes. Currently, only x86 opcodes are available at the moment. However, more architectures are planned for the future (ARM, PowerPC, x86-64).

-

At this point, IL2CPU performs some more magic before finally converting the entire file into a bootable binary file, which can be loaded by a bootloader on any system (Cosmos uses the Limine bootloader).

+

IL2CPU is one of the most important pieces of code in Cosmos. It's an AOT (Ahead-Of-Time) compiler.

+

When you compile your C# (or any other .NET language) program, it is compiled into CIL (common intermediate language). The CIL is then interpreted and executed by a virtual machine when you open your .exe.

+

Cosmos is written in C# and Visual Studio compiles it into CIL like usual. But a PC does not come with an interpreter for the CIL code, and writing a virtual machine for running an operating system is not ideal.

+

This is where IL2CPU comes in. IL2CPU takes the CIL code and translates it to processor op-codes. Currently, only x86 opcodes are available at the moment. However, more architectures are planned for the future (ARM, PowerPC, x86-64).

+

At this point, IL2CPU performs some more magic before finally converting the entire file into a bootable binary file, which can be loaded by a bootloader on any system (Cosmos uses the Limine bootloader.

As you might think, IL2CPU is a fundamental part of the development of Cosmos. IL2CPU is responsible for the final output, which is why most optimizations added are for IL2CPU.

+

Last updated on 24 March 2024.

diff --git a/articles/Debugger/DebugCommands.html b/articles/Debugger/DebugCommands.html index 254fe3748..9a688eac4 100644 --- a/articles/Debugger/DebugCommands.html +++ b/articles/Debugger/DebugCommands.html @@ -244,6 +244,7 @@

VS to DS

Debug channel

We support channels, which are prefixed with anything prefixed with 192 and up. 192 is used for a debug view.

+

Last updated on 12 February 2020.

diff --git a/articles/GettingStarted.html b/articles/GettingStarted.html index fea20fa7d..a1c42c8ae 100644 --- a/articles/GettingStarted.html +++ b/articles/GettingStarted.html @@ -193,23 +193,16 @@

Getting Started

Introducing Cosmos

Cosmos (C# Open Source Managed Operating System) is an operating system development kit which uses Visual Studio as its development environment. -Despite C# in the name any .NET based language can be used including VB.NET, +Despite C# in the name, any .NET based language can be used, including VB.NET, Fortran, Delphi Prism, IronPython, F# and more. Cosmos itself and the kernel routines are primarily written in C#, and thus the Cosmos name. Besides that, -NOSMOS (.NET Open Source Managed Operating System) sounds stupid.

-

Cosmos is not an operating system in the traditional sense, but instead it is -an "Operating System Kit", or as I like to say "Operating System Legos". -Cosmos lets you create operating systems just as Visual Studio and C# normally -let you create applications. Most users can write and boot their own operating -system in just a few minutes, all using Visual Studio. You can debug your operating system directly from Visual -Studio using breakpoints.

-

Cosmos is available in two distributions, the developer kit (dev kit), and the user kit. The dev kit is designed for users who want to work on Cosmos itself. -The user kit is designed for those who are interested in building their own -operating system and doing some Cosmos work. The dev kit might be thought of -as the Cosmos SDK. Most users should start off with the user kit as it is not -so overwhelming like the dev kit. This article focuses on the user kit.

+NOSMOS (.NET Open Source Managed Operating System) sounds silly.

+

Cosmos diverts from traditional operating systems because it is not an operating system in the conventional sense; rather, it is an "Operating System Kit," similar to "Operating System Legos". With Cosmos, you have the flexibility to construct operating systems just as how Visual Studio and C# help you develop applications. Using Visual Studio, most users can swiftly write and boot their own operating system within minutes. Additionally, debugging your operating system directly from Visual Studio is a feature, allowing for efficient troubleshooting through breakpoints.

+

Cosmos is available in two distributions, the developer kit (abbr. DevKit), and the user kit. +The DevKit was originally designed for those who want to work on Cosmos's core features, but now has superceded the inferior user kit due to having much more technical ability. +The User Kit was designed for those who are interested in building their own operating system and doing some Cosmos work. Since the User Kit is so heavily outdated, it is often recommended to download the DevKit when installing. The documentation will cover both.

Writing your first Operating System

-

Create a new project as you would any C# project, but select Cosmos as the project type.

+

Once you have installed Cosmos (see other docs), you can create a new project as you would any C# project, but select Cosmos as the project type.

A starter project will be created. It looks very much like a standard C# console application.

@@ -218,31 +211,31 @@

Writing your first Operating System console window, you will see the following:

This is your operating system running in VMware Player! Cosmos can of course -also be booted in VMware Workstation, Hyper-V, Virtual PC, Bochs, or on real -hardware. But by default Cosmos uses VMware Player because it is both free, +also be booted in VMware Workstation, VirtualBox, Bochs, or on real +hardware. But by default, Cosmos uses VMware Player because it is both free, and reliable. Cosmos can even debug in Visual Studio, even when running on another machine.

Integrated Debugging

Debugging is a major issue with operating system development. The Cosmos team was not content enough to simply conquer building and deployment, we want to -make developing operating system as easy as developing Windows applications. +make developing operating systems as easy as developing Windows applications. Debugging a Cosmos based operating system should feel very familiar to you. Lets modify our project a little bit to show the effect, and set a breakpoint. -Note that the debugger only works in Visual Studio, and not Linux

+Note that the debugger only works in Visual Studio, and not Linux!

Now run the project again.

-

Note that the execution stopped at "One"? That is becuase in Visual Studio our +

Notice how the execution stopped at "One"? That is becuase in Visual Studio our project has stopped on a breakpoint. Simply press F5 to continue just as you would in a normal application!

-

In addition to breakpoints Cosmos also supports step into (F11) as well. Trace +

In addition to breakpoints, Cosmos also supports step into (F11) as well. Trace over (F10) is not supported yet.

Debugger Communication

The debugger uses the serial port to communicate. Because of this, debugging -only works wtih virtualization environments that support serial ports such as +only works within virtualization environments that support serial ports, such as VMware. QEMU supports serial ports as well, but its serial port implementation is seriously broken on Windows and makes debugging impossible using QEMU. To -debug on real hardware, you must use a physical serial cable. In the future +debug on real hardware, you must use a physical serial cable. In the future, Cosmos will also support debugging over Ethernet.

Extra Debugging

Cosmos supports some explicit methods that can be used to communicate with the @@ -266,7 +259,7 @@

Code Based Breakpoints

Both functions will produce the same result.

Debug Output

-

Debug strings can be output to the debug window of the host. Because Cosmos +

Debug strings can be outputted to the debug window of the host. Because Cosmos does not support watches yet, this functionality can be very useful for watching variable values and for performing tracing without breakpoints.

mDebugger.Send("Hello from Cosmos!");
@@ -276,15 +269,16 @@ 

Debug Output

What's the catch?

There really is no catch. Everything we've shown here is functioning as seen. -No mockups were used. However we still have a lot of work to go. Items of -interest that are on our current task list include threads and networking. +No mockups were used. However, we still have a lot of work to do. Items of +interest that are on our current task list include multithreading and x64 systems. We have prototypes and experiments for each, but none have been rolled into the mainline Cosmos development as of yet.

Obtaining Cosmos

+

Last updated on 24 March 2024.

diff --git a/articles/Installation/DevKit.html b/articles/Installation/DevKit.html index 83449ecc8..6ea056e4d 100644 --- a/articles/Installation/DevKit.html +++ b/articles/Installation/DevKit.html @@ -5,9 +5,9 @@ - Dev Kit Installation + DevKit Installation - + @@ -188,18 +188,18 @@
-

Dev Kit Installation

+

DevKit Installation

Windows

Prerequisites

    -
  • (Free) source code of Development Kit from Cosmos on GitHub +
  • Source code of Development Kit from Cosmos on GitHub
    • You must clone the repository using Git. For a detailed walkthrough, see here.
  • -
  • (Free) Visual Studio 2022 Community
  • -
  • (Free) InnoSetup +
  • Visual Studio 2022 Community
  • +
  • InnoSetup
    • This is required to build the setup kit which is used to build and install the Visual Studio integration libaries for Cosmos.
    • During install it will ask you about optional components to install. Be sure you check "Install Inno Setup Preprocessor".
    • @@ -208,6 +208,7 @@

      Prerequisites

    Installation

      +
    • Git clone the current source code of Cosmos or download the source code directly from GitHub. If you downlaod the source code, you will need to rename the folder to simply 'Cosmos'.
    • Look in the downloaded sources and run install-VS2022.bat with admin privileges (UAC will ask for permission), needed for install in system directories.
    • When the installation is complete, Visual Studio will automatically open and you may begin programming with your new, modified copy of Cosmos.
    @@ -221,35 +222,36 @@

    Prerequisites

  • QEMU or any other virtual machine. See Running for more information.

Installation

-

Run make to build Cosmos. Cosmos will clone all the required repos, build itself, and install it and it's nuget packages to the system automatically.

+

Git cline the current source code of Cosmos. +Run make to build Cosmos. Cosmos will clone all the required repos, build itself, and install it and its nuget packages to the system automatically.

MacOS (Apple Silicon/Intel)

-

There is currently hard to build on Apple Silicon Devices. So are going to build DevKit on Docker (Virtual Environment Service).

+

It is currently difficult to build Cosmos on Apple Silicon Devices. So, we are going to build DevKit on Docker (Virtual Environment Service).

Prerequisites

    -
  • Docker(brew cask install docker)
  • +
  • Docker (brew cask install docker)
  • QEMU or any other virtual machine. See Running for more information.

Installation

-

First we need to set directory to the path of Cosmos source directory and build the Dockerfile:

+

First, we need to set directory to the path of Cosmos source directory and build the Dockerfile:

cd /path/to/Cosmos/
 docker build -t cosmos .
 

This will take a while. If there is no error, you successfully installed Cosmos on a Virtual Environment!

-

notes / FAQ

-

custom cosmos repos

-

if you are using custom cosmos repos you will need to clone them all manually as the installer script will pull from https://github.com/CosmosOS/

+

Notes / FAQ

+

Custom Cosmos Repos

+

If you are using custom Cosmos repos, you will need to clone them all manually, as the installer script will only pull from https://github.com/CosmosOS/

A tree diagram of the source should look like the following:

-

get stuck pulling the git repos

-

check if git is installed and in your path as we use git to pull the repos

-

i just updated and my project is sill using the old version

-

you may need to clear you nuget cache try dotnet clean to clear the project level cache

-

the project templates are not showing in visual studio

-

if you have more then 1 version of visual studio installed this can bug this follow "dotnet Project Templates" should fix it

+

I get stuck pulling the git repos!

+

Check if Git is installed on your machine and within your path. We use Git to pull the repos from GitHub.

+

I just updated my DevKit and my project is still using the older version!

+

Although Cosmos typically uninstalls previous kits before installing a new one; it is possible that your project can reference an older-version. In the rare case this does occur, you may need to clear the NuGet cache. Try running dotnet clean to clear the project-level cache.

+

The project templates are not showing in Visual Studio!

+

If you have more than 1 version of Visual Studio (such as both 2022 and 2019), this bug can occur. Try running dotnet Project Templates to get them back.

dotnet Project Templates

-

If you are using linux or prefer not using Visual Studio for your projects, you can install the dotnet project template using dotnet new --install ./source/templates/csharp/ assuming you are currently in the Cosmos base directory. -After installing the template use dotnet new cosmosCSKernel -n {name} to create a new Cosmos Kernel project. +

If you are using Linux, or prefer not using Visual Studio for your projects, you can install the dotnet project template using dotnet new --install ./source/templates/csharp/ assuming you are currently in the Cosmos base directory. After installing the template, use dotnet new cosmosCSKernel -n {name} to create a new Cosmos Kernel project. The dotnet template can be removed at a later time using dotnet new --uninstall ./source/templates/csharp/.

+

Last updated on 24 March 2024.

diff --git a/articles/Installation/Running.html b/articles/Installation/Running.html index 063a9f033..948e93b8e 100644 --- a/articles/Installation/Running.html +++ b/articles/Installation/Running.html @@ -190,23 +190,23 @@

Running

-

Cosmos supports running on any Intel x86 environment. However for debugging +

Cosmos supports running on any Intel x86 environment. However, for debugging and ease of use, many virtual and physical setups have integrated support. If you do not see your environment, this does not mean Cosmos will not work. You -can simply fall back to ISO which should work with any environment.

+can simply fall back to ISO, which should work with any environment.

ISO

The ISO option creates an ISO image of the Cosmos output. This ISO file can be mounted and booted by most virtualization technologies. In addition, a physical optical disk can be burned and used to boot physical hardware.

Linux/Posix

-

DISCLAIMER: This article assumes that you are using a debian based operating system

+

DISCLAIMER: This article assumes that you are using a Debian-based operating system!

QEMU

-

Here you can use a generic run file, you can run it by using sh run.sh -i <ISO> -m <memory size> -h <hdd image>. -It has to be at the root directory of the project

+

Here you can use a generic run file, you can run it by using sh run.sh -i <ISO> -m <memory size> -h <hdd image>. It has to be at the root directory of the project.

QEMU is required and can be installed with apt-get install qemu-system.

-

To create an hdd image, you have to convert this .vmdk file to a .img wich can then be used by QEMU using the following command +

To create an HDD image, you have to convert this .vmdk file to a .img, which can then be used by QEMU using the following command qemu-img convert -f vmdk -O raw Filesystem.vmdk cosmos.img

-

run.sh:

+

Here is the run.sh: +run.sh:

#!/bin/bash
 
 helpFunction()
@@ -242,8 +242,9 @@ 

QEMU

# Emulate the ISO qemu-system-x86_64 -boot d -cdrom $ISO -m $MEMORY_SIZE -hda $HDD_IMAGE
-

Virtualbox

-

Create a virtual machine and use this .vmdk as HDD image

+

VirtualBox

+

Create a virtual machine and use this .vmdk as your HDD image. +If you are utilizing audio, we recommend VirtualBox for the ability to use their AC97 driver.

Windows

VMWare

WMWare Workstation and VMWare Player are the preferred testing environments @@ -254,24 +255,26 @@

VMWare

VMWare Player

VMWare Player can be downloaded here.

VMWare Workstation

-

VMWare Workstation can be downloaded for free trial here.

+

VMWare Workstation (paid version) can be downloaded for a free trial here.

QEMU

-

Not officially supported at this time, but can be done. Just use the ISO option above with debugging turned off.

+

QEMU is not officially supported for Cosmos at this time, but can be used. Just use the ISO option above with debugging turned off. +If you want to use graphical mode in QEMU (Canvas or SVGA-II), ensure that VBE multiboot is enabled in your project settings of Cosmos.

QEMU can be downloaded here

Bochs

-

Bochs is officially supported.

+

Bochs is officially supported for Cosmos. As Bochs is a full emulation software, results vary and are often times slower than other virtualization platforms.

Bochs can be downloaded here

PXE

For PXE, no special software is required. Only an ethernet connection to your router. However, if you have a computer that does not support network booting, or if you must perform the action over WiFi, you may need to look at a PXE chainloader such as gPXE. To run your Cosmos kernel in PXE you need to follow these steps:

-

Step #1: disable Cosmos Remote Debugger, activate PXE and compilation in bin format. +

Step #1: Disable Cosmos Remote Debugger, activate PXE and compile in bin format. Go to Properties and copy these settings:

image

Boot the machine and connect it via Ethernet and will show this screen:

image

-

Wait and your os will boot up.

-

Hyper-V

+

Wait and your OS will boot up.

+

Hyper-V, VirtualPC

Not supported at this time.

+

Last updated on 24 March 2024.

diff --git a/articles/Installation/UserKit.html b/articles/Installation/UserKit.html index 18e1fbdc3..76901a632 100644 --- a/articles/Installation/UserKit.html +++ b/articles/Installation/UserKit.html @@ -5,9 +5,9 @@ - Installation + User Kit Installation - + @@ -188,9 +188,9 @@
-

Installation

+

User Kit Installation

-

for DevKit / linux see DevKit

+

for DevKit / running on Linux see DevKit

Prerequisites

  • Visual Studio 2022Download
  • @@ -200,9 +200,8 @@

    Prerequisites

  • Microsoft Visual C++ 2010 Redistributable - Download

Installing Cosmos

-

First, you need to choose between the User Kit and the Dev Kit. It is recommended that new users start with the User Kit but only move later to the Dev Kit if you need the latest features and want to contribute back to the main project. -The Dev Kit is the live source against which the Cosmos Team develops directly. The Dev Kit has the latest and greatest features, but at various times has known issues, and sometimes may not even build. Thus to use the Dev Kit be sure to join our support channels and inquire about the current status before using the Dev Kit or updating it.

-

The User Kit is a snapshot stable version of Cosmos including a premade installer. The UserKit however is often quite a bit out of date compared to the DevKit and is only occasionally updated. The User Kit is a great easy way to get familiar with Cosmos, but active developers should transition to the Dev Kit after becoming very familiar with the UserKit, and expect some bugs here and there.

+

First, you need to choose between the User Kit and the Dev Kit. It is recommended that any user start with the Dev Kit now due to the technical advancement of it - the User Kit is almost 2 years old in comparison! The DevKit is the live source code which the Cosmos Team develops directly, and as such, it has the latest and greatest features, but at various times has known issues, and sometimes may not even build. Thus, to use the DevKit, be sure to join our support channels and inquire about the current status before using the DevKit or updating it.

+

The User Kit is a snapshot stable version of Cosmos including a premade installer. The UserKit however is often very out of date compared to the DevKit and is only occasionally updated. The User Kit is a great easy way to get familiar with Cosmos, but active developers should transition to the DevKit after becoming very familiar with the UserKit, and expect some bugs here and there.

User Kit

  1. Download the latest release of Cosmos (download the exe file)
  2. @@ -211,6 +210,7 @@

    User Kit

  3. Wait for the install to progress. Tip: At the end the installer may look like it has stalled, but it is still doing something in the background. WAIT for the "Finish" button to become available.
  4. Cosmos should now be installed. Follow other tutorials to find out how to create your first OS.
+

Last updated on 24 March 2024.

diff --git a/articles/Kernel/Audio.html b/articles/Kernel/Audio.html index ae4ca5703..968014084 100644 --- a/articles/Kernel/Audio.html +++ b/articles/Kernel/Audio.html @@ -204,7 +204,7 @@

The Cosmos Audio Infrastructure (CA }; audioManager.Enable();

-

The sampleAudioBytes are the bytes of a ttf audio file. You can read it from VFS or using ManifestResourceStream

+

The sampleAudioBytes are the bytes of a .WAV audio file. You can read it from VFS or using ManifestResourceStream.

Audio Streams

An AudioStream is an object that can provide sample data to audio buffers. By design, the base AudioStream class does not have any length or position properties, as audio streams may be infinite - for example, an output stream from a microphone, or an audio mixer. All seekable streams inherit from the class SeekableAudioStream, which provides functionality for accessing the position/length properties and allows methods to determine whether they accept infinite and finite streams, or only finite streams.

Reading audio streams from memory

@@ -258,6 +258,7 @@

Interfacing with hardware

+

Last updated on 28 July 2023.

diff --git a/articles/Kernel/CGS.html b/articles/Kernel/CGS.html index eda69c25b..f1b109142 100644 --- a/articles/Kernel/CGS.html +++ b/articles/Kernel/CGS.html @@ -190,15 +190,27 @@

Introduction

-

The Cosmos Graphic Subsystem (CGS from now on) is based on the abstraction of Canvas that is an empty space in which the user of CGS can draw its content. CGS is not a widget toolkit as Winforms or Gnome / GTK but is thought to be more lower level and it will be the basic in which widget toolkits will be implemented. CGS hides the graphics driver (so far VGA, VBE and SVGAII) used and it is thought to be the universal way to draw on the screen in Cosmos.

+

The Cosmos Graphic Subsystem (abbr. CGS) is based on the abstraction of Canvas that is an empty space in which the user of CGS can draw its content. CGS is not a widget toolkit like Winforms or Gnome / GTK, but is thought to be more lower level and is the basic foundation in which widget toolkits will be implemented. CGS hides the graphics driver (so far VGA, VBE and SVGAII) used and it is thought to be the universal way to draw on the screen in Cosmos.

FullScreenCanvas

The FullScreenCanvas provides two methods to get a canvas instance for the screen. It automatically chooses the best available driver to use.

-

public static Canvas GetFullScreenCanvas(Mode mode): gets the instance of Canvas representing the complete screen in the specified mode

-

public static Canvas GetFullScreenCanvas(): gets the instance of Canvas representing the complete screen in the best driver available on your platform

+

public static Canvas GetFullScreenCanvas(Mode mode): gets the instance of Canvas representing the complete screen in the specified mode. Some modes that are currently available are as follows: (depends on the backend used)

+
320x240, 32
+640x480, 32
+800x600, 32
+1024x768, 32
+1280x720, 32
+1280x768, 32
+1280x1024, 32
+1366x768, 32
+1680x1050, 32
+1920x1080, 32
+1920x1200, 32
+
+

public static Canvas GetFullScreenCanvas(): gets the instance of Canvas representing the complete screen in the best driver available on your platform.

Canvas

List of Properties of the Canvas class

-

Mode: get / set the mode of the video card to mode. It throws if the selected mode is not supported by the video card -DefaultGraphicMode: default graphic mode this will change based on the underlying hardware +

Mode: get / set the mode of the video card to mode. It throws if the selected mode is not supported by the video card.
+DefaultGraphicMode: default graphic mode this will change based on the underlying hardware
AvailableModes: list of the available modes supported this will change based on the underlying hardware

List of Methods of the Canvas class

Clear(Color color) clear the entire Canvas using the specified color as background

@@ -209,7 +221,7 @@

List of Methods of the Canvas class

void DrawString(String string, Font font, Brush brush, int x, int y) draws a string with the specified font and brush at the specified x and y coordinates

void Display() is only required when using a double buffered driver, swaps the 2 buffers which causes all changes to be displayed

Really simple right?

-

A working example (devkit only!)

+

A working example (DevKit only!)

using System;
 using Sys = Cosmos.System;
 using Cosmos.System.Graphics;
@@ -237,7 +249,7 @@ 

A working example (devkit only!)

243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 10, 66, 148, 255, 10, 66, 148, 255, 10, 66, 148, 255, 10, 66, 148, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, 0, 255, 243, 255, }, ColorDepth.ColorDepth32); - + protected override void BeforeRun() { // If all works correctly you should not really see this :-) @@ -295,19 +307,21 @@

A working example (devkit only!)

Limitations of the current implementation

    -
  1. Only 32 bit color depth is actually supported, the API provides methods to set a resolution with 24, 16, 8 and 4 bit but the low level Bochs driver has not yet implemented them. -If you use SVGAIICanvas, you can use 24 bit Color depth and if you use VGACanvas there are 3 modes: 320x200x8, 640x480x4 and 720x480x4.

    +
  2. Only 32-bit color depth is actually supported. The API provides methods to set a resolution with 24, 16, 8 and 4 bit but the low level Bochs driver has not yet implemented them. +If you use SVGAIICanvas, you can use 24 bit Color depth, and if you use VGACanvas there are 3 modes: 320x200x8, 640x480x4 and 720x480x4.

  3. In addition, some other nice things could be implemented:

      -
    • Plugging System.Drawing functions for easier manipulation of colors
    • +
    • Plugging System.Drawing functions for easier manipulation of colors.
    • +
    • Plugging of System.Drawing functions for easier implementation of image conversion.
  4. -
  5. CGS interacts badly with the uncaught exceptions and Kernel.Stop method: the screen will freeze without displaying any error message whatsoever. You must use the Sys.Power.Shutdown() function to properly shut down your computer.

    +
  6. CGS interacts badly with uncaught exceptions and the Kernel.Stop method: the screen will freeze without displaying any error message whatsoever. You must use the Sys.Power.Shutdown() function to properly shut down your computer.

Old examples

-

In the web there are a lot of tutorials explaining how to use graphics in Cosmos, but most of them are outdated. Just remember that the new Mouse class is Sys.MouseManager and Pen has been replaced with Color.

+

On the internet, there have been a lot of tutorials explaining how to use graphics in Cosmos, but most of them are outdated. Just remember that the new Mouse class is Sys.MouseManager and Pen has been replaced with Color.

+

Last updated on 28 July 2023.

diff --git a/articles/Kernel/Levels.html b/articles/Kernel/Levels.html index 87da42d4e..7fce63de8 100644 --- a/articles/Kernel/Levels.html +++ b/articles/Kernel/Levels.html @@ -190,7 +190,7 @@

Levels

-

Warning This article is for a older version of Cosmos and it doesn't work for current version.

+

Warning: This article is for a older version of Cosmos, and as such, does not represent the current version included in the DevKit.

The security model of Cosmos will evolve and mature as Cosmos does, however the base model is presented here.

Goals

@@ -354,6 +354,7 @@

Network

1 Ethernet 2 TCP/IP 3 Application

+

Last updated on 28 July 2023.

diff --git a/articles/Kernel/ManifestResouceStream.html b/articles/Kernel/ManifestResouceStream.html index bb465bda0..920f370ff 100644 --- a/articles/Kernel/ManifestResouceStream.html +++ b/articles/Kernel/ManifestResouceStream.html @@ -190,21 +190,25 @@

Manifest Resource Streams

-

Manifest Resource Streams allow you to include data from the files as byte arrays in your code. An example of its use is in the ZMachine Demo

+

Manifest Resource Streams allow you to include data from files as byte arrays in your code. An example of its use is in the ZMachine Demo.

How to use

    -
  1. Set for the the file you want to use Build As: Embedded Resource using the File Properties window in VS. +
  2. Set for the file you want to use Build As: Embedded Resource using the File Properties window in VS. image
  3. -
  4. In the code reference the file using the following format (a static byte array with the attribute):
  5. +
  6. In the code, reference the file using the following format (a static byte array with the attribute):
[ManifestResourceStream(ResourceName = "{project_name}.{path}.{to}.{filename_with_extension}")] 
 static byte[] file;
 
-

The field must be static but the name of the field (file) can be changed. You will also need to add using IL2CPU.API.Attribs; to the code. -For example, if the project is called Kernel and the file is Data\Text.txt, then ResourceName = "Kernel.Data.Text.txt".

+

The field must be static but the name of the field (file) can be changed. You will also need to add using IL2CPU.API.Attribs; to the code.

+

For example, if the project is called Kernel and the file is Data\Text.txt, then ResourceName = "Kernel.Data.Text.txt".

  1. To access the data simply read from the byte array defined.
+
string fileContent = System.Text.Encoding.UTF8.GetString(file); //convert the byte array to string (assuming text data)
+Console.WriteLine(fileContent); //write it out
+
+

Last updated on 28 July 2023.

diff --git a/articles/Kernel/MemoryManagement.html b/articles/Kernel/MemoryManagement.html index 7fb030276..123ffb297 100644 --- a/articles/Kernel/MemoryManagement.html +++ b/articles/Kernel/MemoryManagement.html @@ -196,14 +196,14 @@

Memory Management in Cosmos

Memory Allocation

Usage

Allocation

-

Usually users should be allocating memory indirectly by using new or other standard methods provided by .Net to allocate new objects. In the cases, where you want to allocate a managed block of memory, which is not part of a certain .Net type, a ManagedMemoryBlock or byte[] should suffice. If this is not sufficient, one can use uint GCImplementation.AllocNewObject(uint aSize) to allocate a region of aSize bytes. The returned uint contains the memory address and can be converted to pointer if required.

-

One can manually free an object using Heap.Free(void* aPtr) or GCImplementation.Free(object aObj). It is recommended to not manually free .Net objects unless you know what you are doing since Cosmos does not always recognise when it is accessing already freed memory and this can lead to very weird bugs.

+

Usually, users should be allocating memory indirectly by using new or other standard methods provided by .Net to allocate new objects. In the cases, where you want to allocate a managed block of memory, which is not part of a certain .NET type, a ManagedMemoryBlock or byte[] should suffice. If this is not sufficient, one can use uint GCImplementation.AllocNewObject(uint aSize) to allocate a region of aSize bytes. The returned uint contains the memory address and can be converted to pointer if required.

+

One can manually free an object using Heap.Free(void* aPtr) or GCImplementation.Free(object aObj). It is recommended to not manually free .NET objects unless you know what you are doing, since Cosmos does not always recognise when it is accessing already freed memory. This can lead to very weird bugs.

Information

Cosmos provides a few methods to get information about the heap status:

Internals

@@ -232,6 +232,7 @@

Automatically Trigger Garbage

When RAT.MinFreePages is set to a positive value and the number of free pages (as tracked by RAT.FreePageCount) drops below this value, on page allocation Heap.Collect will automatically be called. Each time this happens the value in RAT.GCTriggered is incremented by one.

Internals

The garbage collector uses the tracing approach, which means that during collection a graph of all reachable objects is created and all non-discovered objects are freed. The garbage collector will only check objects on pages which have a type where the GCManaged bit is set. The graph is created by starting from "root" objects which are either stored in static variables or part of the current stack. Each of these objects is "marked" and all objects referenced by this object are recursivly also "marked" and "swept". This is done using the methods void Heap.MarkAndSweepObject(void* aPtr) for objects and void Heap.SweepTypedObject(uint* obj, uint type) for structures. For this to work each allocated object holds a 1bit flag if the object was discovered during the marking phase and a 7bit value counter for the number of static references it has. The number of static references an object has is updated using void GCImplementation.IncRootCount(ushort* aPtr) and similar methods, which are called from the Stsfld opcode.

+

Last updated on 22 October 2023.

diff --git a/articles/Kernel/Network.html b/articles/Kernel/Network.html index 35f027526..b2a727b6b 100644 --- a/articles/Kernel/Network.html +++ b/articles/Kernel/Network.html @@ -190,10 +190,10 @@

Network

-

In this article we will discuss about Networking on Cosmos, how to use the Network Stack, send and receive packets. For now, available protocols are ARP, IPv4, TCP, UDP, ICMP, DHCP and DNS. Note that Cosmos devkit must be installed for this article.

-

All protocols here don't necessary support every feature described by their RFC and may have some bugs or architecture issues, if you find bugs or something abnormal please submit an issue on our repository.

+

In this article, we will discuss Networking on Cosmos, how to use the Network Stack, and send and receive packets. For now, available protocols are ARP, IPv4, TCP, UDP, ICMP, DHCP and DNS. Note that Cosmos DevKit must be installed for this article.

+

All protocols here don't necessarily support every feature described by their RFC and may have some bugs or architecture issues, if you find bugs or something abnormal please submit an issue on our repository.

Each protocol has a Client class which can be used to receive and send data. If a Receive() method is blocking, the method will timeout after 5 seconds or use the value optionally set by parameter. Please note that all finished connections should be closed using Close().

-

The Cosmos Network Stack mainly not uses classes and functions that are under .NET Core (except TCP). Everything described here will be under:

+

The Cosmos Network Stack does not uses classes and functions that are under .NET Core (except TCP). Everything described here will be under:

using Cosmos.System.Network;
 

Before anything, a Network Configuration must be set (local machine IPv4 address, subnet mask and gateway). It can be manually set with IPConfig.Enable or dynamically set through a DHCP server. For DHCP, Cosmos will ask to the DHCP server (usually default gateway) for an address in your local network.

@@ -315,12 +315,12 @@

TCP

}

FTP

-

Only server side is implemented in Cosmos. We recommand to use FileZilla as your FTP client.

+

Only server-side FTP is implemented within Cosmos. We recommend to use FileZilla as your FTP client.

Your FTP client must enable active mode. Since in Active Mode the server has to open TCP connections, your computer firewall must be disabled to accept incoming connection. An FTP connection is made of two TCP sockets. One for control connection (as a textual protocol) and one for data transmission. Data transmission sockets can be opened by the client (if it is in Passive Mode) or by the server (if in Active Mode). The Passive Mode is not supported yet due to current Cosmos TCP and multithreading limitation.

Installation:

Install CosmosFtpServer package into your Cosmos kernel. For more information see CosmosFTP readme.

FTP client configuration:

-

Use Plain FTP with an Anonymous connection.

+

Use Plain FTP with an anonymous connection:

FTP client configuration

Usage:

Please note that for now only one FTP connection can be accepted, the server will shut down itself after the client disconnection.

@@ -352,7 +352,7 @@

DNS

DNS can be used to get an IP address from a Domain Name string. For now DNS can only ask for one domain name at the same time.

using(var xClient = new DnsClient())
 {
-    xClient.Connect(new Address(192, 168, 1, 254)); //DNS Server address
+    xClient.Connect(new Address(192, 168, 1, 254)); //DNS Server address. We recommend a Google or Cloudflare DNS, but you can use any you like!
 
     /** Send DNS ask for a single domain name **/
     xClient.SendAsk("github.com");
@@ -361,6 +361,7 @@ 

DNS

Address destination = xClient.Receive(); //can set a timeout value }
+

Last updated on 24 March 2024.

diff --git a/articles/Kernel/OnBoot.html b/articles/Kernel/OnBoot.html index 74b1323d3..4d98b71c8 100644 --- a/articles/Kernel/OnBoot.html +++ b/articles/Kernel/OnBoot.html @@ -190,18 +190,19 @@

OnBoot

-

If you need to disable drivers because you are developing your own, or in some cases just don't need them, you may do so by adding the OnBoot method to your kernel. For now, you can disable 3 drivers and disable a part of a driver, an example would be

+

If you need to disable drivers because you are developing your own, or in some cases just don't need them, you may do so by adding the OnBoot method to your kernel. For now, you can disable 3 drivers and disable a part of a driver, an example would be:

protected override void OnBoot() 
 {
     Sys.Global.Init(GetTextScreen(),true,true,true,false);
 }
 
-

In that example, we specify that the mousewheel is enabled, the PS2controller is loaded, network drivers are being loaded and the IDE controller is disabled. +

In that example, we specify that the Mousewheel is enabled, the PS2controller is loaded, network drivers are being loaded and the IDE controller is disabled. this is helpful if you intend on developing your own IDE controller, the order of the booleans is as stated above: Mousewheel PS2Controller Network Drivers IDE Controller

+

Last updated on 24 March 2024.

diff --git a/articles/Kernel/Plugs.html b/articles/Kernel/Plugs.html index 1bcfb07ff..8276cbe42 100644 --- a/articles/Kernel/Plugs.html +++ b/articles/Kernel/Plugs.html @@ -192,12 +192,12 @@

Plugs

Plugs are used to fill "holes" in .NET libraries and replace them with different code. Holes exist for example when a method in .NET library uses a Windows API -call. That API call will not be available on Cosmos. Emulating the win32 API would be highly inefficient. Instead, +call. That API call will not be available on Cosmos. Emulating the Win32 API would be highly inefficient. Instead, Cosmos replaces specific methods and property implementations that rely on -win32 API calls. Plugs can also be used to provide an alternate implementation +Win32 API calls. Plugs can also be used to provide an alternate implementation for a method, even if it does not rely on the Windows API.

-

Important: All plugs must go in a seperate project, which is included in your original project using the PlugReference attribute in your kernels csproj.

+

Important: All plugs must go in a seperate project, which is included in your original project using the PlugReference attribute in your Kernel's csproj.

Types of plugs

There are two types of plugs used and supported by Cosmos:

@@ -205,32 +205,28 @@

Types of plugs

  • Code Plug - A standard C# (or any .NET language) method is used to provide the alternate implementation.
  • X#/Assembly Languge - In a few cases, it is difficult or impossible to write the code using C#/.Net since one needs exact control over the emitted assembly code. An assembly plug are designed for that case. Cosmos itself only uses this type of plug within the Cosmos.Core projects.
  • -

    How do plugs work

    -

    To explain how plugs work, we first need to give an overview of how IL2CPU works. Roughly, IL2CPU compiles a kernel using the following steps:

    +

    How do plugs work?

    +

    To explain how plugs work, we first need to give an overview of how IL2CPU works. Roughly, IL2CPU compiles a kernel using the following steps:

    1. IL2CPU determines a list of all methods and types which are used by the kernel.
    2. It then compiles each of these methods into assembly code. This is usually done by getting the list of IL instructions which make up the method and translating each of them into some corresponding assembly.
    3. Together with a bit of boilerplate code, the emitted assembly for all the methods is compiled using yasm.
    -

    Plugs change what happens in step 2. A normal code plug means that rather taking the IL instructions from the original method, the IL instructions from the plug are used and then converted into assembly. An assembly plug directly states what asm should be emitted.

    +

    Plugs effect what occurs in Step 2; A normal code plug means that rather from taking the IL instructions from the original method, the IL instructions from the plug are used and then converted into assembly. An assembly plug directly states what asm should be emitted.

    Implementing a Plug

    -

    While one always plugs individual methods, plugs are defined class wise. Therefore the first step to plugging any method is to define a new static class to contain all the pluggged methods for some certain type. This class must be decorated with the Plug attribute. The plug attribute either takes the type it is plugging(Plug(Type target)) or a string with the target name(Plug(string targetName)). Using the string target name is required when plugging internal or private classes. An example for a plugged class is for the Math class. https://github.com/CosmosOS/Cosmos/blob/8a8393353f1957890c5154650e29847fd22bf893/source/Cosmos.System2_Plugs/System/MathImpl.cs#L8-L9

    +

    While one always plugs individual methods, plugs are defined class-wise. Therefore, the first step to plugging any method is to define a new static class to contain all the pluggged methods for some certain type. This class must be decorated with the Plug attribute. The plug attribute either takes the type it is plugging (Plug(Type target)), or a string with the target name(Plug(string targetName)). Using the string target name is required when plugging internal or private classes. An example for a plugged class is for the Math class.

    Code Plug

    -

    Once you have created such a class, you can add methods to the class. If these methods share the signature with a method in the original class they will be used to plug the original methods. For example in the above mentioned Math plug class, the following method plugs the original double Math.Abs(double) implementation.

    -

    https://github.com/CosmosOS/Cosmos/blob/8a8393353f1957890c5154650e29847fd22bf893/source/Cosmos.System2_Plugs/System/MathImpl.cs#L52-L63

    +

    Once you have created such a class, you can add methods to the class. If these methods share the signature with a method in the original class they will be used to plug the original methods. For example in the above mentioned Math plug class, the following method plugs the original double Math.Abs(double) implementation. See here.

    Note, when plugging a non-static method, the first argument will be correspond to "this" (the instance for which the method is being called).

    -

    Sometimes it is impossible to define a method with exactly the same signature due to some of the arguments being from private or internal classes. In that case you can use the PlugMethod attribute. An example, is the following plug for GC.AllocateNewArray since ALLOC_FLAGS is a private enum. -https://github.com/CosmosOS/Cosmos/blob/8a8393353f1957890c5154650e29847fd22bf893/source/Cosmos.Core_Plugs/System/GCImpl.cs#L17-L29

    +

    Sometimes it is impossible to define a method with exactly the same signature due to some of the arguments being from private or internal classes. In that case you can use the PlugMethod attribute. An example, is the following plug for GC.AllocateNewArray since ALLOC_FLAGS is a private enum. See here.

    Assembly Plug

    -

    Defining an assembly plug is slightly more complicated. The first step is the same and one needs to define a method with the same signature as the method one needs to plug. This acts as plug placeholder. The actual plug implemenation is a new class inheriting from AssemblerMethod. This class needs to override the void AssembleNew(Assembler aAssembler, object aMethodInfo) method. The AssembleNew method will be called when IL2CPU is executing and should emit the required asm. Examples of such classes can be found here including the plug implementation for double Math.Round(double),

    -

    https://github.com/CosmosOS/Cosmos/blob/8a8393353f1957890c5154650e29847fd22bf893/source/Cosmos.Core_Plugs/MathImpl.cs#L40-L49

    -

    The final step is to link the plug implementation to the plug placeholder by adding a PlugMethod(Type Assembler) to the plug placeholder, where the Assembler value is the class you created with the implementation. An example is the plug placeholder for the above mentioned double Math.Round(double),

    -

    https://github.com/CosmosOS/Cosmos/blob/8a8393353f1957890c5154650e29847fd22bf893/source/Cosmos.Core_Plugs/MathImpl.cs#L15-L19

    -

    Using plugs to write assembly in your kernel

    -

    While plugs are usually used to overwrite existing methods in the .Net runtime, they can also be used to include assembly methods in your kernel. -This is for example done to implement the void CPU.UpdateIDT(bool) method in Cosmos. -To do this for your own classes and methods is not more difficult than plugging any other method. Simply set target of the plug class to your own class and write the assembly plug as usual. As a reference you can look at Cosmos.Core/CPU.cs, Cosmos.Core_Asm/CPUImpl.cs and CPUUpdateIDTAsm.cs.

    +

    Defining an assembly plug is slightly more complicated. The first step is the same, and one needs to define a method with the same signature as the method one needs to plug. This acts as a plug placeholder. The actual plug implemenation is a new class inheriting from AssemblerMethod. This class needs to override the void AssembleNew(Assembler aAssembler, object aMethodInfo) method. The AssembleNew method will be called when IL2CPU is executing and should emit the required asm. Examples of such classes can be found here including the plug implementation for double Math.Round(double) here.

    +

    The final step is to link the plug implementation to the plug placeholder by adding a PlugMethod(Type Assembler) to the plug placeholder, where the Assembler value is the class you created with the implementation. An example is the plug placeholder for the above mentioned double Math.Round(double), here.

    +

    Using plugs to write Assembly in your Kernel

    +

    While plugs are usually used to overwrite existing methods in the .NET runtime, they can also be used to include assembly methods in your kernel. +This is for example, done to implement the void CPU.UpdateIDT(bool) method in Cosmos. To do this for your own classes and methods is not more difficult than plugging any other method. Simply set target of the plug class to your own class and write the assembly plug as usual. As a reference you can look at Cosmos.Core/CPU.cs, Cosmos.Core_Asm/CPUImpl.cs and CPUUpdateIDTAsm.cs.

    +

    Last updated on 28 April 2023.

    diff --git a/articles/Kernel/Startup.html b/articles/Kernel/Startup.html index 12399db59..4de979ec5 100644 --- a/articles/Kernel/Startup.html +++ b/articles/Kernel/Startup.html @@ -198,7 +198,7 @@

    Sys.Kernel.Start()

    What does it do?

    Kernel.Start() does quite a bit of stuff. First, it checks if System.String.Empty is null. If it is null, then it will just throw an exception. If it isn't, it just continues. After that check, Kernel.Start() initializes the hardware bootstrap, then calls OnBoot().

    -

    We have an article explaining what OnBoot() is.

    +

    The next article explains what OnBoot() is.

    Then, Kernel.Start() calls your BeforeRun() method, after it finishes, Kernel.Start() enables the hardware interrupts. Then it simply does a while (!mStopped) loop with your Run() method. After that, it calls an optional method called AfterRun(). By default, AfterRun() is just empty, so don't worry about nulls or something like that. Then it finishes. All of that is also try/catched too with the A kernel exception has occurred message.

    Overriding it

    @@ -207,6 +207,7 @@

    Overriding it

    You override it the same way you do with other methods. An extremely simple base override in your Kernel would be: protected override void Start() {}

    The default Kernel.Start() method is located in Cosmos\source\Cosmos.System2\Kernel.cs. You can copy it and make modifications with your Kernel override.

    +

    Last updated on 20 May 2023.

    diff --git a/articles/Kernel/VFS.html b/articles/Kernel/VFS.html index 29198f579..9cae7eb6c 100644 --- a/articles/Kernel/VFS.html +++ b/articles/Kernel/VFS.html @@ -190,10 +190,10 @@

    File System

    -

    In this article we will discuss about using Cosmos VFS (virtual file system). -Cosmos VFS and the VFS manager classes, let you manage your file system.

    -

    Attention: Always format your drive with Cosmos and only Cosmos if you plan to use it with Cosmos. Using any other tool such as Parted, FDisk (or any other tool) might lead to weird things when using that drive with Cosmos' VFS. Those tools are much more advanced and might format and read/write to the disk differently than Cosmos. -WARNING!: Please do not try this on actual hardware! It may cause IRREPARBLE DAMAGE to your data. It is recommended to use a virtual machine like VMware, Hyper-V, just to name a few.

    +

    In this article, we will discuss about using Cosmos VFS (virtual file system). +Cosmos VFS and the VFSManager classes, let you manage your file system.

    +

    Attention: Always format your drive with Cosmos and only Cosmos if you plan to use it with Cosmos. Using any other tool such as Parted, FDisk, or any other tool might lead to weird things when using that drive with Cosmos' VFS. Those tools are much more advanced and might format and read/write to the disk differently than Cosmos.

    +

    WARNING!: Please do not try this on actual hardware! It may cause IRREPARBLE DAMAGE to your data. It is recommended to use a virtual machine like VMware or VirtualBox, just to name a few.

    First, we should create and initialize an instance of the VFS, this will initialize the partition and files-system lists, as well as register the new VFS. This is essential for using the VFS.

    We start with creating a global CosmosVFS, this line should appear outside of any function, and before the BeforeRun() function.

    @@ -202,10 +202,11 @@

    File System

    Next, we register our VFS at the VFS manager, this will initiate the VFS and make it usable, add this to your kernel's BeforeRun() function:

    Sys.FileSystem.VFS.VFSManager.RegisterVFS(fs);
     
    -

    Note: From now on, we'll be using some plugged functions from System.IO, so be sure to use that reference to your code. Alright, now, let's get started over some useful functions:

    +

    Note: From now on, we'll be using some plugged functions from System.IO, so be sure to use that reference to your code. Now, let's get started over some useful functions:

    Format disks

    Note: You don't have to format your drive if you're debugging your Cosmos project with VMWare. The build will automatically add an already formatted FAT32 VMDK file for your convenience.

    -

    You can get all available disks using VFSManager.GetDisks(). The methods to get information about the disk or format it can be found under the Disk class. To format a disk use the FormatDisk(int index, string format, bool quick = true) +

    You can get all available disks using VFSManager.GetDisks(). The methods to get information about the disk or format it can be found under the Disk class. +To format a disk use the FormatDisk(int index, string format, bool quick = true) method.

    Get available free space

    We use this function to get the size of the available free space in our file system, in bytes.

    @@ -213,8 +214,8 @@

    Get available free space

    Console.WriteLine("Available Free Space: " + available_space);

    Free Space

    -

    You have probably noticed the "0:" argument passed to this function, this is the id of the drive that we want to get available free space of. -Cosmos using DOS drive naming system and this is why we use "0".

    +

    You have probably noticed the "0:" argument passed to this function, this is the ID of the drive that we want to get available free space of. +Cosmos uses the DOS drive naming system, this is why we use "0".

    Attention: Typing "0:/" instead of "0:\" might lead to errors, you've been warned.

    Get file system type

    This will let us know what is the file system type that we are using. @@ -223,7 +224,7 @@

    Get file system type

    var fs_type = fs.GetFileSystemType(@"0:\");
     Console.WriteLine("File System Type: " + fs_type);
     
    -

    Get files list

    +

    Get list of file

    We start by getting a list of files, using:

    var files_list = Directory.GetFiles(@"0:\");
     
    @@ -234,7 +235,7 @@

    Get files list

    }

    Files List

    -

    Get directory listing (Files and directories)

    +

    Get directory listing (files and other directories)

    You can get files and directory listing by using this code:

    var files_list = Directory.GetFiles(@"0:\");
     var directory_list = Directory.GetDirectories(@"0:\");
    @@ -283,11 +284,11 @@ 

    Create new file

    Console.WriteLine(e.ToString()); }
    -

    Create a new Directory

    +

    Create a new directory

    Here is a example of code of creating a new directory:

    try
     {
    -    Directory.Create(@"0:\testing\");
    +    Directory.Create(@"0:\testdirectory\");
     }
     catch (Exception e)
     {
    @@ -299,7 +300,7 @@ 

    Deleting a file or a directory

    try
     {
         File.Delete(@"0:\testing.txt");
    -    Directory.Delete(@"0:\testing\");
    +    Directory.Delete(@"0:\testdirectory\");
     }
     catch (Exception e)
     {
    @@ -320,7 +321,7 @@ 

    Write to file

    }

    Move a file

    -

    Actually, File.Move() is not plugged in Cosmos, so you need to Copy the file and then delete the old file. +

    File.Move() is not currently plugged in Cosmos, so you need to copy the file and then delete the old file. Here is an example Method:

    public static void MoveFile(string file, string newpath)
     {
    @@ -336,7 +337,7 @@ 

    Move a file

    }

    Read all text from a specific file

    -

    Now we will read a specific file from a given path.
    +

    Now, we will read a specific file from a given path. As usual, we'll do it in a try catch block.

    try
     {
    @@ -349,7 +350,7 @@ 

    Read all text from a specific file

    Read Specific File

    Read All bytes from a specific file

    -

    As like the ReadAllText Method, ReadAllBytes should return all bytes the bytes from a file.

    +

    As like the ReadAllText Method, ReadAllBytes should return all bytes the bytes from a file. You can use this to load files that include data and not just text.

    try
     {
         Console.WriteLine(File.ReadAllBytes(@"0:\testing.txt"));
    @@ -359,6 +360,7 @@ 

    Read All bytes from a specific file Console.WriteLine(e.ToString()); }

    +

    Last updated on 2 November 2023.

    diff --git a/articles/Reference/x86.html b/articles/Reference/x86.html index 8e261b033..725afa875 100644 --- a/articles/Reference/x86.html +++ b/articles/Reference/x86.html @@ -190,7 +190,8 @@

    x86 Reference

    -

    The reference can be found here

    +

    The reference can be found here.

    +

    Last updated on 20 June 2022.

    diff --git a/articles/Tests/TestRunner.html b/articles/Tests/TestRunner.html index de9e0ce5c..c4f7adbec 100644 --- a/articles/Tests/TestRunner.html +++ b/articles/Tests/TestRunner.html @@ -208,6 +208,7 @@

    Time Out

    To set the period before the TestRunner registers an error, change the line: engine.AllowedSecondsInKernel = 1800; This means that, in this case, if the Kernel runs for more that 30 minutes then it will register a failure.

    Project Location

    The TestRunner Projects are located in ..\Tests\TestRunner

    +

    Last updated on 9 December 2022.

    diff --git a/index.html b/index.html index 146dfc922..46415122d 100644 --- a/index.html +++ b/index.html @@ -84,13 +84,13 @@

    Welcome to the Official Cosmos Documentation

    -

    If you're new to Cosmos, welcome! Before you get stuck in the API documentation, we highly recommend you visit the website linked below.

    -

    The Articles section of this website includes some articles which have been written over years ago for websites such as www.codeproject.com and are mostly kept for archival purposes. These discuss elements such as the Cosmos Virtual File System. We prefer newcomers who want to develop their own operating systems to read the API documentation while we update these articles to comply with the current Cosmos project.

    -

    For projects using the VFS directly, we recommend you use System.IO methods where possible. This is because these were written before much progress was made making .NET assemblies usable

    -

    For the up-to-date API documentation generated from the master branch, please visit the Cosmos API Documentation

    -

    If you're looking for general information about Cosmos e.g. our goals and various links to chat with us or for help with using Cosmos that can't be answered with existing documentation, please visit the Cosmos website

    +

    If you're new to Cosmos, welcome! Before you get surf through the API documentation, we highly recommend you visit the website linked below.

    +

    While majority of the content in this documentation is up-to-date, this website also includes some articles which have been written over years ago for websites such as www.codeproject.com. They are mostly kept for archival purposes. We prefer newcomers who want to develop their own operating systems to read the API documentation while we update these articles to comply with the current Cosmos project.

    +

    We strongly encourage newcomers to Cosmos to have a basic to intermediate proficiency in the C# language. Having this level of proficiency will significantly enable independent debugging and problem-solving, reducing the need for continuous assistance. There are many tutorials online for understanding classes, methods, and functions.

    +

    For projects using the Cosmos Virtual File System (abbr. VFS) directly, we recommend you use System.IO methods where possible. This is because these were written before much progress was made making .NET assemblies usable.

    +

    For a comprehensive set of information about Cosmos, including our ambitions and other links to chat with us or to seek assistance with something not covered in the documentation, please visit the official Cosmos website.

    If you need a translation for this documentation, click here.

    -

    You can find the latest and previous build statuses on AppVeyor

    +

    You can find the latest and previous build statuses on AppVeyor, here.

    Build status
    Join the chat at (https://discord.com/invite/kwtBwv6jhD

    xref link https://cosmosos.github.io/xrefmap.yml

    diff --git a/manifest.json b/manifest.json index 22397155b..0635ddef6 100644 --- a/manifest.json +++ b/manifest.json @@ -1192,6 +1192,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Audio.AudioBitDepth.yml", "output": { @@ -1245,13 +1248,16 @@ "output": { ".html": { "relative_path": "api/cosmos/Cosmos.HAL.Audio.html", - "hash": "rF1b6zJ6EyzWv2BT/qC0Cisb/N4pRXgKlr2Rh7hwzVQ=" + "hash": "GANk+1il1obBD6CPW63+d2m6pcyH9qjzvGOQ7WaJYNs=" } }, "is_incremental": false, "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BaudRate.yml", "output": { @@ -1279,6 +1285,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATAPI.PacketCommands.yml", "output": { @@ -1291,6 +1300,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATAPI.yml", "output": { @@ -1303,6 +1315,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATA_PIO.Cmd.yml", "output": { @@ -1315,6 +1330,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATA_PIO.DvcSelVal.yml", "output": { @@ -1327,6 +1345,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATA_PIO.Ident.yml", "output": { @@ -1339,6 +1360,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATA_PIO.SpecLevel.yml", "output": { @@ -1351,6 +1375,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATA_PIO.Status.yml", "output": { @@ -1363,6 +1390,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.ATA_PIO.yml", "output": { @@ -1405,6 +1435,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Ata.yml", "output": { @@ -1417,6 +1450,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.BlockDevice.yml", "output": { @@ -1429,6 +1465,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.BlockDeviceType.yml", "output": { @@ -1441,6 +1480,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.EBR.PartInfo.yml", "output": { @@ -1453,6 +1495,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.EBR.yml", "output": { @@ -1465,9 +1510,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.GPT.GPartInfo.yml", "output": { @@ -1480,9 +1522,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.GPT.yml", "output": { @@ -1495,9 +1534,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.IDE.yml", "output": { @@ -1534,9 +1570,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Partition.yml", "output": { @@ -1549,9 +1582,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Ports.SATA.yml", "output": { @@ -1564,9 +1594,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Ports.SATAPI.yml", "output": { @@ -1579,9 +1606,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Ports.StoragePort.yml", "output": { @@ -1594,9 +1618,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Ports.yml", "output": { @@ -1609,9 +1630,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.AHCISignature.yml", "output": { @@ -1624,9 +1642,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.ATACommands.yml", "output": { @@ -1639,9 +1654,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.ATADeviceStatus.yml", "output": { @@ -1654,9 +1666,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.Base.yml", "output": { @@ -1669,9 +1678,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.Bases.yml", "output": { @@ -1684,9 +1690,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.CommandAndStatus.yml", "output": { @@ -1699,9 +1702,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.CurrentInterfaceSpeedStatus.yml", "output": { @@ -1714,9 +1714,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.DeviceDetectionStatus.yml", "output": { @@ -1729,9 +1726,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.FISRegisterD2H.yml", "output": { @@ -1744,9 +1738,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.FISRegisterH2D.yml", "output": { @@ -1759,9 +1750,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.FISSize.yml", "output": { @@ -1774,9 +1762,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.FISType.yml", "output": { @@ -1789,9 +1774,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.GenericRegisters.yml", "output": { @@ -1804,9 +1786,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.HBACommandHeader.yml", "output": { @@ -1819,9 +1798,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.HBACommandTable.yml", "output": { @@ -1834,9 +1810,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.HBAPRDTEntry.yml", "output": { @@ -1849,9 +1822,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.InterfacePowerManagementStatus.yml", "output": { @@ -1864,9 +1834,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.InterruptEnable.yml", "output": { @@ -1879,9 +1846,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.InterruptStatus.yml", "output": { @@ -1894,9 +1858,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.PortRegisters.yml", "output": { @@ -1909,9 +1870,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.PortType.yml", "output": { @@ -1924,9 +1882,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.Registers.yml", "output": { @@ -1944,7 +1899,7 @@ "output": { ".html": { "relative_path": "api/cosmos/Cosmos.HAL.BlockDevice.html", - "hash": "PFL5u4WgUvTegjbRNIulwiVzRBGicJ3wWCZNLkeKyws=" + "hash": "0vC6gWY3ZsciG/Q9VP3HzENinJ6edK3Wrn3IMMu6rAY=" } }, "is_incremental": false, @@ -1999,6 +1954,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.DataReceivedHandler.yml", "output": { @@ -2011,6 +1969,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Device.yml", "output": { @@ -2083,6 +2044,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Network.AMDPCNetII.yml", "output": { @@ -2095,6 +2059,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Network.E1000.RXDesc.yml", "output": { @@ -2143,9 +2110,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Network.RTL8139.yml", "output": { @@ -2158,9 +2122,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Network.yml", "output": { @@ -2173,9 +2134,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.USB.USBHost.yml", "output": { @@ -2188,6 +2146,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.USB.yml", "output": { @@ -2200,6 +2161,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Video.SVGAII.Capability.yml", "output": { @@ -2212,6 +2176,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Video.SVGAII.FIFO.yml", "output": { @@ -2224,6 +2191,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Video.SVGAII.FIFOCommand.yml", "output": { @@ -2304,7 +2274,7 @@ "output": { ".html": { "relative_path": "api/cosmos/Cosmos.HAL.Drivers.Video.SVGAII.html", - "hash": "8xj/PYnf1Gn9IHdVhCbNoFX8fNM2/lH83Dkj/x+pr0g=" + "hash": "r/53jsNCc0fTDx1nEKIFIAKlGhjfxFXi7mDhIvuT2Lw=" } }, "is_incremental": false, @@ -2371,9 +2341,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Video.VGADriver.yml", "output": { @@ -2386,9 +2353,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Drivers.Video.yml", "output": { @@ -2401,9 +2365,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Global.yml", "output": { @@ -2416,9 +2377,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.KeyboardBase.KeyPressedEventHandler.yml", "output": { @@ -2431,9 +2389,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.KeyboardBase.yml", "output": { @@ -2470,9 +2425,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.Network.MACAddress.yml", "output": { @@ -2545,9 +2497,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.PCIDevice.Config.yml", "output": { @@ -2560,9 +2509,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.PCIDevice.DeviceClass.yml", "output": { @@ -2605,9 +2551,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.PCIDevice.PCIHeaderType.yml", "output": { @@ -2620,9 +2563,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.PCIDevice.PCIInterruptPIN.yml", "output": { @@ -2680,9 +2620,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.PCIDeviceNormal.yml", "output": { @@ -2755,9 +2692,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.PS2Controller.yml", "output": { @@ -2770,9 +2704,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.PS2Keyboard.yml", "output": { @@ -2842,9 +2773,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.SerialPort.yml", "output": { @@ -2857,9 +2785,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.SpeakerExtensions.yml", "output": { @@ -2920,6 +2845,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.VendorID.yml", "output": { @@ -2932,12 +2860,15 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/cosmos/Cosmos.HAL.yml", "output": { ".html": { "relative_path": "api/cosmos/Cosmos.HAL.html", - "hash": "L8xEqnqI/0pzoiIYe/FMXapuZJqgazC4YnlKLU7ro/E=" + "hash": "VYdHCmohKsPtdpnxdOSea1dX+aJ/bG4DgPOVPl224gk=" } }, "is_incremental": false, @@ -8059,9 +7990,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Audio.AudioBitDepth.yml", "output": { @@ -8127,16 +8055,13 @@ "output": { ".html": { "relative_path": "api/plugs/Cosmos.HAL.Audio.html", - "hash": "9dwe7MlrvwhecZhDUTXg35eIpS+HofgkQIOMRPk4aH8=" + "hash": "8fUpRvsFn+2X5Fi6ua0/bhWYRmxCcnDsin/ecSVIVz8=" } }, "is_incremental": false, "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BaudRate.yml", "output": { @@ -8161,9 +8086,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATAPI.PacketCommands.yml", "output": { @@ -8176,9 +8098,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATAPI.yml", "output": { @@ -8191,9 +8110,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATA_PIO.Cmd.yml", "output": { @@ -8206,9 +8122,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATA_PIO.DvcSelVal.yml", "output": { @@ -8221,9 +8134,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATA_PIO.Ident.yml", "output": { @@ -8236,9 +8146,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATA_PIO.SpecLevel.yml", "output": { @@ -8251,9 +8158,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATA_PIO.Status.yml", "output": { @@ -8266,9 +8170,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.ATA_PIO.yml", "output": { @@ -8305,9 +8206,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Ata.yml", "output": { @@ -8320,9 +8218,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.BlockDevice.yml", "output": { @@ -8335,9 +8230,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.BlockDeviceType.yml", "output": { @@ -8350,9 +8242,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.EBR.PartInfo.yml", "output": { @@ -8365,9 +8254,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.EBR.yml", "output": { @@ -8380,6 +8266,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.GPT.GPartInfo.yml", "output": { @@ -8392,6 +8281,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.GPT.yml", "output": { @@ -8404,6 +8296,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.IDE.yml", "output": { @@ -8446,6 +8341,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Partition.yml", "output": { @@ -8458,6 +8356,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Ports.SATA.yml", "output": { @@ -8470,6 +8371,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Ports.SATAPI.yml", "output": { @@ -8482,6 +8386,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Ports.StoragePort.yml", "output": { @@ -8494,6 +8401,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Ports.yml", "output": { @@ -8506,6 +8416,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.AHCISignature.yml", "output": { @@ -8518,6 +8431,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.ATACommands.yml", "output": { @@ -8530,6 +8446,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.ATADeviceStatus.yml", "output": { @@ -8542,6 +8461,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.Base.yml", "output": { @@ -8554,6 +8476,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.Bases.yml", "output": { @@ -8566,6 +8491,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.CommandAndStatus.yml", "output": { @@ -8578,6 +8506,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.CurrentInterfaceSpeedStatus.yml", "output": { @@ -8590,6 +8521,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.DeviceDetectionStatus.yml", "output": { @@ -8602,6 +8536,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.FISRegisterD2H.yml", "output": { @@ -8614,6 +8551,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.FISRegisterH2D.yml", "output": { @@ -8626,6 +8566,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.FISSize.yml", "output": { @@ -8638,6 +8581,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.FISType.yml", "output": { @@ -8650,6 +8596,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.GenericRegisters.yml", "output": { @@ -8662,6 +8611,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.HBACommandHeader.yml", "output": { @@ -8674,6 +8626,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.HBACommandTable.yml", "output": { @@ -8686,6 +8641,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.HBAPRDTEntry.yml", "output": { @@ -8698,6 +8656,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.InterfacePowerManagementStatus.yml", "output": { @@ -8710,6 +8671,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.InterruptEnable.yml", "output": { @@ -8722,6 +8686,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.InterruptStatus.yml", "output": { @@ -8734,6 +8701,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.PortRegisters.yml", "output": { @@ -8746,6 +8716,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.PortType.yml", "output": { @@ -8758,6 +8731,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.BlockDevice.Registers.yml", "output": { @@ -8778,7 +8754,7 @@ "output": { ".html": { "relative_path": "api/plugs/Cosmos.HAL.BlockDevice.html", - "hash": "l6QQJw44f9cr7GKQvvhCKFmcjPI8LKujQZVLop1Y0o8=" + "hash": "iCKN8EmoV6/vCAbuMGHkz5HIV3bXfflsQkRVeqf2N9k=" } }, "is_incremental": false, @@ -8845,9 +8821,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.DataReceivedHandler.yml", "output": { @@ -8860,9 +8833,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Device.yml", "output": { @@ -8923,9 +8893,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Network.AMDPCNetII.yml", "output": { @@ -8938,9 +8905,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Network.E1000.RXDesc.yml", "output": { @@ -8998,6 +8962,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Network.RTL8139.yml", "output": { @@ -9010,6 +8977,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Network.yml", "output": { @@ -9022,6 +8992,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.USB.USBHost.yml", "output": { @@ -9034,9 +9007,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.USB.yml", "output": { @@ -9049,9 +9019,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Video.SVGAII.Capability.yml", "output": { @@ -9064,9 +9031,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Video.SVGAII.FIFO.yml", "output": { @@ -9079,9 +9043,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Video.SVGAII.FIFOCommand.yml", "output": { @@ -9147,7 +9108,7 @@ "output": { ".html": { "relative_path": "api/plugs/Cosmos.HAL.Drivers.Video.SVGAII.html", - "hash": "05jVaQ+zDdeinL1k8ezurf92ombm1ncvO1vKqrjzlOk=" + "hash": "qPNeU9MYW9+ePbvj+F0NCyB3D9G5ERjb8m9DTwX0dDk=" } }, "is_incremental": false, @@ -9202,6 +9163,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Video.VGADriver.yml", "output": { @@ -9214,6 +9178,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Drivers.Video.yml", "output": { @@ -9226,6 +9193,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Global.yml", "output": { @@ -9238,6 +9208,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.KeyboardBase.KeyPressedEventHandler.yml", "output": { @@ -9250,6 +9223,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.KeyboardBase.yml", "output": { @@ -9292,6 +9268,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.Network.MACAddress.yml", "output": { @@ -9379,6 +9358,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.PCIDevice.Config.yml", "output": { @@ -9391,6 +9373,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.PCIDevice.DeviceClass.yml", "output": { @@ -9427,6 +9412,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.PCIDevice.PCIHeaderType.yml", "output": { @@ -9439,6 +9427,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.PCIDevice.PCIInterruptPIN.yml", "output": { @@ -9487,6 +9478,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.PCIDeviceNormal.yml", "output": { @@ -9547,6 +9541,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.PS2Controller.yml", "output": { @@ -9559,6 +9556,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.PS2Keyboard.yml", "output": { @@ -9622,6 +9622,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.SerialPort.yml", "output": { @@ -9634,6 +9637,9 @@ "version": "" }, { + "log_codes": [ + "DuplicateUids" + ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.SpeakerExtensions.yml", "output": { @@ -9706,9 +9712,6 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.VendorID.yml", "output": { @@ -9721,15 +9724,12 @@ "version": "" }, { - "log_codes": [ - "DuplicateUids" - ], "type": "ManagedReference", "source_relative_path": "api/plugs/Cosmos.HAL.yml", "output": { ".html": { "relative_path": "api/plugs/Cosmos.HAL.html", - "hash": "Yta+iDyTlZNPuzKCry1ZDKMCt4H0HtbxL7hyCGbG0jY=" + "hash": "F2Uj30Z5kw884FShyk6YwgPURPxzmhWRNmH2vTtsyXA=" } }, "is_incremental": false, @@ -15513,7 +15513,7 @@ "output": { ".html": { "relative_path": "articles/Changelog.html", - "hash": "IDrjIF1oViFquwQgGecseayHyZ2tyD3pC0/8+jW7K5w=" + "hash": "OPSqqtO0ML269SyHxJ4rG2yQ6Sz0VDfI1ioYk3eRTS8=" } }, "is_incremental": false, @@ -15525,7 +15525,7 @@ "output": { ".html": { "relative_path": "articles/Compiler/il2cpu.html", - "hash": "tIb89daNIoKuEhDEnvwVZAi3yIKSqwrzF0Z2PnvBtU0=" + "hash": "WJiXprMxsQbrJL72kpoQFs5nQ4wsi/pInoVuR+XFeeg=" } }, "is_incremental": false, @@ -15537,7 +15537,7 @@ "output": { ".html": { "relative_path": "articles/Debugger/DebugCommands.html", - "hash": "YVm1GTdyJH7aL6o2yJ+sowg388ZIZS4314We5vPlhb4=" + "hash": "6KiJxKNKciWUF3r4F/PaQkZO2qy2KrMVKK2OiIvA18E=" } }, "is_incremental": false, @@ -15564,7 +15564,7 @@ "output": { ".html": { "relative_path": "articles/GettingStarted.html", - "hash": "Eri+utCaJ+l8E9Ajzwtb0JB8scx6LqWyVKWyCYGGIjk=" + "hash": "8ebaBUl5tglLo4mZNo9rwGSYa6X8QwjRJCPzRK17UXw=" } }, "is_incremental": false, @@ -15576,7 +15576,7 @@ "output": { ".html": { "relative_path": "articles/Installation/DevKit.html", - "hash": "F88arkc0AuLCTRhBrLc52+j7JD7t+VpwYUMvwXdVu6I=" + "hash": "KZHzo+syNk1/SDme4gkK4woII/3AfvNVV15T4zK3jHk=" } }, "is_incremental": false, @@ -15588,7 +15588,7 @@ "output": { ".html": { "relative_path": "articles/Installation/Running.html", - "hash": "ARE1nXzs0gw1Z8EPGsFbRejayOkjdFXWwE0Jef4VMtk=" + "hash": "pR5jOSuIyxnRn2f6V9klJKfrV45xd2DaDscusZbXDfo=" } }, "is_incremental": false, @@ -15600,7 +15600,7 @@ "output": { ".html": { "relative_path": "articles/Installation/UserKit.html", - "hash": "G6Yqqrmzei3CNuCtDNGT286Ie9LAAWIiUd+2CfJMYJs=" + "hash": "sTJRkkPtDxIG2ayyg9IoG3Z4E+7H+0n2WlwMZcRAGV0=" } }, "is_incremental": false, @@ -15624,7 +15624,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/Audio.html", - "hash": "W5oNVsm8YfAuer6JuvZTQGuLVV7p0vX7d0sQUopLDPg=" + "hash": "HljMk7EHjtY5QECkKk04flZUNZdK2F3x7537cDJo+Ok=" } }, "is_incremental": false, @@ -15636,7 +15636,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/CGS.html", - "hash": "gdMP0oS6PPYgajc6Yp17eaR+d4ZB0MlvKozHQxbYlh0=" + "hash": "XW4rsEoYSauMMeVLK3d7TqAJQnnQv3jUUeujN7taBZM=" } }, "is_incremental": false, @@ -15648,7 +15648,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/Levels.html", - "hash": "SEYCSlo522qZaPDEvO7ueKH6m1wJjcTUtAsxg1qRbDk=" + "hash": "H3Y43yiMAimkPRsLBtxM1wEhxw/OsWohP3VyniI723Q=" } }, "is_incremental": false, @@ -15660,7 +15660,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/ManifestResouceStream.html", - "hash": "j+f6W4wZnysx74tA8GpBM0CrS2O9l7bwW4AlyD9ZTj4=" + "hash": "EPLTWRD8pOKByVuWjgOCApXmDwBXO1mWg418yifvTvk=" } }, "is_incremental": false, @@ -15672,7 +15672,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/MemoryManagement.html", - "hash": "e9WhN7H35pA+2q6oD3WTmFeATA7KGRV6DVi5n62zfuQ=" + "hash": "Y2g4zdIx/9p+CMmdMGwwvb/jVFByJD++ivyCY23MWD0=" } }, "is_incremental": false, @@ -15684,7 +15684,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/Network.html", - "hash": "C+nolccYRn6GuADdGsvhvtWY56YuievZdozXBZz1T/o=" + "hash": "9LS0HIqlQqEBnyMy7A6YL+gGgdKjc8cEgYuZs2uWYjQ=" } }, "is_incremental": false, @@ -15696,7 +15696,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/OnBoot.html", - "hash": "UFZMh5V55uhPxGgK3xJA0KOZ0JtRhZY31DLnM4CgY50=" + "hash": "AZGD0zT40GSFFLL0RJ9APQsRL3UOpI+5wfTzvGA7sgM=" } }, "is_incremental": false, @@ -15708,7 +15708,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/Plugs.html", - "hash": "qX7Zi3mYpdmbTPorbJf4jJ8j8lwfO7wrR0ZNKi7swTE=" + "hash": "dQYB4fgnh2bDrIlP26yGnN0cVSWdM5QcVfue2y8dnNg=" } }, "is_incremental": false, @@ -15720,7 +15720,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/Startup.html", - "hash": "PdI8LIyKE3GVgTVtXs8/KlkJjfe/PtdTIaajrD3YwR4=" + "hash": "l+3FtOUsNoDXHZtpUVVp1xvZYqGoNyIsn5EVDxc+6X8=" } }, "is_incremental": false, @@ -15732,7 +15732,7 @@ "output": { ".html": { "relative_path": "articles/Kernel/VFS.html", - "hash": "8cym4oau4PFgAXta2yVJZv7LNNVY0X6uSPF/OUdlaQY=" + "hash": "Qq8uo48APMAW7S+6p3IGbYEm3iV707dakLC9l3pTCe4=" } }, "is_incremental": false, @@ -15744,7 +15744,7 @@ "output": { ".html": { "relative_path": "articles/Reference/x86.html", - "hash": "f2Wii2L7p6fzsStijV11k42eO64ssRUbwf6k6phFD+Y=" + "hash": "rYugeJ2Qq58a+Mr1s7goBq4v9bMNGVQLPKCeSQ2jaEo=" } }, "is_incremental": false, @@ -15756,7 +15756,7 @@ "output": { ".html": { "relative_path": "articles/Tests/TestRunner.html", - "hash": "bgz+b83dUJ1VQAMxGaJTFrhXpNhBOpFf9XiFZ6OBFxk=" + "hash": "S1z6zIjGU44JYjeH3FAk1L7enElcyw+E/0MgmR9Iam0=" } }, "is_incremental": false, @@ -15889,7 +15889,7 @@ "output": { ".html": { "relative_path": "index.html", - "hash": "mHhqtp5L0VTLw/iW3X+p4xclD8uvLqSjhNvzmN3HPcU=" + "hash": "ivqI60fE/7OY0ySKbxkyCNVM/H8T43o+zcbdUau8Vgg=" } }, "is_incremental": false,