schuylermartin45 / seegol

Master's Thesis Project: Shoyler's Extremely Experimental Graphical Operating Library (SeeGOL)
https://shoyler.com/html/projects.html
MIT License
7 stars 1 forks source link
gcc graphics-library operating-system qemu vga

HSC: Shoyler's Extremely Experimental Graphical Operating Library - SeeGOL

Author: Schuyler Martin sam8050@rit.edu

alt tag

About

SeeGOL (pronounced sea-gull) is my final graduate project. The end goal is to develop a graphics library/windowing system to 16-bit x86 processors (i386 and above).

Original Plan

I originally wanted to develop a library for the IBM PCjr. That has proven to be too difficult using modern tools. There is a branch, pcjr_8086_compat, which includes my attempt at converting gcc's i386 assembly to only valid instructions on the 8086.

Notes on the PCjr

The PCjr model I have has 128kb of RAM and a 3.5in floppy drive that can only read the older "1mb" IBM floppy format (as opposed to the much more common 2.44mb format most people are probably familiar with).

Setup

SeeGOL was originally built on a Fedora 24 workstation using gcc 6.3.1. Although it should be able to be built on almost any reasonable Linux system, I have run into issues with the custom image compression Python scripts running off of older versions of the Python 3 interpreter on Debian.

The Makefile is configured to warn and error-out on missing software build dependencies.

Dependencies

These programs are necessary to build and install

Compiling from Source

To compile all of the x86 and C files and put them into a single flat binary:

make see_gol

To build the complete OS image, targetted to boot from a floppy:

make floppy.img

To remove all binaries and OS images:

make clean

Running with QEMU

There is a provided bash script so that the OS can be easily run with QEMU

./tools/i386_qemu.sh

Running with Physical Hardware

Assuming the floppy is mounted at /dev/fd0 (which is common on Linux systems) simply run:

make floppy

Otherwise dd the image file to the floppy:

dd if=/path/to/floppy.img of=/path/to/floppy

To just build the floppy image:

make floppy.img

Similarly, usb.img and usb make directives also exist. usb assumes the drive is at /dev/sdj (because that's the location my college desktop used).

After making any necessary changes to the boot order via a machine's BIOS settings, SeeGOL should be bootable from this floppy on almost any Intel x86 computer. Modern machines that do not have a floppy drive can usually boot See warning notes below for further information.

Warnings

Obviously this project comes without any warranties. The software provided has not been extensively tested across all possible hardware configurations. Although unlikely, since this OS does interact directly with the hardware, it could potentially damage it.

Run at your own risk.

Note on running this project on anything that isn't a PCjr

Although SeeGOL should run on any x86 system created after the PCjr (the x86 architecture is "backwards compatible to the dawn of time"), SeeGOL is not guaranteed to run properly on anything other than the PCjr. The main concern is that the PCjr uses the CGA graphics chip, as opposed to the much more common VGA chip. Most modern graphics cards, on-processor graphics chips, and emulators provide backwards-compatibility support for VGA. Although CGA and VGA both come from IBM and work in similar ways, VGA is not a direct descendant of CGA. Therefore the OS may not appear like it does on the PCjr across all systems or it may not work at all.

Directories

Here is a quick description of the top-level directories. Some of these directories have their own READMEs.

bin/

Stores binary objects (compiled code).

dgb_bin/

Stores compile-time debugging information. These are files that list the source code and compiled assembly instructions together with memory addresses.

docs/

Extensive documentation and presentations on the project.

img/

Stores the image files that can be dd'd to storage media and used to boot the OS.

media/

Contains media content not directly packaged into the OS.

old/

Deprecated code that is kept around as reference material.

src/

Source code directory for the project.

tools/

Includes scripts and other helpful tools used to run and debug the OS.

User Manual

SeeGOL comes with a built-in user manual. A help menu is accesible from both the main GUI menus and from SeeSH (the SeeGOL SHell).

Design

For a complete design overview, please see the docs/ directory.

Rolling Status Log

This a higher-level discussion of the project status while in development.

January 4th, 2017

January 17, 2017

February 1, 2017

February 13, 2017

February 27, 2017

A few major bugs/realizations came out of this past weekend, while laying the ground work for SeeGOL's image drawing capabilities.

February 28, 2017