Atomic Work List

Welcome to the Cosmos Star Charts! (Roadmaps)

It is a mess in here!

Yeah, working on it… A bit of a mess as its been merged from several sources. Cleaning and sorting as we go!

Also welcome to a peek into our brains… its just as messy in here….. Order from chaos!

For the Taking

  • (HOLD till after source split) Move Cosmos.snk to source dir
    • Copy to /source (done)
    • Update all projects to use /source/cosmos.snk (Some are done)
    • Then remove snk from root cosmos dir after all projects updated
  • Extended ASCII (mid term stepping stone to allow Western European languages) via UTF-8.
  • Finish FAT/VFS
  • Enable UEFI booting

Current – In Progress

Kudzu

  • Reminder – Enr 500
  • https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/
  • Evolve G3
    • CpuPlug can override Plug. Allows optimized CPU over default impl. Doc this too.
    • Memory Access classes
      • can restrict unsafe?
      • Doc in comments
      • Memory block + index, need only check index. Can optimize in X# with op + index. Base is fixed
      • Small ops rare
      • In future inline in output instead……
      • How to quickly check ranges? By blocks?
  • G3
    • Evolve plugs
    • DS alternate call for BP to speed up?
  • TapRoot
    • Make embedded option, can use for DS and to do Ethernet
    • Move to IL2CPU
      • Basics – Text Console (not plugged)
      • KB – But what about USB?
      • Serial
    • Remove plugs one by one till bare, but keep useful non framework ones (string, array, etc)
    • Functionality
      • C#, etc.. arrays, etc.. but no hardware beyond memory stuff.
      • Don’t plug .NET framework except basics – limit to System?
  • Cosmos.Debug.Kernel -> Cosmos.Debug/ger?
  • Ints.cs
    • public static IRQDelegate GeneralProtectionFault;
    • Requires plug – prefer to do without for such a core function
    • Find a way to do this without plugs and then remove DelegateImpl (2 units) from TapRoot/g3base
  • GCImplementationRefs
    • Get rid of hard codes
    • Filename mismatch, file is GcHook
  • Remove UseGen3Kernel property (pending, waiting other changes)
  • Merge and move plugs to plug section
    • CPU_Plugs should be CPU.x86_Plugs – if it still exists after plug upgrades but it probably will go away.

Jose Pedro (jp2masa)

  • On the point that it requires a change to every .csproj file, that doesn’t have to be true. One of the new features of MSBuild 15 is automatic inclusion of a Directory.build.props and Directory.build.targets file, where it searches up the directory tree for it.This makes it much easier to apply attributes/properties of anything in a project in a common place.For example, your Directory.build.targets could have<ItemGroup>
    <Project Reference Update=”$(MSBuildThisFileDirectory)someproject\someproject.csproj” PrivateAssets=”all” />
    </ItemGroup>
  •  [BootEntry(x)]
    • Require one default
    • Only allow one of each number
  • TheRingMaster (TRM)
    • Rename project ->> TheRingMaster
    • make it a dotnet cli tool
    • Rules
      • Check
        • inbound refs
        • outbound refs
        • unsafe
        • X#
        • Plug attrib
        • Mixed/CLI
      • Plug/CpuPlug Ring
        • All Plug Targets must be in external ring assemblies
      • Debug Ring option passed from project options of kernel (Cosmos.cfg). Only allow DebugRing if Allow
      • Check PrivateAccess on all refs except outbound refs on External
    • Other things to update
      • Build.sln
      • Builder
      • Add to targets/msbuild chain
  • PublicAccessUnfrakker
    • dot net cli
    • msbuild tool chain
    • Check a all ringed projects – can find cosmos.cfg in a dir tree and go from there.
    • Verify all PrivateAccess

Charles Betros

  • Cosmos.VS.* consolidation
  • CPS
  • Convert to dotnet cli tools
    • il2cpu
    • Others?
  • AD7

Matthijs

  • Get to Cosmos
  • Charles PR – or Charles

FanoI

  • FAT
  • Graphics System
  • PlugTool (hold pending plug changes)

Up Next

  • Gen 3 Finalize
    • Update Install.bat to copy g3 plugs
    • Remove cosmos\temp…..
    • Cosmos.CPU_Asm refs Cosmos.IL2CPU – Remove (Use API instead)
    • Isolate System.Debug.Kernel properly for g3
    • Ints.cs
      • Fix namespace to match new
      • Use some asmlabel or other for static_field__Cosmos_Core_INTs_mLastKnownAddress
  • Tap Root Kernel
    • Base of bigger core? new ring? or just in 0?
    • promote
    • abstract out ring checks – none if none specified.
    • Basic console and kb only
  • Log Output format + plain text as well.
  • Check into throw null
  • IL2CPU
    • See todo in ints.cs
    • Reduce nuget dependencies in builder – really slows down building in VS, SLN loading etc
    • rework path finding…..
    • Error if a ref cannot be located
    • Emit a .log file instead of console? Or both?
  • Kernel libs search path – change to allow better live dev instead of requiring use of install.bat initialized directories.
    • it seems that the current search dirs are the compiler dir, the install dir and the kernel dir (inside the install dir)
    • Plugs come from nuget pkgs? Need to make all this stuff dynamic to easily test changes just by building in VS. No need to copy files, run install.bat etc
  • Plug Upgrades
    • Plug Tool
      • Generate a linkable map with links to source files – IL2CPU?
      • Generate link signatures – ie for this thing
      • Plug errors – show exactly original entry point and final native point clearly
    • Require at least a simle plug marker attrib on methods etc to show what is to be plugged and what is simply common/internal code.
    • Plugs always reffed by il2cpu – remove from .cosmos (Done for now)
    • Simplify GC interface – why plugged and not in direct?
    • Ability to plug icall/pinvoke directly
  • Namespace standardization
    • Debug asms
      • Cosmos.Debug.Kernel (Debugger API – Kernel, Compiler for plugs)
        • Cosmos.Debug.API
      • Cosmos.Debug.Symbols (VSIP debugger stuff – Used by VSIP and Compiler) – Separate out? diff debugger….
        • Cosmos.IL2CPU.Symbols
      • Cosmos.Debug.Kernel.Plugs.Asm (Asm plugs – Compiler) –> Cosmos.Debugger_Asm
        • Cosmos.Debug.API_Asm
    • Other debug units in IDE and possibly VSIP stuff to IDE
    • Cosmos.Build.Common
      • Cosmos.Build.API?
    • Doc all projects in sln readme
    • Move CGS into kernel area and remove spaces
    • No cosmos prefix on most non libs etc.
  • Resolve circular bin refs between kernel and compiler
  • Subdirs by sln – builder first, etc
    • Also move test in source as a subdir – change mCosmosDir to source in Renamer after
  • Compiler refs kernel for CreateIDT etc… Where to put it? use .API or Attribs for this type of stuff? Also check other refs / searches like Kernel and other things.
  • IL2CPU and X#
    • Split and let them exist on their own as standalone projects. Remove Cosmos. prefix
    • New SLNs, Compiler becomes IL2CPU
    • Each project needs its own snk
  • https://www.microsoft.com/en-us/research/publication/project-snowflake-non-blocking-safe-manual-memory-management-net/#

Waiting on Others

Website

  • Fix broken links in imported docs as per report.
  • https://github.com/CosmosOS/Cosmos – Move info from down below to website (mostly into sections on website), and have github readme point to website.
  • News section
  • UserKit release section (under news)
  • Crowdfunding
  • More videos and articles

Etcetera

  • Mobile agents, used even locally for security etc
  • dynamic loading of VSIP pkgs to allow easier upgrades while developing without need to rerun install.bat
  • Improve try..finally handling
  • Struct (a part for primitive types that have hardcoding to make them work) have problems when boxing
  • Interfaces are not really usable on Cosmos as when you use for example IEquatable and plug on other classes is not found you need to plug those methods. This IL2CPU behavior is correct but I’m under the impression that in the end we end to plug entire classes only to remove the Interfaces inheritance
  • Enum’s toString() is not really working (the usual “Object.toString()”) is not implemented is shown. In Net Core it seems reflection is not used anymore to do this… we should see if we can make it work
  • A lot of BCL classes are not working (Dictionary is probably the biggest and more important one)
  • Make a test runner test with MD5 and after that AES.
  • Interfaces in scanner
  • Speed up install.bat
  • PCI init fails if no HDD
  • Optimize compiler as option – Finish all ops first before doing any optimization options.

Memory Manager (RAT)

  • Whats left?

File System (FAT)

  • Whats left?

Cosmos Graphics System (CGS)

  • Merge old VGA driver in

.NET Core

  • Minor buglets left, but does work.

Visual Studio 2017 / Debugger

  • Strings don’t work as watches (Shows null)
  • Compiler generated locals are showing and shouldn’t

Plug Tool

  • IL2CPU should fail if it encounters a plug that isn’t matched/used
  • Some code exists already as a ilspy plugin, start there
  • Select an item, generate plug shell to clipboard. Later on to plug source project.
  • Scan a project, show all existing plugs
  • Scan a project, show all things that NEED plugged

Zork Console