I have been writing development tools from very early on in my career. Many of these tools have been and are still being sold through my mail order company "Dunfield Development Services, Inc.".
Period: Late70s-present
This section describes various higher level programming language that I have implemented.
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 Forths 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 the main interactive language 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 my DESMO (DEbug Scripting MOnitor), and the communications control scripts used in my LAPTALK 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.
This section describes a number of debuggers that I have developed.
Dunfield MicroScope is a general purpose high-level debugger that I created as a companion to my Micro-C toolsets. It provides source level debugging at both 'C' and Assembler language level, as well as dissassembly level debugging where required. Other features include: Multiple watchpoints, intelligent breakpoints, multiple stepping options and much more.
DMS is completely target independant. I provide DMSC, a compiler that allows you to define a new processor/instruction set, register descriptions, memory address spaces and block types, as well as the control commands which are sent to a small resident debug kernel on the target system.
DESMO is a PC hosted target-independant debug monitor which interfaces to a small resident kernel to perform physical operations on the target system. It provides memory and I/O read/write operations in 8, 16 or 32 bits. It features a powerful scripting language with high-level constructs such as variables, constants, loops and conditionals. Using the scripting language, complex operations can be automated into a single command. Debug scripts can accept arguments and produce results, and can be nested to provide higher and higher level operations. Use of DESMO scripts can significantly reduce the tedious and repetative manual operations required to test and debug a complex hardware project.
These are target resident debug monitors which feature: Memory/Register display and edit, Interrupt vector control, Disassembly, single-step, breakpoints, code download and many more features. I have implement resident monitors for many processor families including: 68HC08, 6809, 68HC11, 68HC12, 8051/52, 8080/85, 8086, 8096, Z80, AVR and ARM. I have used these debuggers in many of the small devices and prototypes which I have constructed.
This is a PC hosted debugger with small-footprint resident kernel for the 8051 processor family. With a small bit of hardware support, it provides full debug capabilities. It can also use the internal SRAM and memory mappng capability of Dallas DS5000/2250 processor family to implement a reasonably complete 8051 In-Circuit emulator. The resident kernel is also compatible with my Emily51 simulator to provide in-circuit simulation capabilities.
As part of a personal robotics project, I developed a wireless monitor and debugger for the 6809. This provides complete download and debugging facilities over a radio link.
As part of my work with an ARM7/ARM9 based telephone system, I have developed an ARM debug monitor and other diagnostic tools. The debugger in incorporated into my ArmOS operating system, and operates in an isolated context from the remainder of the system. When the debugger is entered (processor exception, memory protection violation, breakpoint, software panic, user request etc.) the current context of the ARM is saved and the monitor activated. Facilities include full display/update of all registers in all ARM modes, disassembly. stack backtrace, all the ususal debugger commands and more). At any time the processor context can be restored and execution continues at the point of the original exception. The debugger works from within all ARM modes (User, Irq, Privileged).
This section describes a number of simulations that I have developed.
This is a ultra-fast PC based real-time simulation of the 8051 processor, which supports user written device handlers to "install" custom devices and special function registers. The simulator also supports a connection to a resident kernel on the target system, allowing "in-circuit simulation" where the code runs on the PC but physical I/O is performed on the target system.
This is a PC based simulator for the 6502 processor, which was developed to test code for an embedded 6502 device. It features simulation of the CPU, Memory and serial I/O device, as well as a comprehensive debugger, and a software debugging/profiling facility implemented via an unused 6502 opcode.
As part of my C-FLEA 16-bit processor development package, I have created a PC based simulator for the C-FLEA processor. This includes a comprehensive debugger, and the ability to define I/O devices to the simulation. It also can interface with a target resident kernel to provide "in-circuit simulation" where the code runs on the PC but physical I/O occurs on the target system.
As part of my work in preserving microcomputer history. I have created a PC based simlulation of the 8080 processor and a complete Altair 8800 computer system. This includes the CPU, Memory, console, North-Star disk controller and Real time clock systems, as well as the Altair front panel and a comprehensive debugger. The system boots NorthStar DOS and my own DMF operating system.
As part of my work in preserving microcomputer history, I have created a PC based simulation of the 8008 processor and a complete Mod-8 system. This includes the CPU, memory, bit-bash TTY controle, parallel I/O ports, and a 1702 EPROM programmer. The system runs the actual MOD8 8008 monitor program.
As part of my work in preserving microcomputer history, I have created a PC based simulation of the 8080 processor and a complete H8 computer system. This includes the CPU, memory, H8 console and I/O devices as well as the H17 disk system, and a comprehensive debugger. The system can bootstrap from H8 tape images, and the HDOS system from virtual diskette.
As part of my work in preserving microcomputer history, I have created a PC based simulation of the Z80 processor and a NorthStar Horizon computer system. This includes CPU, memory, NorthStar mainboard devices and console, as well as the NorthStar single and double density disk systems. A comprehensive debugger is also provided. The system boots CP/M, NorthStar DOS and my own DMF operating system.
As part of my work in preserving microcomputer history, I have created a PC based simulation of the 6809 processor and my D6809/CUBIX computer system. This includes CPU, Memory, video, keyboard, serial I/O, and disk subsystems, as well as a comprehensive debugger. The system boots my own CUBIX operating system.
As part of my work is developing a small office telephone system, I have created a diagnostic telephone simulator which allows me to simulate telephone sets of various characteristics connected to the system. This includes a hardware component for the physical interface, and control signals generated from the PC parallel port and sound card. This system can generate tones (DTMF etc.) with complete control over amplitude, waveform, frequency and twist.
As part of my work in developing a desktop feature telephone, I have implemented a complete PC based simulation of that phone. This includes a graphical representation of the phone and user interface (keypad/LCD/handset), as well as several different "debug views" and comprehensive debugging capabilities. The system runs the actual phone application exactly as the physical telephone does.
As part of my work with financial terminals, I have developed a complete PC based simulation of the Verifone TRANZ terminal and internal TCL operating environment. This simulation includes all TRANZ hardware (CPU, Memory, Display, Keypad, Card Reader, Modem, Serial I/O, real time clock), as well as a PinPad with DES encryption and DUKPT support. This simulator can load the customers TRANZ application, connect to the actual financial network and performs transactions indistinguishable from the actual terminal. A comprehensive debug and software logging system is incorporated into the simulation.
This section describes custom tools to assist in the drawing or layout of designs.
EDT is a small visual text editor that I created early in my career. I have since rewritten it in several languages and ported it to virtually every system I have ever worked on (It is NICE having the same editor everywhere).
DDSIDE is an Integrated Development Environment that I created as a companion to my Micro-C compilers and cross assemblers. This provides a nice visual editor with drop down menu control over all development tool options, and the ability to compile, load and debug from within the IDE. DDSIDE is tool independant, all configurable functions, features and options for the tools are defined in a .IDE control file.
Sprited is a graphic sprite editor, which is part of the graphics tools included in the PC version of my Micro-C toolset. This program creates and edits sprite definitions as either binary or 'C' source code. It includes basic drawing tools, including block and clipboard operations. It also has a palette editor allowing the creation of custom colors.
MicroCad is a tiny (12k) PC based graphical drawing package. It provides the basic ability to draw lines, rectangles, circles, arcs, and polygrams, and has the ability to incorporate previous drawings as single elements in a new drawing. It was originally created as a means of sharing schematic drawings among the Fidonet BBS community.
In my work of developing a feature telephone, I was responsible for creating a custom LCD panel. To assist in this, I designed a tool which allowed me to graphically draw the LCD segments and create a map of the layout, as well to visually see what the display would look like. Once the LCD manufacturer gave me the electrical mapping (pins to display segments), I enhanced the tool to be generate a logical to physical map of the display, and to automatically generate the required character set tables. This tools also has the ability to simulate the display, allowing us to proceed with the user interface development weeks before the actual LCD prototype was available.