The Forth Programmer's Handbook book provides a detailed technical reference for programmers and engineers who are developing software using ANS-compliant versions of Forth provided by FORTH, Inc. or other vendors. It features ANS Forth (ANSI X3.215:1994, the standard adopted in 1994, or ISO/IEC 15145:1997) and many extensions commonly in use; some information in this book is taken directly from the official ANS Forth document.
This book assumes the reader has a general knowledge of programming principles and practices, and general familiarity with computer hardware and software systems. If you are learning Forth for the first time, we suggest you begin with Starting Forth, an excellent introductory tutorial. It includes many exercises you can try that will actually run on your system.
Author(s): Edward K. Conklin, Elizabeth D. Rather
Edition: 2
Publisher: Forth, Inc.
Year: 1998
Language: English
Pages: 0
Welcome! xi
About the Forth Programming Language xi
About This Book xi
How to Use This Book xi
Reference Materials xii
How to Proceed xii
1. Introduction 1
1.1 Forth Language Features 2
1.1.1 Definitions of Terms 2
1.1.2 Dictionary 3
1.1.3 Data Stack 7
1.1.4 Return Stack 9
1.1.5 Text Interpreter 10
1.1.6 Numeric Input 13
1.1.7 Two-stack Virtual Machine 15
1.2 Forth Operating System Features 17
1.3 The Forth Assembler 19
1.3.1 Notational Differences 19
1.3.1.1 Instruction Mnemonics 19
1.3.1.2 Addressing Modes 20
1.3.1.3 Instruction Format 20
1.3.1.4 Labels, Branches, and Structures 20
1.3.2 Procedural Differences 21
1.3.2.1 Resident Assembler 21
1.3.2.2 Immediately Executable Code 21
1.3.2.3 Relationship to Other Routines 21
1.3.2.4 Register Usage 21
1.4 Documentation and Programmer Aids 22
1.4.1 Comments 22
1.4.2 Locating Command Source 24
1.4.3 Cross-references 24
1.4.4 Decompiler and Disassembler 25
1.5 Interactive Programming—An Example 27
2. Forth Fundamentals 31
2.1 Stack Operations 31
2.1.1 Stack Notation 31
2.1.2 Data Stack Manipulation Operations 33
2.1.3 Memory Stack Operations 35
2.1.4 Return Stack Manipulation Operations 36
2.1.5 Programmer Conveniences 37
2.2 Arithmetic and Logical Operations 39
2.2.1 Arithmetic and Shift Operators 39
2.2.2 Logical and Relational Operations 44
2.2.3 Comparison and Testing Operations 45
2.3 Character and String Operations 47
2.3.1 The PAD—Scratch Storage for Strings 48
2.3.2 Single-Character Reference Words 49
2.3.3 String Management Operations 49
2.3.4 Comparing Character Strings 51
2.4 Numeric Output Words 52
2.4.1 Standard Numeric Output Words 53
2.4.2 Pictured Number Conversion 54
2.4.2.1 Using Pictured Numeric Output Words 55
2.4.2.2 Using Pictured Fill Characters 57
2.4.2.3 Processing Special Characters 58
2.5 Program Structures 59
2.5.1 Indefinite Loops 60
2.5.2 Counting (Finite) Loops 63
2.5.3 Conditionals 66
2.5.4 CASE Statement 67
2.5.5 Un-nesting Definitions 69
2.5.6 Vectored Execution 70
2.6 Exception Handling 74
3. System Functions 77
3.1 Vectored Routines 77
3.2 System Environment 78
3.3 Serial I/O 81
3.3.1 Terminal Input 81
3.3.2 Terminal Output 84
3.3.3 Support of Special Terminal Features 85
3.4 Block-Based Disk Access 86
3.4.1 Overview 86
3.4.2 Block-Management Fundamentals 87
3.4.3 Loading Forth Source Blocks 91
3.4.3.1 The LOAD Operation 92
3.4.3.2 Named Program Blocks 94
3.4.3.3 Block-based Programmer Aids and Utilities 95
3.5 File-Based Disk Access 96
3.5.1 Overview 96
3.5.2 Global File Operations 97
3.5.3 File Reading and Writing 99
3.5.4 File Support Words 100
3.6 Time and Timing Functions 102
3.7 Dynamic Memory Management 102
3.8 Floating Point 103
3.8.1 Floating-Point System Guidelines 104
3.8.2 Input Number Conversion 105
3.8.3 Output Formats 106
3.8.4 Floating-Point Constants, Variables, and Literals 107
3.8.5 Memory Access 107
3.8.6 Floating-Point Stack Operators 108
3.8.7 Floating-Point Arithmetic 110
3.8.8 Floating-Point Conditionals 111
3.8.9 Logarithmic and Trigonometric Functions 112
3.8.10 Address Management 114
3.8.11 Custom I/O 116
4. The Forth Interpreter and Compiler 119
4.1 The Text Interpreter 119
4.1.1 Input Sources 119
4.1.2 Source Selection and Parsing 121
4.1.3 Dictionary Searches 123
4.1.4 Input Number Conversion 125
4.1.5 Character String Processing 127
4.1.5.1 Scanning Characters to a Delimiter 127
4.1.5.2 Compiling and Interpreting Strings 129
4.1.6 Text Interpreter Directives 131
4.2 Defining Words 132
4.2.1 Creating a Dictionary Entry 132
4.2.2 Variables 134
4.2.3 CONSTANTs and VALUEs 136
4.2.4 Colon Definitions 138
4.2.5 Code Definitions 141
4.2.6 Custom Defining Words 142
4.2.6.1 Basic Principles of Defining Words 142
4.2.6.2 High-level Defining Words 144
4.3 Compiling Words and Literals 146
4.3.1 ALLOTing Space in the Dictionary 147
4.3.2 Use of , and C, to Compile Values 147
4.3.3 The Forth Compiler 149
4.3.4 Use of Literals and Constants in : Definitions 154
4.3.5 Explicit Literals 154
4.3.6 Use of ['] to Compile Literal Addresses 156
4.3.7 Compiling Strings 156
4.4 Compiler Directives 158
4.4.1 Making Compiler Directives 159
4.4.2 The Control-flow Stack and Custom Compiling Structures 161
4.5 Overlays 163
4.6 Word Lists 165
4.6.1 Basic Principles 165
4.6.2 Managing Word Lists 167
4.6.3 Sealed Word Lists 168
5. The Assembler 169
5.1 Code Definitions 169
5.2 Code Endings 171
5.3 Assembler Instructions 171
5.4 Notational Conventions 172
5.5 Use of the Stack in Code 174
5.6 Addressing Modes 174
5.7 Macros 176
5.8 Program Structures 177
5.9 Literals 179
5.10 Device Handlers 179
5.11 Interrupts 180
5.12 Example 181
6. Programming Style and Editing Standards 183
6.1 Guidelines for BLOCK-based source 184
6.1.1 Stack Effects 184
6.1.2 General Comments 185
6.1.3 Spacing Within Source 185
6.2 Open Firmware Coding Style 186
6.2.1 Typographic Conventions 186
6.2.2 Use of Spaces 187
6.2.3 Conditional Structures 187
6.2.4 do…loop Structures 188
6.2.5 begin…while…repeat Structures 188
6.2.6 begin…until…again Structures 189
6.2.7 Block Comments 189
6.2.8 Stack Comments 190
6.2.9 Return Stack Comments 190
6.2.10 Numbers 190
6.3 Wong’s Rules for Readable Forth 191
6.3.1 Example: Magic Numbers 192
6.3.2 Example: Factoring 192
6.3.3 Example: Simplicity 193
6.3.4 Example: Testing Assumptions 194
6.3.5 Example: IF Avoidance 194
6.3.6 Example: Stack Music 196
6.3.7 Summary 197
6.4 Naming Conventions 197
Appendix A: Bibliography 201
Appendix B: Glossary & Notation 203
B.1 Abbreviations 203
B.2 Glossary 204
B.3 Data Types in Stack Notation 207
B.4 Flags and IOR Codes 210
B.5 Forth Glossary Notation 210
Appendix C: Index to Forth Words 213
General Index 227