This is an alternative version of sources presented as part of
[Write Your Own OS](http://wyoos.org/) video tutorial by Viktor Engelmann.
The sources were modified to be somewhat cleaner, more portable and with less
There are still many issues and limitations and a lot of things can be improved
in the code base.
Makefile doesn't contain anything for VirtualBox and relies on qemu being
### Differences from original ###
* Use of C++11
* Use of qemu (no iso images or grub is necessary)
* Fixed invocation of constructors of global objects
* Set alignment for multiboot header
* Added dependency tracking to the Makefile
* Flags and build target for running a debugger
* Fixed various weird or incorrect things
* Reduced number of UBs in the code (this results in more complicated and slow
but more correct code; plus, it was quite fun to implement)
* Cosmetic changes like consistent naming, no commented out code, etc
* Make keyboard and mouse work at the same time
* No `include/` directory
* No outermost namespace for everything (it's not a library after all)
* Double buffering to avoid flickering of graphics
### Prerequisites ###
* GNU Make
* qemu for i386
### Trying it out ###
Starting the VM:
# start one of these before running the VM in a separate terminal
# these can be run after VM has started (e.g. `make run; make udp-client`)
# open http://127.0.0.1:1234/ in a browser
### Possible additions/changes ###
* Virtual memory
* 64-bit mode
* Syscalls using `SYSENTER`
* Handle loopback in IP stack
* Graceful shutdown (ACPI)
* Support GPT
### License ###
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"
Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/tos
Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://email@example.com/user/xaizek/tos
You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a
... clone the repository ...
... make some changes and some commits ...
git push origin master