Welcome to my home page. My name is Bart and I'm an electrical engineer by education presently working as a quant developer on an algorithmic options trading desk. In my spare time, I enjoy writing software (especially emulators and games), investing, paleontology, and hiking. From time to time, I'll be adding some of my work here.

Software


Supermodel

Supermodel emulates Sega's Model 3 arcade platform, allowing a number of groundbreaking 3D arcade classics to be played on Windows, Linux, and Mac OS. Model 3 made its debut in 1996 with Virtua Fighter 3 and Scud Race and boasted the most powerful 3D gaming hardware of the era. Developed by Real3D, with a heritage reaching back to some of the earliest 3D flight simulators, Model 3 featured capabilities such as hardware transform and lighting that would not appear in consumer GPUs for several years.

Popular games running in Supermodel. From left to right: Virtua Fighter 3, Scud Race, and Star Wars Trilogy.

This project began its life way back in 2003 as a collaboration between Ville Linde, Stefano Teso, and myself. We reversed engineered the system from scratch using little more than ROM images and produced a functional but incomplete and largely unplayable emulator. The project eventually lost momentum, I went off to grad school, and Ville ported it to MAME. In late 2010, I decided to rewrite it from scratch and get it to a playable state. The first version of Supermodel was released on April 1, 2011.

Supermodel is written in C++ and uses OpenGL and SDL. On Windows, it supports force feedback and XBox 360 controllers.

libmodel3

Recently, I successfully booted up what is probably the first new code written for Model 3 in 17 years -- and certainly the first-ever written by someone outside of Sega and Real3D -- on an actual board. Originally purchased to help reverse engineer Model 3, my Virtua Fighter 3 board ended up gathering dust for years until December 2015 when I found myself home for the holidays and resolved to finally put it to use. You can read a more complete discussion here.

libmodel3 is written in C and PowerPC assembly language. Running code on an undocumented bare-metal board without the aid of any official firmware turned out to be more tricky than expected and I only got as far as displaying text using the 2D tile generator chip. To compile the code, you will need a powerpc-603e-eabi gcc cross-compiler and newlib. I built my own toolchain on Windows and would be happy to upload it. To program the ancient 27C4002 EPROMs, I used the MiniPro TL866 device programmer and a surplused UV eraser I found on eBay.

My Model 3 workspace and Virtua Fighter 3 board running the libmodel3 test program.

Really Old Stuff

I've been programming since elementary school. In high school, I learned assembly language and C, and explored a broad spectrum of topics ranging from firmware-level code to 3D graphics. Although I was fairly prolific, I produced few complete programs worth releasing (apart from a Sega Genesis emulator for DOS) because I always felt there was something new to learn about. Below are just a few of the more esoteric programs from that era lurking in my backup storage. Good luck trying to compile any of these!

  • 2D BSP trees (C, x86 assembly): a Win32 application to draw 2D maps and compile them into BSP trees, and a DOS-based 3D renderer to explore them.
  • 3D BSP trees (C, x86 assembly): a 3D BSP tree compiler and software 3D renderer.
  • Motorola 68K debugger for Sega Saturn (C, SH-2 and 68K assembly): an interactive debugger with support for single-stepping, breakpoints, setting registers, etc. The interface ran on DOS. Code was uploaded to the Saturn's audio co-processor using a Pro Action Replay catridge connected by cable to a special ISA card in the PC. I'm impressed with my younger self. If you're wondering whether I went to prom, the answer is 'no.'
  • Bitmapped graphics demo for Sega Saturn (C, SH-2 assembly): displays an 8bpp image on the Saturn using its video processor. Requires the same hardware setup as my 68K debugger. Saturn had impressively powerful 2D capabilities and I intended to write a game before moving on to other projects.

Hardware


BartStation: A Homebrew 8-bit Video Game System

This was one of my senior projects in college. It uses an 8-bit Zilog Z80 CPU and an FPGA for VGA video output. Game code is stored on a flash ROM chip and a Sega Genesis control pad is used for input. I entered it into a regional IEEE competition in 2006 and won!

The BartStation and me at an IEEE Region 6 event in 2006.

Semiconductor Research


My doctoral work involved modeling processes that occur during semiconductor device fabrication. Fabricating integrated circuits or solar cells is like baking a very complicated inedible cake. Materials are patterned in alternating layers atop a substrate (usually silicon). Heat treatments that can range as high as 1400° C are applied to drive materials into the substrate, grow films, repair damage, or control impurities and crystalline defects.

Conducting experiments and then measuring the results is costly and time-consuming. Wouldn't it be nice if physical models could be constructed and simulated on computers? That's the idea behind TCAD. Working with Prof. Scott Dunham at the University of Washington, I developed TCAD models for oxide precipitates and dislocation loops in silicon, two types of defects that can affect both wafer strength and the electrical performance of devices. I am no longer active in this field but you can read my dissertation and a paper on my oxide precipitate model below.