Riffraff Compiler (2004)
An OOP-less Java-to-Sparc compiler. Nothing particularly impressive. No screenshots.
OccamC Interpreter (2004)
OccamC is a C-ish hardware description language for designing asynchronous self-timed circuits. It is based roughly on the Occam HDL, hence the name OccamC. This interpreter was done as part of my class project for CS6830. Prof. Brunvand said he will try to trick some students next year to implement the next step: a synthesizer.
Aierra Terrain Creation Engine (2003)
Aierra was part of my plans to one day (finally) make a good RPG. This terrain creation tool was done as part of my Graphics II Final Project. It allows the user to create and morph terrain in real-time, paint and blend textures, add lighting, shadows, water, etc. It uses OpenGL.
Zilch Time Tracking Device (2003)
This device was created as my CE Senior Project, along with Justin Olson and Russell Christensen. It was intended to be a cheap and simple device so its user can keep track of time spending habits easily. In practice, we encountered much trouble trying to make the device small, physically stable, has long battery life and requires minimal maintenancce etc to be truly practical for carrying around in our pockets. This project will probably be re-done sometimes in the future. It was based on the Atmega13 microcontroller.
Concept art (top) and actual device (bottom)
Modern Warfare (2003)
Modern Warfare is a 3D multiplayer-only real-time strategy game. It can support 4 players with 1,000 units, all moving, firing and exploding at once. We achieved this by designing our system so all connected computers can remain exactly synchronized with only minimal data (inputs, gamestate number) sent over the network.
We held two open beta testing sessions, which really helped us make ModernWarefare a very polished and fun game to play.
The project was completed by 3 students, Russell Christensen, Todd Smith, and myself. It took us about 4 months.
I was in charge of the graphics engine, input, and network interface. To accomplish this, I wrote code to deal with DirectX and provide simpler abstraction of the hardware.
In addition to the engine work, I wrote the battle mode, which handles the simulation of all the units, bullets, debris and particles all over the battlefield. I was also in charge of handling the multiplayer issues, such as establishing connections, deciding on communications convention and ensuring strict game state synchronization.
Although I am not an artist, I was also responsible for creating
all the visual art work, which includes the 3D models and textures,
all the screens and icons, and the opening movie. This explains why the game looks like crap.
Probably my most significant contribution was my understanding of the entire program, overview and details. I was responsible for integrating and debugging issues, particularly multiplayer synchronization bugs.
Links to project home page and sources, courtesy of Todd. Warning: check the hardware requirement. For simplicity, we only test and support the GeForce3Ti.
Console Revolution 16 aka CR16 (2002)
In this class, we went beyond the course requirement and built
a game console. We designed our own 5MHz 5-stage pipelined RISC
processor in VHDL from scratch, and implemented it using Xess FPGA. The processor executes our custom instruction set, which we loosely based on the CR16 architecture with some added graphics ops. We created our own hardware-buffered VGA controller, sound circuit, and an interface
to a NES gamepad. We even got slashdotted.
We then wrote our own CASM compiler, which can compile our self-defined
C-Assembly hybrid language to machine executable. Using this, we
wrote 2 games: Space Invaders and Tetris.
The project was completed by 4 students, Justin Olson, Russell , Ben Holt, and myself. It took us about 4 months.
Near the beginning of the semester, I convinced my team into following our own tool chain rather than the class's traditional way which I deem both inefficient and erroneous. This proved to be a very good decision (IMHO) later on when we finished the entire project well beyond the requirements and a month sooner than all other groups. Our group was the only one to build a pipelined system, and also the only group to have both video and audio. And we were happy with our methods and had minimal frustration.
I was heavily involved in the design issues, including the pipeline components and data paths, the three separate memory units, and the I/O controller. Additionally, I designed and created the VGA controller. I read the specifications on the timing of the VGA, and built a fast, low resolution system that had built-in double buffering support.
Another significant work I did was the CASM compiler. While other groups wrote simple programs in straight assembly, we wanted to create complex games 10x-30x larger. To accomplish that, I wrote a compiler that could handle expression nesting, structured code, function calls, and also come with built-in libraries to handle graphics. It was reasonably optimized for our particular system, which I was well familiar with.
Probably my most significant contribution was that I was the one who understood the entire system, from the top level architecture down to each wire and flag. I was in charge of intergrating, debugging, and in general, making the thing run
Links to our source code and final_report.pdf.
eXtreme Racing (2001)
A 3D racing game developed as a final project for my Software Practice class. A team of 3 including Gyounghwa Choikim, Napong Sroykum, and myself completed this project in only 1 month.
Hyper Battle (1999)
A space-based real-time strategy game. This game was submitted to, and subsequently won a consolation prize from the National Small Software Development Competition of Thailand in 1999. Approximately 6 months of work.
RPG Battle Engine (1999)
An attempt to create a final fantasy VII-like game. The project was abandoned when I realized how much art work was required. The battle mode was partially playable.Took about 2 months.
And many other old, crappy, childhood projects of which I have no screenshots, executable,
code, etc. I am not even sure what I named them.














