Michael C. Maggio
Digital Portfolio

technical skills
work experience
independent projects
contact & resume

Much of my on-the-job work is both proprietary and confidential and therefore cannot be posted on this website. All of the samples available below are either school related or personal. As a result, many of these are still in progress and not yet finished. For some examples of active websites, please see the independent projects page.

Table of Contents (for quick navigation)

Web/DB Development

Phorce - PHP Web Framework

    Phorce is a self-developed open-source web framework that I use for all my PHP websites. It is comprised of five components:

    • Common - Common classes used by all components
    • Reaction - Action-based Front-Controller / MVC
    • Inertia - PHP-X Tag Parsing Engine
    • Fusion - XML Binding Framework
    • Gravity - Database Persistence

    There were two primary motivations for the Phorce framework. The first was to assist in the development of a class project where I wanted to leverage an MVC framework similar to Apache Struts. The second was that there were no comparable frameworks available in PHP that compared to what was offered in Java. As a result, in 2003 I wrote my own MVC framework and an object-relational DB abstraction layer. Early in 2005, to support some development work for clients, I added a third component to the framework: PHP custom tags, similar to those which JSP offers. And again in 2007, I added an XML binding component (similar to JAXB) to support the handling of XML data sources and configuration files.

    You can find more information about Phorce at the following sites:

    Please keep in mind that Phorce is very much a work in progress. Fusion was most recently re-architected and is in a state I am happy with. Gravity is next to undergo a complete rewrite so it works more like Fusion (all object mappings should work alike, no?), so it is not in Subversion yet. The documentation of Fusion and the Common components is my current focus. Future plans include partial rewrites of Reaction and Inertia and possibly the addition of an Inversion of Control container.

PHP File Manager

    This is a file manager written using the Phorce framework. Currently, it can only browse/download files, but I plan to add upload/rename/delete capabilities and user authentication. To see it in action (and browse all source files) access the link below. Note that this was written on a much older version of Phorce (circa 2006) and it has undergone many revisions since that time.

  • File Manager - Online working sample

Objix Inc

    Objix is the name of the website hosting and software development company that I own. Most web development that I do for my clients is done with PHP and Phorce. I own and administer the server, which is running the LAMP platform.

  • Corporate Site

CIS 431 - Intro to Database Systems

    The final project in this class was to design, code, install, and test a working application that interfaces with a database. I chose a web-based registration system for universities. The "PHP Web Framework" (what has now become Phorce) was constructed for this very project.

  • Cover Page - cover page for the project
  • Source Code - the PHP source code
  • System Documentation - database schemas and entity relationship diagrams
  • Test Cases - Screen-captured proof that the system works correctly and does not violate database constraints
  • User Documentation - With pictures

Game Development

Exodus Project

    The Exodus Project (website here) is a series of patches that add EGA graphics, MIDI music, a frame limiter, and other fixes to some of the older Ultima games. Since much of the Exodus Project was done in assembly language, I needed a good way to dig through the assembly code and remember where I left off. So, using trusty ol' MS-DOS DEBUG, I decoded the executables and dumped the output into a Word document for easy maintenance and reference. (Open the document map to navigate the source code.) Below are those documents. My changes to the binaries are bolded.

  • U2 Assembly - a dump of Ultima 2's ULTIMAII.EXE
  • U3 Assembly - a dump of Ultima 3's EXODUS.ULT
  • U5 Assembly - a dump of Ultima 5's ULTIMA.EXE
  • Also, to support this effort, I coded several drivers to interface with the video and audio hardware. In Ultima 2 and 3 only one video mode was used (CGA) and there were no drivers at all; the video code was previously embedded within the executable. As a result, I had to recode much of the CGA logic as separate driver files then assemble them. The drivers include: CGA (regular), CGA Composite simulation, EGA, and MIDI (via John Miles' XMI MIDPAK driver). Launcher programs which wrapped the game executable and pre-loaded the drivers were also written.

  • Drivers & Launchers

    In addition to editing the executable code, the game graphics also had to be updated. For this purpose I wrote Diligence.

Diligence (part of Exodus Project)

    This program is a part of the Exodus Project. It is essentially a graphic tile editor. Since the only GUI programming I've ever done has been web-based, I stuck to the 16-colored Linux xterm console instead - just to save time. I aspire to rewrite this in SDL next, so the graphics can be properly edited in a windowed GUI. As a result, it's a bit of a work-in-progress.

  • Diligence - an Ultima tileset viewer for the Linux console written in C++


    Yet another hack of a game conducted in assembly language (website here), the primary effort of this project was to create a driver for older Sierra games where both the General MIDI and digital audio capabilities of the Sound Blaster cards were available. Prior to the AWE32, SoundBlaster cards did not have General MIDI capability. Likewise, most GM capable cards of the time did not have digital audio. Sierra later released a GM driver for some of their older products so that the AWE32 and later could play music using their superior GM wavetable synth. However they neglected to add in support for digital sound effects which the older OPL3 (Adlib-based FM synth) drivers had. This driver adds that support. It's basically a modified GENMIDI.DRV with the sound effects code from MTBLAST.DRV appended to the driver (and some other glue to make it go). It works with SQ1, LSL1, and LSL5.

  • GMBLAST Assembly - A dump of the modifications to GENMIDI.DRV

CS 485 - Game Programming I (Quake Mod)

    Part of the requirements for this class was to construct a simple mod for Quake 2 and a total conversion mod (sans new graphics) for Quake 3. The mods are all written in C. Both the project proposals and executables (including source) are below.

  • CheeseQuake Proposal
  • Quake 2 Mod
  • Archers 3 Proposal
  • Quake 3 Mod