Git Product home page Git Product logo

retros-32's Introduction


RetrOS 32bit

Build

Hobby 32bit operatingsystem project focusing on networking on i386 architecture.
Explore the docs »

View Demo · Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

About The Project

32bit Hobby Operatingsystem with graphics, multitasking and networking!

Started: 12.05.2022

(back to top)

Login

There are 3 default users: system, admin and guest. The password for admin is 'admin', while guest has no password. Currently there is no difference between admin and guest.

You can create a user with the 'admin' command:

admin create <username> <password>

Built With

This project is built with C & Assembly for the kernel, utilities and build system. C++ for userspace applications and Make for compilation. Docker used for crossplatform compilation.

Docker

(back to top)

Hardware

Tested on: Lenovo x240, Asus Eee PC series, Dell Optiplex 780, Samsung N150 Plus, Samsung NP-NC10, IBM Thinkpad a21p

Getting Started

Prerequisites

Crossplatform: Docker to compile the .iso file and QEMU for emulation.
For native compilation you will need:

  • i386-elf-gcc, i386-elf-ld and i386-elf-g++ for MacOS.
  • build-essential and gcc-multilib for Linux / WSL (ubuntu)
  • Also need: grub2, xorriso and xxd (for using Grub as bootloader)

Installation

To compile the kernel and its needed programs you simply need to run make img and make qemu to open QEMU

Linux

  1. Clone the repo

    git clone https://github.com/joexbayer/RetrOS-32.git
  2. Compile the kernel and create .img file

    make img

    Note: needs sudo to mount the .img file and copy over files!

  3. Launch QEMU

    make qemu
  4. Use GRUB (Optional)

    make grub

MacOS

MacOS can compile the kernel but not the needed tools.
  1. Clone the repo

    git clone https://github.com/joexbayer/RetrOS-32.git
  2. Compile the kernel / OS

    Docker:

    sudo docker-compose up
  3. Launch QEMU

    make qemu
  4. Use GRUB (Optional)

    make grub

Windows

Using Docker (can also compile in WSL)

  1. Clone the repo

    git clone https://github.com/joexbayer/RetrOS-32.git
  2. Compile and Launch QEMU

    ./make.cmd run

(back to top)

Usage

To run RetrOS-32:

  • http://copy.sh/v86/ : Upload .img file as Hard disk image.
  • QEMU: make qemu or qemu-system-i386 <image name>
  • Real hardware: Burn .iso file to USB or CD (Use a GRUB iso)

(back to top)

Project Structure (TBD)

NETOS - Project
├── Dockerfile 
├── LICENSE.txt
├── Makefile
├── apps (userspace applications)
│   ├── Makefile
│   ├── <app>
│   ├── libcore.a
│   ├── libgraphic.a
│   ├── libnet.a
│   ├── readme.md
│   └── utils
│       └── *.cpp
├── bin 
│   └── *.o
├── boot (custom bootloader)
│   ├── bootloader.s
│   └── multiboot.ld
├── docker-compose.yml
├── docs (documentation)
│   ├── *.md
├── drivers (kernel drivers)
│   └── *.c
├── fs (filesystem)
│   ├── Makefile
│   ├── bin
│   └── *.c
├── graphics
│   └── *.c
├── include
│   ├── arch
│   │   └── *.h
│   ├── fs
│   │   └── *.h
│   ├── gfx
│   │   └── *.h
│   ├── lib
│   │   └── *.h
│   ├── net
│   │   └── *.h
│   └── *.h
├── kernel (main kernel source files)
│   ├── arch
│   │   └── *.c
│   ├── kthreads
│   │   └── *.c
│   └── *.c
├── legacy (old code)
├── lib (libraries)
│   └── *.c
├── net (networking code)
│   └── *.c
├── readme.md
├── rootfs (root filesystem for the OS)
├── tests (testing code)
│   ├── Makefile
│   ├── bin
│   ├── *_test.c
│   └── readme.md
└── tools (build tools)
    ├── scripts
    └── bin
        └── *.c

Roadmap

  • Custom Bootloader & GRUB compatible
  • Stage 2 bootloader
  • Wallpapers
  • Mountable image
  • Users
  • Multi-threaded pre-emptive scheduling
  • GDT & TSS kernel / userspace separation
  • Interrupt handling
  • PS/2 Keyboard & Mouse, PIT, VESA (640x480x8), RTC, Serial drivers, E1000
  • PCI.
  • 8Bit RGB to 8Bit VGA
  • Filesystem
  • Textmode VGA only
  • Networkstack
    • Ethernet, IP, ARP, UDP
    • Socket API
    • Interfaces
      • Loopback
    • DHCP
    • DNS
    • TCP
    • Netcat style commands
    • FTP
    • IRC
    • SSH
    • Telnet
    • HTTP
    • HTML
  • ATA IDE Driver
    • Ext2 (like) Filesystem
    • FAT16, support for up to 32mb files.
    • read / write
    • Atapi
  • Memory
    • 32bit Virtual Memory
    • kalloc / kfree (kernel)
    • malloc / free (userspace)
  • Graphics
    • Window Manager
    • GFXLib
    • Double framebuffer rendering
    • Mouse events
    • Dynamic resize
    • Fullscreen
    • Widgets Library
    • Custom HTML to Widgets
  • Terminal, Window Server, Process Informtaion, Finder.
  • Library (printf, memcpy, etc)
  • IPC
  • System calls
  • C Compiler / interpreter to bytecode
  • Custom VM to run bytecode.
  • Editor with Syntax Highlighting
  • Calculator
  • 3D Game
  • Snake game (Textmode only)
  • Userspace threads (shared virtual memory)
  • Remote virtual terminal over TCP
  • Tools
    • Build
    • Sync / Migration Took
    • mkfs
    • Testing
    • Create & Encode icons and wallpapers

See the open issues for a full list of proposed features (and known issues).

(back to top)

License

Distributed under the MIT License. See LICENSE.txt for more information.

(back to top)

Contact

Joe Bayer - [email protected]

Project Link: https://github.com/joexbayer/RetrOS-32

(back to top)

Acknowledgments

Use this space to list resources you find helpful and would like to give credit to. I've included a few of my favorites to kick things off!

(back to top)

retros-32's People

Contributors

joebond7 avatar joexbayer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar

retros-32's Issues

Increase max file size to 100KB

This means we cannot guarantee that all files can reach the max.
Also means we need 196 blocks of 512 bytes to cover the potential maximum.
(Store in a bitmap?)

loggd: configurable logg daemon

loggd: responsible for logging data, can be configured for different log levels, warning, debug, etc.
Will use macro to add function / file to the logg. Should perhaps also be configured with configure script

All logs will be added to serial port and maybe file.

dig command crashes windows.

dig command crashes all windows if a process was closed before the dig command is called.
Does not happen if dhcpd does not exit.

PCB parents

When a new PCB is created its "creator" parent should be attached.
Can give tree view of processes.

(BIG) Make OS stable and "always" bootable.

Problem: Currently the OS can only boot using DAP (Disk Address Packet) which requires it to be on a harddisk.
The OS also assumes ALOT from QEMU, especially driver specific things.

Goal: Make it "always" bootable, using text-mode if graphics fail. Always have a fallback...
Make it bootable in virtualbox and MAYBE real hardware.

Graphics C++ base class.

Add a base Graphics window class for c++ applications that they can extend.
Simply the boilerplate of creating new graphical applications

Scheduling: block reasons

When a process blocks it should block for a specific reason, and can only be unblocked if the "reason" is resolved.
Example:
Blocked because of lock
Blocked because of event loop
...

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.