pac-ac / osakaOS

The de facto operating system developed for the cult of Ayumu "Osaka" Kasuga.
https://www.youtube.com/@dpacarana
GNU General Public License v3.0
827 stars 19 forks source link
operating-system

osakaOS v2.0

The Osaka Operating System v2.0.

osakaOS is a 32 bit, (optionally) multitasking, megalithic operating system that is made with a focus on unconventional/ridiculous design choices. It is meant to emulate the experience of a videogame or demo software rather than a traditional desktop operating system. It uses different text modes and graphical programs to edit files using the Osaka FileSystem and create programs using the AyumuScript scripting language.

Multitasking kernel programs, file allocation, graphical window manipulation, a paint GUI program, and much more :)

The desktop of osakaOS, you can enter the GUI by pressing the windows/command key.

How to run/compile

Included is a pre-compiled bootable iso image that you can use in any normal virtualization software. To compile from source do 'sudo make run' and pray for the best. The binary will be built and QEMU will boot from the virtual disk.

You will probably need the following software packages: g++, binutils, libc6-dev-i386, qemu-system-x86_64 grub-legacy, grub2, xorriso.

If you plan on using other emulators then make sure it has piix4 ide support for storage, at least 8MB of memory, standard VGA emulation, and pc speaker support for basic audio. Emulation is the preferred way to run the OS as running it on real hardware requires a very old machine for the drivers to work, as well as a lack of concern for the data on the machine since the OS doesn't care to ask if you want to write over a pre-existing system partition, it will just do it. There is also a lack of error catching that can cause crashes, which would be annoying to deal with on real machines.

How to get audio using PulseAudio

If you're using a linux host and use pulseaudio like me, add this line load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket to /etc/pulse/default.pa. Then restart pulseaudio and the settings in the makefile should work. (original post here)

Extra

During development this project was/will receive monthly updates on my youtube page.

This project is partly based on the WYOOS tutorial series. Although many things from the tutorial have been changed or removed for various reasons.

Current bugs may include, window input for scripts being janky, paint width being difficult, small GUI errors when drawing programs, and other stuff too long to list here.

For the next major update I plan on further building the network stack and implement internet functionality, along with more advanced graphical applications and custom media encodings.

Why did you make an entire OS after this character? Are you obsessed or something? No, I just thought it would be funny.

Important Command List


GENERIC


"say (string)" - print out whatever arguments were passed.

"help" - list common commands and keyboard shortcuts.

"clear" - clear text from screen.


DRIVERS/SYSTEM

"delay (int)" - use the PIT timer to delay the system by (int) number of milliseconds.

"beep (int)" - use the pc speaker to beep at (int) frequency.

"rmem (int)" - read value from (int) memory address.

"wmem (int) (int)" - write 2nd (int) value to 1st (int) memory address.

"rdisk (int) (int)" - read from 1st (int) sector number for 2nd (int) number of bytes.

"wdisk (int) (string)" - write (string) data to (int) sector.


FILESYSTEM

"files" - list all known files and number of files currently allocated.

"tag (string) (file)" - assign an organizational tag (string) to given files.

"size (file)" - print out size of (file) in bytes.

"delete (file)" - deletes and removes (file) from filesystem.


AYUMUSCRIPT

"int (string) (int)" - define variable with name (string) and value (int).

"+ (string) (int)" - add value (int) to variable (string).

"- (string) (int)" - subtract value (int) from variable (string).

"* (string) (int)" - multiply value (int) by variable (string).

"/ (string) (int)" - divide variable (string) by value (int).

"if/loop (var/int) (op) (var/int)" - determine if expression is true, if so nothing changes, if not, commands won't be processed.

"fi/pool" - allow command to be processed again.

"putpixel (int) (int) (int)" - draw pixel at x and y coordinates with given color value.

"window (string)" - create user window for graphical programming.

"drawpic (file)" - fill buffer of image onto graphical target.

"// (string)" - does nothing, meant for comments in AyumuScript files.

"ex (file)" - executes files as a script (singletasking).

"ext (file)" - executes files as a script (multitasking).