Possibly the best known of my tools, Micro-C is a complete compiler and development package for the C programming language. Marketed mainly as a cross development tool, versions of the compiler have been ported to: 68HC08, 6809, 68HC11, 68HC12, 68HC16, 8051/52, 8080/85/Z80, 8086, 8096 and AVR processor families. In addition to this, I have created a complete toolset based around the C-FLEA, a tiny virtual 16-bit processor that I designed, and also a full featured PC development package. Almost all of my PC based code is developed using the PC version of Micro-C.
Micro-C has been used by thousands of registered customers worldwide, and there are many more using the PC development package which I made available as free software. It has received favorable reviews in technical magazines, appears in a number of books, and has been used by a couple of columnists as the main development tool for projects which they have published.
I have implemented a couple of different Forth systems, including standard Forth implementations on the 8080 and 8086 processor families, as well as a unique ultra-efficient Forth for the 6809 which compiles to directly executable machine code instead of the usual threaded code.
Several implementations of Basic including a generic Basic written in C which can be compiled with my tools to run on many different platforms, a version for the 8080 that runs under my DMF operating system, a version for the 6809 that runs under my CUBIX system, and one of the earliest languages in my career, a tiny (3K) integer Basic for the Univeristy of New Brunswicks MicroComputer group.
This is a highly customized version of BASIC that I did to assist a developmentally handicapped child. It provides a large set of hardware control and interfaces to integrate sound and physical devices into the applications. Physical device included sound/speakers, buttons, switches, analog inputs/levers, magnetic position sensors, audio and video devices via InfraRed control, and household devices via X10 interface.
Micro-APL is a subset APL interpreter that I created as one of the main interactive languages on my CUBIX 6809 operating system.
In the course of other work, I have developed many proprietary scripting languages used for automating other tasks. Some examples are: The scripts used in DESMO (DEbug Scripting MOnitor), and the communications control scripts used in my PC100 terminal program.
In the course of my work with financial terminals, I have developed my own implementation of the Terminal Control Language used on Verifone terminals. I have developed a complete and functional implementation of the TCL interpreter, as well as a compiler to allow the use of symbols, conditionals and many other higher level constructs not supported by the Verifone tools.
This section describes a number of assemblers, cross assemblers and related tools that I have developed.
These are full featured PC based cross assemblers, targeting a wide variety of processor families including: 6800, 6801/6803, 6805, 6502, 68HC08, 6809, 68HC11, 68HC12, 68HC16, 8048, 8051/52, 80C320, 8080/85, 8086, 80186, 8096, 8008, Z8, Z80, AVR, H8, ST7, 16C5x and C-FLEA.
I have implemented Cross Disassemblers for most of the above processors. These are "snart" disassemblers which can integrate user defined symbols, comments and memory block descriptions into the disassembly output, as well as automatically generate the initial symbol table by analysis of the program control structure and data references.
Assembly Language Programming System was developed early in my career (late 70s). It is a complete editor/assembler/debugger and disassembler for the 8080 family of processors, which runs under both NorthStar DOS and my own DMF system.
This is a resident 6809 assembler written as part of my CUBIX 6809 disk operating system.
A cross assembler for the RCA 1802 processor, written in Fortran to run on the universities IBM mainframe in order to generate code for a Cosmac ELF computer.
This is a system which assists in the translation of source code written for one processor family to another by using pattern matching and lookup tables. It includes a compiler which can be used to define new CPU families/instruction sets and the translation rules between them, as well as the main program which performs the translation.
This is a system I wrote to automatically generate a working PC based cross assembler from an input source file describing the instruction set of the target processor. It consists of a Universal Assembler Compiler, which reads the instruction set definition and generates C source files containing code and data tables, as well as a number of modules which are linked with the output to produce the final executable assembler.
This is a preprocessor for assembly language source files which will give full MACRO and conditional capability to any assembler which does not inherently have these features.
These include cross reference tools, source convertors (translate source code between popular formats eg: Intel .vs. Motorola) and other tools.