LinkedIn
PDF

Matt Ervin

Software Architect and Engineer


Portfolio

Quad-coptor flight controls system

Type: iOS App/Embedded System
Platform: iOS/Linux

imp Software, LLC

Section coming soon.


Bingo Gaming Machine

Type: PC Software/Embedded System
Platform: Windows XP Embedded

imp Software, LLC

Section coming soon.


Casino King/Brilliant Bet Gaming Platform

Type: PC Software/Embedded System
Platform: Embedded Linux

Fleetwood

Section coming soon.


Next Generation Gaming Machine

Type: PC Software/Embedded System
Platform: Windows XP Embedded

U1 Gaming

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.

My primary responsibility on this project was to act as software architect and technical lead. It was my responsibility to oversee and participate in the development of all aspects of the system to insure high quality and the reliability of the system as a whole.

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

Real-time IGT-SAS communication solution for GnSYS casino management system

Type: PC Server Software
Platform: Windows XP/2003

GATE+, S.A.

This component enables communication between casino management server software and the electronic gaming machines in the casino in real time. It allows the casino management system to obtain play statistics, meters (financial and other), event notifications, and hardware status. It also provides a command and control interface for the custom player tracking hardware and other miscellaneous features.

It is composed of two primary layers: the managed .NET based framework (implemented in C#) used by application developers and the unmanaged real-time communication layer (implemented in C++.) The framework API is fully documented and an XML File provided for Visual Studio .NET's IDE. This component also includes a sophisticated custom built (by me) node-locked licensing mechanism used to prevent piracy and abuse. Internally, the component is multithreaded in both layers utilizing .NET synchronization domains on top and Win32 primitives on bottom. Extensive logging (with log levels) is also provided by the component to aid application developers with their debugging. Communication with the gaming machines (GMs) is provided primarily by the IGT-SAS protocol, which is a multi-drop shared bus protocol (similar to token ring.) This component manages the bus to insure that each GM remains active and communicating as efficiently as possible.


Real-time Gaming Machine Interface Board (GMIB) for GnSYS casino management system

Type: Embedded Firmware
Platform: PIC 18F252

GATE+, S.A.

This device serves as a slot machine interface (real-time IGT SAS protocol), peripheral monitor and controller, and provides value added features such as player tracking. Its computing power is provided by three PIC 18F252's interconnected by a shared I2C bus. I designed and implemented the firmware for all three devices from scratch (bare metal; no BSP). This includes:


Front End Processor Simulator

Type: PC Software
Platform: Windows NT 4.0/2000

VLC (division of IGT)

Screen shots can be found here. Be aware that the GUI is deceptively simple (a hallmark of good design) and not all views are presented.

This application simulates any number of Host/Front End Processors (FEP's) on up to 255 communication buses. The number of machines that can be simulated is limited primarily by the amount of available memory. The primary purpose of this simulator is to aid the developers of the systems that interact with Hosts and/or FEP's. Typically they would require a $6,000,000 Host System and several FEP's. But Host Systems and FEP's are designed for real-world operation and as such are very cumbersome when used for development and testing. Also, the Host System and FEP's are designed to work under specific [ideal] circumstances. When subjected to fault conditions they tend to crash hard and restarting Hosts and FEP's is time consuming and error prone. All this makes it very difficult to develop and test against them. FEPSim allows the user to simulate all Host/FEP operations and fault conditions quickly and easily and it records all activity to aid in debugging (especially communications, which is where most development problems arise).

Communication between the simulator and the systems being developed is accomplished via an RS-485 type serial bus over which packetized real-time communication occurs, which is identical to the real world environment. FEPSim employs triple DES encryption in feedback mode for packet validation and MD5 and CRC hashes for data validation. FEPSim is fully multithreaded, uses MFC for the user interface portion, and is implemented in C++. Except for a few standard user interface controls, I developed everything from scratch.

I'm responsible for nearly everything about this project, from the functional requirements to the implementation. For the most part, managers would provide me with a simple set of rough requirements and I'd take it from there - refining the requirements and producing a final tested product. This large scale project employed Microsoft Visual C++ 6.0 and Source Control (MKS).


Gaming Machine Simulator

Type: PC Software
Platform: Windows NT 4.0/2000

VLC (division of IGT)

Screen shots can be found here. Be aware that the GUI is deceptively simple (a hallmark of good design) and not all views are presented.

This application simulates several thousand Electronic Gaming Machines (GM's) on up to 255 communication buses. The number of machines that can be simulated is limited primarily by the amount of available memory. The primary purpose of this simulator is to aid the developers of the systems that use/manage GM's. Typically they would require several banks of GM's, which costs hundreds of thousands of dollars and still doesn't provide a fully accurate or flexible test environment. GMSim allows the user to simulate all GM operations and fault conditions quickly and easily and it records all activity to aid in debugging (especially communications, which is where most development problems arise).

Communication between the simulator and the systems being developed is accomplished via an RS-485 type serial bus over which packetized real-time communication occurs, which is identical to the real world environment. GMSim employs triple DES encryption for data protection and MD5 and CRC hashes for data validation. GMSim is fully multithreaded, uses MFC for the user interface portion, and is implemented in C++. Except for a few standard user interface controls, I developed everything from scratch.

I'm responsible for nearly everything about this project, from the functional requirements to the implementation. For the most part, managers would provide me with a simple set of rough requirements and I'd take it from there - refining the requirements and producing a final tested product. This large scale project required about two years of development time. Microsoft Visual C++ 6.0 and Source Control (MKS) were used for the development of this product.


Multi-threaded Game OS w/ devices and Java

Type: Embedded System
Platform: MC68360

VLC (division of IGT)

This is an operating system used in dedicated gaming products produced by Anchor Gaming//VLC. It is multithreaded and the primary application development language is Java (FastJ). The operating system is an object oriented C++ system (based on the Nucleus real-time OS kernel) that makes use of patterns and custom built components, such as collections, intelligent pointers, and observers.


Firmware Integrity Test System

Type: Embedded System
Platform: MC68360

VLC (division of IGT)

This is a basic single-threaded operating system with interrupt support. Its purpose is to execute specific device tests to check the integrity of new boards fresh from manufacturing, as well as debug existing systems in the field. This system is controlled by a PC supervisor, which executes tests and records results.


Business Logic CORBA Service

Type: Server Software
Platform: SOLARIS

iMALL Inc.

This service provides the shopping cart and purchase functionality for iMALL. The functionality provided by this service was originally implemented in Perl. I learned Perl in order to use this code during analysis to determine the requirements of the service. The shopping cart is a collection of items, associated with a user, which the user intends to purchase. Items can be added to and removed from this collection via a CORBA interface. The state of a user's shopping cart can also be accessed via the CORBA interface. When a user purchases an item, the iMALL statistics are updated, a purchase order is sent to the merchant, a receipt is e-mailed to the customer, and many other detail operations are carried out. There are also other miscellaneous related CORBA operations supported by this service.


Simulation Virtual Machine

Type: PC Software
Platform: Windows 95/NT 4.0

ProModel Corporation

This is a primary component in a simulation engine. It is what allows the user to customize the functions and operation of the engine. It includes a machine language specification and an interpreter, i.e. virtual machine. This is very similar to the popular Java virtual machine your web-browser uses to execute Java applets. This component was built using pure platform independent C++.


Simulation Virtual Machine Debugger

Type: PC Software
Platform: Windows NT 4.0

ProModel Corporation

This is a primary component in a simulation engine. It is what allows the user to interact with the functions and operation of the engine in real time. This component was built using C++ and hand-written MFC, i.e. the wizards were not used.


Standard C++ development components

Type: Autonomous Reusable Software

ProModel Corporation

These are object components developed using C++ which are intended to expedite new development and minimize the introduction of bugs in new development. They consist of ordered and sorted collections along with other miscellaneous common or useful tools. Also included are design patterns, e.g. subject/observer and context-unique object management.


SSThingy

Type: PC Software
Platform: Windows 95/NT 4.0

Dementia Software

SSThingy allows you to easily change, manage, start, and stop your screen saver. It has an easy to use interface and help system. The screen saver can be activated, enabled, and disabled simply by moving the mouse to a specific location on the screen or by pressing a key sequence you define. Sounds and information dialog boxes may also be bound to any of these operations. SSThingy remains hidden while your system is running and can be easily accessed via the system tray.

Screen shots can be viewed here.

DSLogoCycler

Type: PC Software
Platform: Windows 95/NT 4.0

Dementia Software

LogoCycler is an application that allows you to manage and automatically cycle your signon, shutdown, and signoff logo screens as well as your desktop wallpaper. It supports forward, backward, and random cycling in units of seconds, minutes, hours, etc. or each time you boot your machine. LogoCycler allows you to use any bitmap image for system logos because it will automatically scale and color correct them if necessary. Wallpaper can even be stretched to fit your entire desktop. (It will optionally keep the aspect ratio of the image as well.) A background color can also be set for each wallpaper image so your icons always look their best. LogoCycler has a powerful and easy to use user interface which includes context sensitive help and an image preview area.

Screen shots can be viewed here.

Lenscard machine sub-systems

Type: Embedded System
Platform: 6805

Hybrid Microsystems Inc.

Each lenscard machine subsystem is hosted on a MC68HC05 custom-built platform. Overall, these systems handle the feeding of raw material into the lenscard machines processing stages and handle the lamination of cards. Each sub-system communicates with a supervisor via a serial packet network and executes as a fairly simple state machine with a specific purpose. Each sub-system was implemented in pure assembly language and is executed from EPROM. Each sub-system was also developed using structured design and state machine principals.


Compilers/Assemblers

Type: PC Software
Platform: Windows 3.1

Hybrid Microsystems Inc.

An assembler to compile assembly language for the 6805 and 6811 microcontrollers. This includes complex data types (i.e. structures and unions), segmented architecture, macros, and multiple nested include files. These assemblers run on the Microsoft Windows 3.1 (or later) platform and support the DDE interface for seamless integration with development environments.


Thermal film processing embedded systems

Type: Embedded System
Platform: 6811

Hybrid Microsystems Inc.

This sub-system thermally develops microfiche. Individual fiche enter the system, get developed, then exit. The primary purpose of this system is to turn the thermal drum at a constant velocity and keep the drum outer temperature constant. Both the drum velocity and outer temperature are dynamically definable. An open circuit algorithm is used to maintain the outer drum temperature. This is done through approximation and a fairly constant physical environment. The drum is turned by an electric DC motor controlled via a D/A converter. The drum heater temperature is controlled by pulse modulating the power to the heater. An A/D converter was also used in conjunction with a thermometer to measure the instantaneous outer drum temperature. This is a fault tolerant system designed to handle fiche jams and miscellaneous other problems gracefully. A watchdog is used to handle uncontrollable circumstances. Communication with this system for debugging and supervisor control is accomplished via a serial network, which supports both packet and streaming protocols. The primary language used to implement this system was ANSI C. Assembly language was used for the real-time microkernel and device drivers.


Film transport/management embedded systems

Type: Embedded System
Platform: 6811, 6805

Hybrid Microsystems Inc.

This sub-system films images onto a piece of microfilm and cuts the film into fiche. Images are filmed via a stationary laser-filming head. This system controls the position of the film relative to the filming head via a two-dimensional film transport and also cuts the completed fiche in order for it to be processed by the thermal processor. This system also handles loading and unloading of raw filming material. Both 16 and 105-millimeter film are supported. This is a fault tolerant system designed to handle film jams, stepper motor error, cutter jams, and miscellaneous other problems gracefully. A watchdog is used to handle uncontrollable circumstances. Communication with this system for debugging and supervisor control is accomplished via a serial network, which supports both packet and streaming protocols. Real-time control of ramping stepper motors is done by independent sub-systems housed on 6805 platforms. Communication between these and the 6811 housed primary system is done via a custom-built high-speed synchronous serial link. The primary language used to implement this system was ANSI C. Assembly language was used for the real-time microkernel and device drivers. It was also used to implement the ramping stepper motor algorithms (for inertia control) in the 6805 sub-systems.