1
2022-08-01 20:43:38 +02:00
2022-08-01 20:43:38 +02:00
2022-07-23 14:33:51 +02:00
2022-07-04 11:23:15 +02:00
2022-07-27 23:43:08 +02:00
2022-07-27 23:42:54 +02:00
2022-07-27 23:44:31 +02:00
2022-07-29 14:18:39 +02:00
2022-08-01 20:43:25 +02:00

Important

  • This does not run in the latest "vanilla" C++ VM image, g++-multilib has to be installed extra

Makefile

  • Added the -std=c++17 flag to enable better constexpr support.
  • Removed optimizations as the system would crash with them. The BlueScreen would show an empty callstack on crashes with -O2, so I guess the problem is the missing ebp or something like that.

Changes

  • Removed the Input.h/Input.cc files
  • Removed the Queue.h/Queue.cc/Chain.h files
  • Many changes to the scheduler (strategy is still round robin):
    • Merged dispatcher into the scheduler (removed Dispatch.h/Dispatch.cc)
    • Scheduler no longer uses queue but vector
    • Scheduler owns threads (no outside references)
    • Threads are addressed by tid from the outside
    • Retrieve threads when killing them
    • Threads are deallocated when killed and not retrieved
    • Scheduler manages blocked threads
  • Simplified thread switching by storing registers on the stack (removed ThreadState.h, Thread.inc)

Additions

  • Some stream manipulators for CGA_Stream (color) and OutStream (fixed width)
  • Logging with serial port output
  • Main menu to start demos
  • A very basic system to broadcast keyboard events to threads
  • Basic vector and iterator
  • Basic unique_ptr
  • Basic fixed size array (just a wrapper for C-style arrays)
  • Basic dynamic string (heap allocated)
  • Basic span

Bugs

  • Can't exit the PCSPKdemo (bluescreen)
  • After exiting the VBEdemo the paging isn't reactivated (so the pagefault bluescreen no longer works)
  • The PreemptiveThreadDemo LoopThreads can't be exited, the demo can't be launched multiple times
  • Tree Allocator (uses a red black tree to find best-fit blocks) crashes when freelist root is removed
  • Can't restart the OS (bluescreen)
  • Fast keyboard inputs sometimes trigger bluescreens
  • Different combinations of demos also trigger bluescreens
  • Other seemingly random bluescreens that are hard to pinpoint
  • Key event management doesn't differentiate between press/type/release etc.
  • Main menu doesn't work with multiple inputs (like holding a key)

Other

  • Keyboard repeat rate and led functionality is missing
  • Circle functionality in VESA mode is missing
  • Singleton can't have a destructor, as C++ doesn't know how to deinitialize them after program exit. This happens because we compile with very limited libraries so "atexit" to register destructors is missing. I wanted to make the device/hardware classes (PCSPK, CPU etc) singleton because it doesn't make sense to have more than one.
Description
No description provided
Readme 734 KiB
Languages
C++ 94.7%
Assembly 2.5%
C 1.3%
Makefile 1.1%
Nix 0.4%