This is a cutting edge electronic gaming machine designed for the Montana
and Nevada legalized gaming markets. An electronic gaming machine is a
gambling device used to play poker, keno, and spinning reel games. This
machine is built on modified commercial PC hardware, a custom PCI logic board,
and Microsoft Windows XP Embedded. It is a high reliability robust system that
is designed to be always on and be power loss fault tolerant so it will
pick up right where it left off after either a reset or when power is reapplied.
The machine conforms to both hard and soft real-time constraints and includes
a custom built root and chain of trust system to prevent execution of untrusted
software. I cannot go into to much detail regarding the design of the machine
or its software systems due to intellectual property rights and a non-disclosure
agreement, but what I can say is this project was very large. It utilized and
combined several technologies, required roughly four years to completely develop,
and a team composed of an average of four mid to senior level software engineers.
This list summarizes most of the skills I used and technologies I developed over the course of this project:
PC System BIOS development (x86 assembly) | PCI Option BIOS development (x86 assembly, C, C++) |
x86 PC arch/sys programming | Cryptography (stackless CRC impl, MD4, MD5, and [3]DES) |
Pseudo random number generation (linear congruential) | Root/chain of trust system |
Windows XP device drivers (WDM and KMDF) | Windows XP Embedded (Target and Component Design) |
Win32 applications | Win32 services |
DirectSound and DirectMusic | Windows XP Internals (PE-COFF files, process validation) |
Extensive multi-threading | Real-time programming |
Extensive serial communications | Extensive software architecture and design patterns |
System and application infrastructure | Myriad foundation components (mostly C++) |
Persistence framework development | Native Macromedia Flash support |
Custom object-relational mapping mechanism | Custom object [de]serialization mechanism |
Microsoft Foundation Classes (MFC) | System Build and Deployment (tools, scripts, etc.) |
Tool chain (VS .NET code gen macros, etc) | Unit test application framework |
Unit tests | Many custom utilities |
Several formal specifications | Extensive UML modeling |
Coding standards | Mentoring |
Personnel management | Information Technology Management |