Specializing in embedded
and distributed control systems -- contract
design and development of microprocessor hardware and software,
particularly when maximum performance is required from limited
resources, or when a blend of hardware and software expertise is
needed.
CONSULTING PROJECTS |
2013 |
ALN11 Controller: Created a single-board ARM computer to replace a discontinued 8051 board. Tasks included completion of an interim hardware design (by others), PCB layout, prototype testing, and conversion of I/O drivers. The new board uses the Philips LPC2138 (ARM7 family); software is written using the Rowley C compiler. |
2013 |
Wireless Anemometer: Wrote software in GCC for a micropower 915 MHz wireless anemometer, using the Texas Instruments MSP430G2553 MCU, and either the Texas Instruments CC1150 SPI transmitter or an Abacom direct-drive transmitter. The device operates on accumulated wind energy, monitored and managed by the MCU. |
2013 |
Wireless Anemometer Receiver: Wrote software to receive the signal from a 915 MHz wireless anemometer, using the Texas Instruments MSP430G2553 MCU and an Abacom receiver. The unit decodes the Manchester encoded signal, computes speed, and drives an LCD display and an RS-232 serial output. Developed in CamelForth. |
2012 |
WindVane: Wrote software for an electronic "wind vane", using relative position sensors and an HMC6352 I2C compass to give true direction. Developed in CamelForth for MSP430G2553. |
2012 |
Ultrasonic Bolt Meter: Wrote new software to provide added capability and communications for an existing test instrument. Devised a novel file system for serial Flash and EEPROM devices, that uses less than 512 bytes of RAM. Development for H8S/2148 in C using Renesas Embedded Workshop. |
2011 |
DT12 Controller: Designed a single-board computer as a drop-in replacement for a discontinued OEM board, for a low-power battery operated test instrument. Tasks included processor selection, circuit design, PCB layout, prototype outsourcing, testing, and software conversion from 6303 PolyForth to MC9S12X SwiftX Forth. |
2011 |
D7 Software Conversion: Adapted "ZPC" software for the D7 processor board. The Forth language program employs C language USB MIDI drivers (written by others) using FreeRTOS as the interface. Development for the Renesas H8S using Forth and GCC. |
2011- present |
MiniPods: Developed software for a family of devices to log work hours, travel distance, fuel dispensing, and operator inspections. The devices report remotely via cellular modem or direct 2.4 GHz radio link, and can also collect and store data from other 2.4 GHz loggers (RF hour meters). Implemented in Forth using MC9S12, MC13202 transceiver, and Multi-Tech SocketModem. |
2010 |
RF Hour Meters: Developed software for a family of 2.4 GHz wireless logging devices, to record elapsed time, accumulated distance (from serial GPS), and motion (from MMA7660FC accelerometer), using I2C EEPROM. Development for Freescale MC9S08 and MC13202 transceiver, using C and CodeWarrior. |
2009- 2011 |
USB OSBDM Linux drivers: Wrote software to control an Open Source BDM device from a Linux desktop via USB. OSBDM uses the Freescale Background Debug Mode to program and debug 9S08, 9S12, and 9S12X microcontrollers. This software allows programming, verification, and specialized configuration like clock frequency trimming, to be automated using the Linux factory computers. Linux USB master software was written in gForth, using libusb. |
2009 |
MIDI-to-Playstation interface: Built a converter for the "Ztar" MIDI guitar to control the "Guitar Hero" game on a Sony Playstation 3. The converter uses a Freescale 9S08 to receive MIDI and appear as a USB control device, and required reverse-engineering the "Guitar Hero" USB protocol. |
2009- present |
GPRS/CDMA Tracker: continued support of the "GPRS Tracker" project using new generations of Multi-Tech SocketModems, including CDMA SocketModem. |
2009 |
RF ID Cube: Developed software for a 2.4 GHz identification device using the Freescale MC9S08 processor and MC13202 transceiver. The battery-operated device consumes less than 1 uA in standby mode. Development in C using CodeWarrior. |
2006- |
D6 ZPC: Ongoing development and maintenance of the "ZPC" software on the "D6" hardware, in Forth and H8 assembler. New and improved features include expanded and multitrack MIDI recording, remote control, arpeggiator, ribbon and chording features, field upgrade capability, 12- and 24-string options, dual menus, "small" LCD and encoder operation, and iPod control, plus various performance improvements. |
2008 |
D7 CPU: Designed a new low cost/low power MIDI instrument controller board. This uses the Renesas H8S/2212 processor for code compatibility with the "D6" hardware, while eliminating the need for a dedicated USB interface chip. The base configuration has a total IC cost of less than five dollars and can be powered from the USB interface. |
2008 |
MSP430 CamelForth: Developed a Forth compiler/interpreter for the Texas Instruments MSP430 processor, using the New Micros Tini430 board. The complete system takes less than 6K bytes of ROM, and offers "direct-to-Flash" compilation allowing programs to be compiled "live" in the Flash ROM with no other tools. |
2007 |
GPRS Tracker: Adapted the "Tracker" product to use mobile Internet communications via the Multi-Tech GPRS SocketModem. The embedded controller is able to initiate a data transfer to or from a remote Internet server, and is also able to respond to an SMS text message received via the cellular network. |
2006- |
SuperPod: Converted the IsoPod operating software for this new board using the Freescale DSP56F8365 processor. The core was converted from C to assembler for threefold greater speed and half the memory consumption. Added features include an expanded memory model, more flexible object-oriented extensions, and a new object-oriented state machine. Development in 56000E assembler and Forth using CodeWarrior. |
2006 |
CANOpen: Implemented the CANOpen protocol for the MC9S12 microprocessor, including CAN physical layer, receive and transmit processing of PDOs and SDOs, supervisory and master functions, object dictionary, linking and mapping. Development in Forth and assembler. |
2006 |
68HC12 Forth Metacompiler: modified the LMI Forth metacompiler to run under Linux using gForth, and to support a paged memory model for the 68HC12/MC9S12 microprocessor. Also modified the 9S12 Forth kernel to support paged memory. |
2005 |
RF Tracker: Adapted the IrDA protocol stack for radio operation, using the Freescale MC13192 IEEE 802.15.4 transceiver. The protocol stack is shared, allowing communication either via infrared or 2.4 GHz RF interface. Development in Forth and MC9S12 assembler. |
2005 |
Palm IrDA: Developed a replacement IrDA protocol stack for the Palm PDA, so that newer models would comply with the IrDA specification. Development in C using Linux-based tools. |
2004- |
IsoPod: continuing support, development, and documentation for this series of DSP56F80x embedded controller boards. New features include improved servo control support, scheduler, and multi-channel "soft UART" for added serial I/O. |
2004 |
Tracker IrDA: Developed an IrDA protocol stack for the Motorola/Freescale MC9S12 microprocessor, to replace a dedicated MCP2150 interface chip. This followed the "IrDA Lite" specification and included physical, LAP, LMP, IAS, TinyTP, and IrComm (telnet) layers, and allowed the unit to communicate directly with applications on a Palm handheld PDA. Development was in Forth and assembler. |
2004 |
D6 CPU: Designed a Hitachi/Renesas H8S/2328 embedded processor board, to replace the previous D5 CPU whose Super8 processor was discontinued. The new board has the same form factor and interfaces, but with lower cost, faster speed, and added USB capability. Developed a translating assembler to convert Super8 source code for the H8S. |
2002- |
IsoPod: Wrote the operating software for this family of single-board computers, named one of the "Top 100 Products of 2002" by EDN Magazine.
This project was developed in C, Forth, and DSP5680x assembler, using Metrowerks CodeWarrior. |
2002- |
ZPC: Created software for this MIDI guitar controller by merging and unifying the EventStation percussion software with the "Ztar" guitar software. The new instrument adds all of the EventStation features to the guitar instrument, with more memory, more I/O, and faster performance, on the same "D5" hardware. New features include more flexible zone processing, more flexible sensor processing, new chording and fingerboard modes, and versatile dump and restore. |
2002 |
Harmonic Analyzer: Developed DSP software for an industrial test fixture. This assembly-language software performs signal generation, measurement, and harmonic analysis at a 320 kHz cycle rate. Recommended a Motorola DSP56F803 single-board computer at one-twentieth the cost of comparable DSP boards! |
2001 |
Invictus: Expanded and improved the embedded control software for this industrial laser. New functions include improved self-test and safety interlocks, interface to Dallas "iButton" for timing and file storage, serial remote control, and "in-place" reprogramming of the operating software in Flash memory. This project used a 68HC11 processor programmed in Forth. |
1999- 2000 |
EventStation: Expanded and improved this MIDI percussion controller. Designed a "quasi logarithmic" preamplifier to improve dynamic range and sensitivity for piezoelectric sensor inputs. Assumed maintenance of prototype software, and produced final production software, including:
This project was developed in Forth and Zilog Super8 assembler, using MPE Ltd.'s Forth cross-compiler. |
1999 |
MicroZone: Adapted software from the "Ztar" MIDI instrument to accept an 810-key microtonal keyboard and produce a multichannel MIDI output. |
1998- 1999 |
ANGL: Developed a distributed object-oriented language for an embedded industrial controller, to meet the requirements of the BACnet(tm) specification for building automation and control networks. Fully responsible for implementing:
This project was developed in Forth and 68HC12 assembler, using Forth Inc.'s SwiftX(tm) cross compiler. |
1998 |
PSC1000: Developed asynchronous serial drivers for the I/O processor of the PSC1000 microprocessor. |
1997- 1998 |
D5 CPU: Designed a Zilog Super8 embedded processor board for a MIDI musical instrument. The new board is 40% smaller yet has four times the capacity of the previous processor, at comparable cost. Software for the previous board was converted while retaining backward compatibility; new features include aftertouch sensing and output, and support for a microtonal keyboard. |
1996- 1997 |
OTA: Developed software for point-of-sale terminals under the Open Terminal Architecture specification. Supported and extended Forth kernels on 8051, 6303, and 68000 processors; wrote hardware I/O drivers and OS interface routines; implemented extended precision math for security algorithms; installed and validated application code. Developed a byte-code Forth interpreter for an 8051-based "smart card" using less than 128 bytes of RAM and 3.5K of ROM; this interpreter runs twelve times faster than a competitive product. |
1993- 1996 |
Tandem Accelerator: Conceived and implemented a real-time, distributed, inference-driven control system for a Tandem particle accelerator, including:
This project employed a network of 68HC16s and IBM PCs, was written in Forth, and has been accepted for a Ph.D. in Computer Engineering. |
1995 |
8051 Small C: Wrote and documented Small C for the 8051 microprocessor. |
1994 |
CamelForth: Developed CamelForth, a portable ANS Forth compiler for Harvard and von Neumann processors, with implementations for Z80, 8051, and 6809. |
1994 |
6809 SM-II: Designed and constructed an inexpensive multiprocessor for education and research. Designed novel logic to use common 8-bit processors, to reduce total system cost below $200 per CPU. |
1993 |
Chromium metacompiler: Developed Chromium, a interactive Forth cross-compiler. |
1993 |
68HC16 MPE Forth: Wrote MPE Forth for the 68HC16, including kernel, multitasker, and documentation. |
1991- 1992 |
Echelon: Conceived and developed the Echelon lighting control system:
Worked with team members and co-developers in California to complete in 1.5 man-years what took the competition five! |
1991 |
Z8 Max-Forth: Wrote Z8/Super8 Max-Forth, with adaptation to Harvard architecture. |
1991 |
Z8 MPE Forth: Wrote MPE Forth for Z8/Super8, including kernel, multitasker, and documentation. |
1989- 1990 |
Producer II+: Continued software development for Producer II+ lighting console, including improved command processor, remote terminal, video displays, printer and disk functions, in Super8 assembler. |
1989 |
Quantum: Supported software development for the Quantum high performance entertainment lighting system, using the Producer II+ CPU board. |
1988 |
Producer CPU: Designed and constructed a Zilog Super8 single-board computer for retrofit into the Producer II lighting control console. The new board doubles performance at lower cost, and adds interfaces for floppy disk, printer, high- and low-speed serial, VFD/LCD, and an IBM Color Graphics Adapter. Wrote all I/O drivers, a Z80-to-Super8 assembly language translator, and full documentation. |
1988 |
BMDSIM: Helped convert a Ballistic Missile Defense simulator from a Tektronix graphics workstation to an IBM PC-AT. Wrote polyForth drivers for Tecmar Graphics Master boards, allowing four EGA-quality graphics displays in a single IBM PC. Improved orbit and target simulations and displays. |
1987 |
Comstar/MD288: Developed Comstar, a Zilog Super8-based interface and control board for theatrical dimmers. In two months, designed, prototyped, and tested hardware and assembly-language software for multi-protocol data reception, and for real-time phase control of an array of power semiconductors. Wrote full technical documentation, extensive diagnostics. |
1987 |
VectorForth: Developed software for a PC-based array processing workstation. Wrote assembler and system interface for Vortex and Point-I array coprocessor boards, polyForth language support, and 3-d graphics. |
1987 |
AirHouse: Designed and wrote Z80 control software for a networked HVAC control system. Implemented PID control algorithms, fault response, and network communications code, using polyForth and clusterForth. Wrote detailed customer documentation. |
1986 |
PAMELA: Developed IBM PC/XT simulation software for an adaptive optics subsystem, including 3-d modelling, time simulation, and graphic display. Extensive code optimization in polyForth and 8087 assembler achieved 20 times the speed of a VAX. |
PREVIOUS POSITIONS |
1983- 1986 |
R&D Software Manager, Strand Lighting: developed, and managed development of, real-time lighting control systems. Managed 3-member software development group; responsible for hiring, firing, performance evaluation, task assignments, budget preparation, capital expense justifications. Supported LSI-11 development system under TSX-Plus v2 and v5; supervised conversion to Unix System V. |
1985- 1986 |
Managed a crash project to develop Lightboard M, a new low-end lighting controller, in five months. Wrote product and operational specifications, accurate PERT forecasts. Selected and supervised project team. Designed 6809-based hardware, including analog and digital I/O, communications and co-processor interfaces. Wrote 6809 Forth kernel. |
1984- 1986 |
Designed and managed development of Lightboard XP, a real- time, networked, lighting control system. Supervised 8-person team. Designed system architecure, using multiprocessor 68000, TMS320 coprocessors, 6809 peripheral processors. To meet project cost targets, designed a LAN interface costing less than $25 per drop when comparable systems cost $300. Specified hardware and software requirements, CSMA/CD LAN protocols. Created an application language for lighting control. Designed and wrote multiprocessor operating system, language translators, and LAN drivers, in 68000 assembler and Forth. |
1983- 1984 |
Doubled the capacity of Light Palette, the top-of-the-line LSI-11 lighting controller, to meet market commitments. Product manager said "software is the cleanest I have ever seen in a new program." Managed project to completion on schedule. |
1982- 1983 |
R&D Software Engineer, Strand Lighting |
1983 |
Produced a marketable product, TV Light Palette, by adapting experimental LSI-11 software to run on existing hardware. |
1982- 1983 |
Developed real-time software in Forth for Mantrix Memory, a new Z80 lighting control system. Designed and coded kernel, interrupt handlers, I/O drivers, co-processor interface, calculation routines, displays, command interpreter. In five years on the market, this software never required a "bug" fix. |
1982 |
In three months, expanded an existing Z80 lighting controller, Mantrix, to counter a competitor's market entry. Devised Z80 algorithms yielding an eightfold increase in processing power. |
1982 |
Independent Contract Programmer |
1982 |
Developed Z80 and 6502 device drivers, CP/M file server and file transfer programs, for 1553-Net Local Area Network. |
1982 |
Wrote quicksort programs in assembler for IBM PC and Apple III |
1980- 1982 |
Member of the Technical Staff, TRW Defense & Space Systems |
1981- 1982 |
Designed operating system software in Concurrent Pascal for 8086-based diagnostic system for TRW's Military Computer Family. Wrote functional and software specifications. During three months on project, made up three month lag to bring task on schedule. |
1981 |
Installed and mantained Intel and GenRad microprocessor development systems for Microprocessor Training Center. Wrote intersystem communications programs. |
1980- 1981 |
Specified and developed software for DS-VSDS 8080-based telephone switching system, using existing multitasking software. Wrote comprehensive hardware description for training manual. Installed and managed Unix v6 and v7 on PDP-11/70. |
1978- 1980 |
Director, General Technics. Formed and operated a research and consulting firm with two partners. Implemented and supported CP/M operating system; wrote comprehensive user's manual. |
1978- present |
Personal research:
|
SELECTED PUBLICATIONS |
"Object Oriented Forth and Building Automation Control," 1998 FORML Conference.
An Embedded Temporal Expert For Control of a Tandem Accelerator, Ph.D. thesis, McMaster University, 1997.
"A System for Distributed Inferencing," 1996 Rochester Forth Conference.
"A Minimal TTL Processor for Architecture Exploration," 1994 ACM Symposium on Applied Computing.
"Multiprocessing for the Impoverished," The Computer Journal, 1993-94.
"Moving Forth," The Computer Journal, 1993-94.
"Harvard Architectures and Forth," 1993 Rochester Forth Conference.
"Fast Inferencing of Static Rule Sets," 1993 Rochester Forth Conference.
"Principles of Metacompilation," Forth Dimensions, 1992-1993.
"The Echelon Lighting Control System," 1992 Rochester Forth Conference.
"Rule Evaluation through Program Execution," 1990 Rochester Forth Conference.
"Interactive Embedded Metacompilation," 1990 Rochester Forth Conference.
"Strings, Associative Access, and Memory Allocation," with N. Solntseff, The Journal of Forth Application and Research, 1990.
"A BNF Parser in Forth," ACM sigForth Newsletter, 1990.
PatternForth: a Pattern-Matching Language for Real-Time Control, M.S. thesis, Bradley University, 1989.
"A Multiprocessor Forth Kernel," Forth Dimensions, 1989.
"USITT AMX192 Analog Multiplex Data Transmission Standard," 1986.
EDUCATION |
1998 |
Ph.D. in Electrical Engineering, McMaster University, Hamilton, Ontario. Thesis: An Embedded Temporal Expert for Control of a Tandem Accelerator (a distributed AI system for real-time control). |
1989 |
M.S. in Computer Science, Bradley University. Thesis: PatternForth: A Pattern-Matching Language for Real-Time Control (real-time pattern matching and language design). |
1980 |
M.S. in Electrical Engineering, Bradley University. Emphasis on digital logic, communications. Supported Unix v6 system. |
1977 |
B.S. in Electrical Engineering, Bradley University. Minor in physics, additional work in computer science and instrumentation. |
MISCELLANY |
Languages: Fluent in Forth, C, and assembler for 6502, 6809, 68HC11, 68HC12, 68HC16, 68000, 8051, 8080, 8086, ARM7, H8/S, LSI-11, MSP430, Super8, Z8, Z80. Proficient in Pascal, BASIC, FORTRAN, PHP, Tcl.
Operating Systems: Experienced with Unix, Linux, RT-11, CP/M, MS/DOS, polyFORTH, FreeRTOS