ebook img

Forth Programmer’s Handbook PDF

241 Pages·1998·1.839 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Forth Programmer’s Handbook

The Language of Innovation... Forth Programmer’s Handbook Edward K. Conklin Elizabeth D. Rather and the technical staff of FORTH, Inc. FORTH, Inc. 111 N. Sepulveda Boulevard, Suite 300 Manhattan Beach, California usa 90266–6847 310.372.8493 800.55.forth Fax: 310.318.7130 [email protected] www.forth.com FORTH, Inc. makes no warranty of any kind with regard to this material, including, but not limited to, the implied warranties of merchantability and fitness for a particular pur- pose. FORTH, Inc. shall not be liable for errors contained herein or for incidental or conse- quential damages in connection with the furnishing, performance, or use of this material. All brand and product names are trademarks or registered trademarks of their respective companies. Copyright © 1997, 1998 by FORTH, Inc. All rights reserved. First edition, September 1997 Second printing, November 1997 Third printing (2nd ed.), August 1998 Fourth printing, September 1999 Fifth printing, May 2000 Sixth printing, August 2000 ISBN 0-9662156-0-5 This document contains information proprietary to FORTH, Inc. Any reproduction, dis- closure, or unauthorized use of this document, either in whole or in part, is expressly for- bidden without prior permission in writing from: FORTH, Inc. 111 N. Sepulveda Boulevard, Suite 300 Manhattan Beach, California usa 90266–6847 310.372.8493 800.55.forth Fax: 310.318.7130 [email protected] www.forth.com ii CONTENTS 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 iii Forth Programmer’s Handbook 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 iv Forth Programmer’s Handbook 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 v Forth Programmer’s Handbook 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 vi Forth Programmer’s Handbook 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 CustomCompilingStructures 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 vii Forth Programmer’s Handbook 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 viii Forth Programmer’s Handbook 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 ix Forth Programmer’s Handbook List of Figures 1. The “top” of a dictionary. HERE returns the address of the next available location. 4 2. Logical structure of the Forth dictionary 4 3. Structural details of a typical dictionary entry 6 4. Items on the data stack 8 5. Flow diagram of the text interpreter 12 6. Example of a control program that runs a washing machine 28 7. Format of arguments for most two-string operators 50 8. Block handling in a file-based Forth system 88 9. Dictionary entry built by CREATE 133 10. Dictionary entry built by CONSTANT 136 11. Example of structures defined by using DOES> 145 12. Action of the Forth compiler 151 13. “Break key” response example 152 14. Compile-time action of IF 160 15. Diagram of a dictionary entry for a CODE entry 170 16. Hierarchy of data types 209 List of Tables 1. Integer precision and CPU data width 13 2. Valid numeric punctuation characters 14 3. Registers in the Forth virtual machine 15 4. Common stack notation 23 5. Common system-level vectored routines 78 6. Environmental query strings and associated data 79 7. Identifying the input source 120 8. Summary of compile-time branch words 162 9. Forth assembler notation conventions 173 10. Naming conventions 198 11. Notation for the data type of stack arguments 207 x

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.