[Spring 2003]
For my CS Senior Project, Usit Duongsaa, Todd Smith, and myself
wrote a video game. The game idea is our own essentially it is an RTS game where you command units in an overhead mode and when they come in contact with each other you can zoom into the battle to control the units. The ultimate goal of the game is world domination. Our goal with this project was to make a complete game that was fun to play. From the feedback that we have received I feel like we have been very successful. The website of the project is available here, including a listing of the source code which is under a BSD license.Tools: Visual Studio .NET 2002, DirectX SDK 8.1, Perforce
[Fall 2002]
I got slashdotted, click here to go to the slashdot story.
In my Computer Design class the professor allowed my team to take a different approach from the rest of the class. So we designed a simple game console that we call the Console Revolution 16 or CR-16 for short. The inspiration behind the name is we use the CR-16 instruction set so we might as well overload the acronym.
The Console Revolution 16 is a five stage pipelined processor capable of doing an instruction every cycle at 5 MHz. However after hazard detection our demo applications run around 3 MHz. What makes us stand out from the rest of the class is our sample applications. I wrote a Tetris game for our system and Usit wrote a Space Invaders game. To make programs of this size possible in our limited time budget we wrote C++ functions that when called emit assembly code for our processor. Then we extended the system to support expressions, conditionals, loop statements, function calls, and manual variable name to register mapping. We call the system CASM, meaning C-like Assembly. I wrote the hazard detection, function calls, for loops, and came up with a recommended programming style. If you want to get a better idea of what I mean here is the source code to Tetris.
I wrote an interface to a Nintendo Controller for input and Usit designed a VGA graphics controller for output. Our resolution is 64 pixels by 30 pixels by 2 bit color. Ben and Usit put together a sound circuit so when Tetris pieces fall you get noise and when your Space Invader space ship shoots at the enemy you hear it fire. We made some movies of our games in action that you will have to check out to really see how this all fits together.
If you want more details about what we have done here is our final report. The final report and the movies make reference to a CD that contains all of our VHDL and C++ source code. If you are interested in getting a hold of this so you can play the games on your own XSA-50 board then please contact me.
The other members of my team were Usit Duongsaa, Justin Olson, Ben Holt.
Software Tools Used: Symphony VHDL compiler, Xilinx Webpack, CVS, gcc 2.95, Visual Studio .NET, emacs, Crimson Editor, Windows XP, Windows Remote Desktop, cygwin
Some Photos:
The Tetris Game I wrote. To see the game in action here is an 18MB Windows Media File or a mirror site. Or a 78MB MPEG File.
My version of the Console Revolution 16. I took an old Nintendo and replaced the contents with the XSA-50 Board (A SpartanII FPGA) and the XSA Extender board that we use to run our game console. The extra cable coming out is the VGA cord. If you click on the picture for a larger version you will notice that we have the power light on.
Same thing but I opened up the system so you can see the inside is not really a Nintendo.
The opening screen of Usit’s Space Invaders game
Space Invaders game play footage. To see the game in action here is a 21MB Windows Media File. Or an 89MB MPEG File.
If you have any comments please feel free to email me.
[Fall 2002]
For my networking course Luke Stebbing and I wrote a peer to peer file sharing program. The specs asked us to care about anonymity at the expense of bandwidth. As a result searching is distributed across all nodes, and file transfers do not short circuit directly back to the searcher of the file. Rather the file is sent back through the search path. We have only tested this on Solaris, but it should work fine on Linux or any other POSIX compliant OS.
Tools: emacs, gcc 2.95, CVS, SCons build system
[Spring 2002]
Nate Beddes, some guy, and myself implemented a tango compiler for a compilers course we took. We wrote the compiler in C++ which was a lot of fun. Because of course requirements we compile tango into Sparc assembly. While Sparc assembly is more beautiful than x86 assembly it is annoying needing to have a Sparc computer to demo what we have done.
Tools: emacs, Solaris 8, gcc 2.95, CVS, SCons build system
[Fall 2001]
My Operating System’s project was done as a team of 3. We wrote certain parts of a toy operating system named Yalnix. What was abstracted out of this project, unfortunately was the interfacing directly with the hardware. While I felt like I was conceptually learning from this project, it really felt a lot like we were writing a very simple program loader rather than an OS.
Tools: emacs, Solaris 8, RCS
[Fall 2000]
When I took Software Practice we wrote a LISP interpreter as a semester long project. At the end of the semester my team had five people on it. Our focus at the end of the course was to make it more fully understand the LISP language and add more features. It is not fully featured enough to be used for anything other than a toy. But it was a really fun project.
Tools: Windows NT/2000, Visual Studio 6.0