P ossibly the most interesting facet of microprogramming engineering is, in a very real sense, a meeting ground for software is its Janus-like nature* On the one hand there is the older, technology and microprogramming. P more orthodox view that microprogramming is a tech-For our present purposes we will use the term microprogramnique for implementing a computer's control unit.' That is, it is ming system to denote any integrated set of tools and techniques basically viewed as an aspect of hardware design at the register-that can be used in the firmware design and implementation transfer level. On the other hand many view it as a method of proprocess. gramming the computer at one level of abstraction to createOne of the problems that has attracted a great deal of attention another.2 The microprogramming level, according to this per-in recent years is the development of machine-independent, or spective, is one of several levels at which abstract machines can retargetable, microprogramming systems. Such a system can be be created. To emphasize the nature of this level relative to those used in the design, implementation, simulation, and verification more familiar to software and hardware designers, the wordfirmof efficient and correct microcode for a variety of microarchitecware was coined as a synonym for microprogram.tures:I* The discipline of firmware engineering emerged largely from This relatively recent and widespread interest in retargetability this latter, more recent, point of view. Broadly speaking, firmware stems from the realization that while the development of engineering is concerned with the discovery of the scientific princomputer-aided tools for microprogramming is a laudable goal, ciples and logic governing microprogramming and their applicathe long and costly lead time required to develop such tools on tion to the firmware development process.3 In fact, most of the a per-machine basis is economically unattractive. Thus, the argudevelopments in this field have been largely concerned with the ment goes, microprogramming systems will only become an indusway programming theory, languages, systems, and technology can be effectively applied to firmware development.3 Some of the important issues in this domain include the design 'Janus, the Roman god of gates, had two faces looking in opposite directions. and implementation of high-level microprogramming languages; strategies for generating, optimizing, and compacting microcode; V.We use the term microarchitecture to mean the architecture of the computer as techniques for the systematic design of firmware; and the formalAseen by the assembly language microprogrammer or the microcode compiler writer. A retargetable microprogramming system is "retargetable" in the sense that it can verification of microprograms. As these topics suggest, firmware be used to generate, verify, optimize, or simulate microprograms intended for execution on different "target" microarchitectures. This use of the word target is quite the opposite of its use in the traditional mi...