icon

Breakout

My end of the quarter projects are finally over. I still have an interview with my professor about the video pipeline project tomorrow, but the code is all done and tested. And my processor now has a functioning data cache, which completed the final hardware lab. My game is finished, and my class voted it the best, with “Xtreme Pong” taking second, and an interesting hybrid between Dance Dance Revolution and Simon in third.

The other functioning games were mostly basic Pong implementations. There were a few other interesting ones that people had attempted, but weren’t entirely working. Someone tried Space Invaders, but it’s still being worked on. A Hitchhiker’s Guide-themed Galaga clone was making good progress, until its authors ran into the 768-word instruction memory/256-word data memory limitation and had to start implementing a hardware cache, which unfortunately wasn’t finished in time. My TA was attempting a Trogdor the Burninator implementation, and did some neat high-res animated graphics by adding custom characters to the VGA ROM, but never got the game logic completely working.

Writing games for our boards was a neat idea, because when people ask me what I’m doing in my classes, I can say “I programmed this, and I built the computer that it’s running on mostly from scratch,” which summarizes everything pretty nicely without having to go into the details of how a processor works or what an FPGA chip is. Unfortunately, it’s hard for me to show the game to other people, because not very many people have a Xilinx development board lying around.

Fortunately, C is a very portable language. By adding a wrapper that emulates the memory-mapped I/O in my processor, making a Macintosh port wasn’t too difficult. So, anyone with a Mac can now download and play the game that I wrote for my processor as my CSE378 final project.

Here is the link to download the file. It’s a universal binary and should run on recent versions of Mac OS X.

Breakout on my processor!
Breakout on my processor!
At the beginning of the quarter I predicted that I’d be practically living in the hardware lab towards the end of the quarter, and I couldn’t have been more correct. Since Friday, I’ve done practically nothing besides go to class, work in the lab, eat, and sleep.

This quarter I found my workload to be heavy but manageable, since assignments were usually spaced out pretty well between the two classes. The end of the quarter aligns all of the big projects into the same time space, though.

Yesterday I put the finishing touches on my video pipeline, the final project for CSE467. The completed pipeline takes an incoming video signal (from a camera, DVD player, etc.) and can scale, rotate, and translate the image, which is displayed on a VGA monitor. The last step was to implement interpolation so the image can be scaled and rotated without jagged edges and blocky pixels. All of this happens in real time, so if the video is coming from a DVD, for example, you actually see the video image moving as it’s being rotated, scaled, etc.

Last night (and well into early morning today) I finished my processor (CSE 378) and implemented a data cache in hardware. Having the data cache means that my processor now has access to several kilobytes of memory, since it can access the RAMs on the chip rather than just using the leftover registers.

The final assignment for the class was to write a game (Pong or better) to run on our processor to demonstrate that it works. I wrote a version of breakout. It’s pretty cool.

In an hour, my 378 class will meet in the hardware lab and we’ll all demonstrate our games while eating pizza for lunch, and we’ll vote to decide whose game is best. After that, I’ll be done with classes for the quarter, and ready to start my final exams tomorrow.