Giter Site home page Giter Site logo

patrick-lafferty / saturn Goto Github PK

View Code? Open in Web Editor NEW
22.0 3.0 2.0 1.97 MB

A microkernel based operating system developed from scratch. This repository also includes all Saturn services and applications.

Home Page: https://saturn-os.org

License: Other

Makefile 0.26% C 4.03% C++ 92.12% Assembly 3.07% Scilab 0.12% Shell 0.24% CMake 0.15%
operating-system kernel microkernel osdev cpp cpp17 smp x86-64 baremetal window-manager

saturn's People

Contributors

patrick-lafferty avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

saturn's Issues

Implement a List container

Dsky will need a List to display labels of user text input and the resulting output. List items don't need to be uniform in size, and will be culled to only render the items visible.

Redesign how ShareMemory works

The way ShareMemory works right now is the sender knows the recipient's shared address and by sending the message to the service registry, the appropriate recipient page tables are modified whether the recipient accepts/knows or not. Change it so the owner of the memory to be shared initiates a share memory request with its owned memory address and the task id of the recipient, the service registry then forwards the request to the recipient on the owner's behalf and if the recipient accepts then only is the memory shared.

Add serial port support

QEMU has a handy feature where it can redirect everything written to COM1 to a logfile, so make use of that.

Add taskbar application

Something that shows a list of running applications that highlights the application with input focus.

Add an S-Expression parsing api to libSaturn

A number of new features in the works - a shell language, UI layout format ala XAML, perhaps logging and configuration files - will be based off of S-Expressions. So it is imperative that a functional parsing framework exists, and putting it in libSaturn is an easy way to make it accessible to all services/applications.

Implement Layout loading from a string

Apollo UI Layouts will be stored as text files formatted as s-expressions. Once the text has been loaded into a string, parse the string to get the s-expressions, and then walk through the s-expression tree to create all known containers and other ui elements.

Overhaul the heap

The current heap is slow, and doesn't really support freeing memory. Add fixed-size bins with free lists for each size to optimize finding free chunks.

Implement a Label element

A Label is a UI Element that displays a block of text. The text can be changed at runtime with code, but isn't user interactive like a textbox is.

Optimize memset

Rewrite memset to use enhanced rep stosb similar to memcpy.

New VFS message: ReadStreamRequest

ReadStream takes a memory address to write to, as well as a max length. Then instead of fread issuing (dataSize / 512) separate ReadRequests, it would issue just one ReadStreamRequest. The VFS would wait until all the requested data is available, then memcpy the whole shebang into the buffer at once, and issue one response.

Create a new kernel loader

Now that the 64-bit rewrite is happening, Saturn needs a 32-bit loader to replace the old pre_kernel hacks. It will handle setting up the free physical page stacks and other low-level things, and ensure that the kernel starts in a stable and well-known state, or doesn't start at all and lets the user know why.

Capcom: Add a text area showing available commands

The layout should be like:

"Menu"

[command line]

{
commands
}

Commands are organized into different categories and have a unique shortcut, so for example one category could be Container [ (S)plit, (C)hange split]. Initially the text area would show:

C -> Container

pressing C would change the area to show

S -> Split C -> Change split

Support loadable programs

Need to implement an ELF loader so that all the services can be built and loaded separately which will clean up a number of issues.

Unable to build toolchain

Attempting to build the toolchain by running make toolchain results in the following error for me:

make[5]: *** No rule to make target 'eelf_x86_64_saturn.o', needed by 'ld-new'.

Any suggestions to allow it to compile?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.