Expertise
More than twenty years of writing and implementing chip-level firmware and RTOS' on a variety of microprocessors and microcontrollers.
- Well-versed in the art of achieving minimum interrupt latency, state machine construction, and miserly power usage and control. Wrote RTOS' for ARM, X86, 8051, MIPS, 68xxx and other microprocessor and microcontroller configurations. Implemented commercial RTOS' (Thread-X, Nucleus, VxWorks, TICS) on the aforementioned processors.
- Write code in machine language, assembly language, C, Python, and Tcl. Wrote firmware drivers for USB 'device', DMA channels, SPI, I2C, UART, Parallel I/O, internal & external RAM, NAND & NOR memories, MMU, CF card, JPEG cores, etc. If there is a document describing the device's registers and protocol, I can write a firmware driver for it.
- Intimately familiar with and comfortable with all manner of instruments. Digital & analog scopes, logic analyzers, VOM, counters, waveform generators, protocol analyzers, etc.
- Use various GUI/debuggers: KEIL uVision5, ARM DS-5, IAR Imbedded Workbench, Codewarrior, Atmel SAM-ICE, KEIL Ulink Me, Ulink2, Ulink PRO, SEGGER, and numerous other GUI/debugging/ICE/JTAG systems.
- Use the following GUI style code editing environments: CodeWright, SlickEdit, BBEdit, XCode, and debugger imbedded editors.
- Many embedded firmware based products completed from inception, design, build, debug, produce, and deliver.
- Close personal working relationship with ARM national & regional sales force and local ARM firmware FAEs.
Keywords
Embedded, firmware, software, hardware interface, RTOS, OS, multi-tasking, drivers, state machines, interrupts, low power, flash, MMU, EEPROM, EEROM, NAND, NOR, ROM, ROM emulator, ICE, GUI, JTAG, ARM, Intel, GSM, ISDN, Ethernet, TCP/IP, CodeWright, SlickEdit, BBEdit, XCode, HTML, CSS, JavaScript.
Programming Philosophy
- I write well structured, maintainable code. The success or failure of any program is tightly coupled to how well it is structured. Poorly structured programs will quickly descend into chaos as requirements change and features are added. I focus on keeping things simple and easy to understand by everyone.
- I recognize and reuse design patterns. Development cycles are getting shorter and shorter, budgets are tighter than ever and products are expected to include a plethora of features. Starting from scratch and reinventing the wheel with each new development cycle is not an option. I am able to recognize solutions that already exist and pull those patterns into the design in order to shave time and money from the development cycle.
- I document my code in a clear manner so that it can later be understood by a maintenance engineer. I document as I go and as I make changes to the code. I don’t rely on having time at the end to go back and comment my code.
- I thoroughly test my work. I pride myself in being able to hand over code and have it run flawlessly. I have a deep understanding of how to properly test a system and how to force any bugs to rear their ugly heads.
- I never stop learning and sharpening my skills. Stemming from my passion for my craft, I have a ferocious appetite for knowledge. I consistently put aside time to read articles, books, write code and try new techniques. I recognize that this industry is changing quickly and to stay on top of it requires dedication to keeping my skills sharp!
- I am very patient. Rather than jumping into a system and starting to bang out code, I resist the temptation and instead, architect it out first. I will spend necessary time doing research, developing flowcharts and state machines before ever sitting down to create the main function.
Employment History
GoPro, Senior Camera System Firmware Engineer2013-2017
Work for the Advanced Technology group, essentially, R&D. Developed the firmware flow diagrams and initial firmware modules, for an advanced GoPro ISP chip. Developed firmware for the Synopsys HAPS to verify GoPro’s ISP data flow. Worked on firmware for USB TYPE-C PD and Display Port solutions.
Microprocessors/controllers used: MicroSemi SmartFusion (Cortex M3), Freescale Tower (Cortex A5, M4, & M0), Atmel SAMD & SAML (Cortex M0), Cypress PSOC4 BLE (Cortex M0).
Tools used: ARM (Keil) uVision5, Cypress PSOC Creator including the PSOC Creator to uVision5 converter, IAR Embedded Workbench for ATSAML22, ARM DS-5.
Contracting with Lucilient as a Sr. Firmware Design Engineer2012-2013
Currently implementing and configuring the ARM RTOS & RTL on a Microsemi (Actel) SmartFusion chip for Lucilient. The SmartFusion chip is to be used as the engine for an
ink-less ink-jet printer.
Elesys, Sr. Firmware Design Engineer2002-2012
Worked on the architecture and firmware for their new product idea, a unique CD/DVD Recorder/Printer. Was involved in the hardware architecture and wrote the firmware that interfaced the product to a host computer via USB. Wrote the RTOS and scheduler for the project.
Agilent Technologies, Senior Scientist1998-2002
Developed a chip (PhotoChip) that would replace much of the discrete IC's in the typical digital camera. The processor core was the NEC MIPS microprocessor. Wrote the firmware that controlled PhotoChip's resources, wrote the RTOS so that various camera operations (tasks) could run simultaneously. Developed a complete working digital camera using PhotoChip. Wrote all of the firmware that controlled Photochip, the JPEG chip, the CF card interface, and all of the other low level chips and protocols contained within the camera.
Independent Consultant/Contractor1979-1998
Supplied embedded computer system design, implementation, and debug for a myriad of companies throughout the San Francisco Bay Area as well as a major company in Colorado Springs, CO. Some of my more memorable contracts were with:
ARM: Began consulting for ARM back when ARM USA (ARM Inc.) was started. Tim O'Donnell started ARM Inc. (a US office of ARM Ltd. in the UK). ARM (Tim) had one employee, an FAE. Was hired by Tim as a consultant to bring-up the Demon debugger on customer's ARM cores. Did this for ARM for several years, until ARM Inc. grew large enough to hire an internal software engineer. Did specialty consulting jobs for ARM Inc. throughout the 1990's.
Visioneer: Visioneer made monochrome page scanners, both stand alone and built into a keyboard. Wrote the firmware for their color scanner version. Link.
Omnipoint Communications: Was hired by Omnipoint to write firmware for a new spread spectrum cellular phone protocol. Worked directly with Bob Dixon, the father of spread spectrum technology, to develop this cellular phone protocol. Wrote the code for a complete cell site, that would handle 32 simultaneous calls, and hand-off/pick-up ongoing calls as the phones were traveling. Also handled the back-end interface to the telephone system through an ISDN switch. Wrote a complete RTOS for this project.
Another Omnipoint Project: Designed a system for the floor traders at the Chicago Board of Trade. Instead of marking trades on cards, they would use handsets (made by TI) to register a trade. The handset would communicate the trade with a base station. Wrote the base station code that could handle 100 handsets simultaneously. On the back-end, interfaced to the Board of Trade's Ethernet, which connected to their mainframe computers so the trade could be further processed and analyzed. Wrote this project in RTX Forth as this project hardware used the Harris RTX2000 Forth chip.
Olivetti ATC: Was hired to create a system that would boot up to eight motherboards and run diagnostics on them. This was for Olivetti's manufacturing/assembly line in Ivrea Italy. Wrote this in 8086 assembly, to run on an Olivetti PC which had eight serial ports. New motherboards would be plugged into one of the serial ports and booted through that port. A set of motherboard diagnostic were then uploaded. The diagnostics reported back through the serial port into one of eight windows on the PC screen. Motherboards could be plugged-in and unplugged randomly.
ULTRON Labs: Joined Ultron Labs when they were in the process of inventing a 'Crypto Engine'. An IC that would take plain text as input, and output encrypted text, and vice versa. This part was sanctioned by NSA for use by our military. Wrote all of the firmware that ran the Crypto Engine. My interface to the outside world was via the Intel 82586 Ethernet LAN Co-processor. Here is the Data Sheet for the Ultron Labs Crypto Engine. I held a secret clearance while at Ultron.
NASA Ames Research Lab: Designed and built a controller for their 2'x2' supersonic wind tunnel. Tailored a version of PolyForth specifically for this hardware. Wrote PID algorithms to smoothly bring-up the wind tunnel to either high altitude (vacuum) or the opposite (pressure), and to the specific turbine speed. I incorporated a 16 key keyboard and 32 character dot matrix display so the wind tunnel operator could enter the specific tunnel parameters as well as make changes to the PID algorithm parameters.
Tencore Instruments: Tencore Instruments made surface analysis machines. They wanted a RTOS for the microprocessor system used in their instruments. Designed and built a PolyForth RTOS specifically for their hardware which gave them total internal & external control over their instruments.
Forth Inc.: Forth Inc. invented the Forth computer language and PolyForth as a RTOS. Its drawback was that it ran native on only a few specific pieces of hardware. Bought a copy of PolyForth and changed it to run under the CP/M operating system so that it could then run on literally thousands of different systems. Forth Inc. incorporated it into their product line. For many years, it was the best selling product that Forth Inc. had.
IMG Photo Products: IMG Photo Products manufactured a series of mechanical photo silver recovery units which used DC current to plate-out silver, from B&W fixer, on to a rotating cathode. IMG needed a microprocessor based system for plating-out silver from bleach-fix (BLIX), a color process fixer. This required controlling the DC current to the cathode and monitoring the BLIX silver concentration. Designed the complete microprocessor hardware and wrote all of the firmware. Kodak contracted with IMG Photo Products to supply these silver recovery units for their mini-lab installations.
PhotoChem Systems & Engineering: Designed, built, wrote the firmware for, and installed a microprocessor based system to control the pH of photo processing chemistry. It was initially installed in a large photo processing lab in Hayward, CA. PCSE went on to install these in labs throughout the US.
Advanced Micro Devices, Manager Systems & Applications1976-1979

Began working on a new product called 'System 29'. System 29 was the world's first (and only) Bit-Slice Development System. Built a new operating system for System 29. Ran AMDASM, a 2900 bit-slice assembler, on System 29. Wrote the debugger that loaded the 2900 object code into the bit-slice microprogram memory and then provided breakpoints, single stepping, and most other debug features. The microprogram pipeline could be up to 128 bits wide.
The 2900 series bit-slice product line has been used in countless products, from Cisco routers, to phased array radar systems, and in the Space Shuttle itself.
Following the 2900 series effort, became manager of bipolar support for MOS technology.
While designing System 29, John Mick & I wrote the definitive bit-slice book, published by McGraw Hill, translated in to 18 different languages and used in 170 universities worldwide.
EDUCATION:
Four years Oregon State College (Electrical Engineering)
Two years Brooks Institute of Photography (Commercial Photography)
PATENTS:
#20060209102 “Off-radial axis circular printing device and methods" (Elesys).
#5768264 "Time Division Duplex Communications Protocol Supporting ISDN messages." (Omnipoint).
SERVICE:
United States Coast Guard. 6 months active duty, 5-1/2 years active reserve, 2 years inactive reserve, for an 8 year obligation. Honorable discharge.
ADDENDUM:
Have a working knowledge of HTML, CSS, JavaScript, Dreamweaver, InDesign, Photoshop, Lightroom, and Adobe Illustrator. I created my personal website from scratch, using Photoshop, Dreamweaver, HTML5, CSS3, and JavaScript.
My references are listed on 'My Website'.