This book is about the new breed of stack computers sparked by the introduction of the Novix NC4016 microprocessor. Some readers may incorrectly associate any reference to stack computers with the Burroughs or HP stack machine families. The focus of this book is quite different. These new stack computers encompass an entirely different set of technology and application area tradeoffs, resulting in machines that are quite unlike the older generations of stack computers.
This book covers a wide variety of topics so that these new stack machines may be understood not only for their technical merits, but also within the context of how they can be used to solve problems, and where they fit in the overall computer architecture picture Chapter 1 is a review of stacks and their usage, as well as an introduction to the rest of the book.
Chapter 2 presents a taxonomy of hardware support for stacks, categorized in terms of the number of stacks, size of stack buffers, and the number of operands in the instruction format. This taxonomy points out the tradeoffs that are made by different classes of machines, and shows where the stack machines discussed in the remainder of the book fit in.
Chapter 3 focuses on the part of the stack computer design space that employs multiple stacks with 0-operand addressing. This set of design tradeoffs characterizes the new generation of stack machines described in the following chapters. This chapter also presents a detailed description of a generic stack machine as a point of departure for discussing the designs in subsequent chapters.
Chapter 4 describes four 16-bit stack machines in detail. The WISC CPU/16, MISC M17, Novix NC4016, and Harris RTX 2000 cover a wide spectrum of design decisions, exploring many of the options possible in stack machine design. Each of the four designs is described in terms of its block diagram, instruction set, architectural features, implementation technology, and intended application areas.
Chapter 5 continues the format of Chapter 4 with a discussion of three 32-bit stack machines. The machines included are the JHU/APL FRISC 3 (also known as the Silicon Composers SC32), Harris RTX 32P, and the Wright State University SF1.
Chapter 6 is a detailed discussion of the issues of stack machine design from a computer architect's point of view. Stack machines differ from other machines in many important respects, including program size, processor complexity, system complexity, and processor performance on different kinds of programs. They can require different ways of thinking about program execution characteristics and resource management. Much of the "conventional wisdom" about stack machines is incorrect. This chapter presents detailed discussions as well as experimental data to reveal how stack machines really work.
Chapter 7 discusses the software issues that arise when using stack computers. The concept of a fast subroutine call is central to using a stack machine effectively, as is the concept of uniformity of interface between all levels of hardware and software. This chapter also discusses the issue of choosing a programming language, and how stack machines can efficiently support many different languages.
Chapter 8 shows how stack machines can be used in a variety of application areas, especially real time embedded control. Important decisions must be made when selecting a stack computer to use in a commercial product. The alternatives include whether to use a 16-bit or 32-bit processor, and selecting an appropriate balance between system cost and performance.
Chapter 9 is filled with predictions and speculation on the future of stack machines and their place in the world of computers. Stack machine designers are beginning to address issues such as dedicated hardware support for conventional languages, memory management, and dealing with the limits of memory bandwidth.
Appendix A is a survey the stack machines included in the taxonomy of Chapter 2. With entries for 70 machines, it is a single reference summary of most published designs having special support for stacks.
Appendix B provides a glossary of Forth primitives. Appendix C gives an unabridged listing of some experimental results from Chapter 6.
The chapters are intended to be read more or less in order, but readers with varying interests may find that they want to concentrate only on certain sections of the book. In general the book progresses from a theoretical basis for understanding stack machines at the beginning to practical applications at the end.
Chapters 2, 3, 6, and 9 concentrate on understanding the mechanisms of stack machine operation and the engineering tradeoffs associated with the stack model of computation. Chapters 4 and 5 describe stack machines at two levels: one for the potential user of a stack machine, and one for those who wish to see how design decisions affect the computer architecture and performance. Chapters 7 and 8 are geared more for potential users of stack machines who need answers to practical questions of software selection and application areas. Appendix A will be especially interesting for those readers who wish to gain a perspective on the history of stack machines.
My venture into the world of stack computers was started and encouraged by Glen Haydon, whose support, enthusiasm, and advice are deeply appreciated. Brian Meek and Rick Van Norman helped me refine the manuscript. Marty Fraeman, John Hayes, Charles Johnsen, Charles Longway, and the staff at Novix provided valuable advice and ensured the accuracy of various portions of Chapters 4, 5, and 6. Larry Forsley and Jerry Lilly also helped along the way.
Phil Koopman -- firstname.lastname@example.org