@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@W1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD` D  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLL&0") $G% }H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` dB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}} HE |||DDOS DOSDOS SYS }}}}CDOS SYS} 0`BDELV !B }`LVUQ   ]   TU J ]L!T  #      TU  } L ? .  t`GBJ V~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI   0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -'}LLu DEHILV 9 .l 9 .l  `` s$B VBH(}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL)}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e*}1i1232435ޥ<<8} 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D,}UPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. LOCK F-}ILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES9!&x#!7&p))'&X*./)L''-؆莟.}R'S  vW DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i/}il ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 00}JB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE1}N !B 1L " 1 !BDED:}:1BJ|DE 1DEBH2}I 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L 3} BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWED COPYING---DN:4}# 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B5} 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#6}PdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%7} 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C}//3Hu ξL/L DRIVE TO WRITE DOS FILES TO?WRITING NEW DOS FILESTYPE "Y" TO WRITE DOS TO DRIVE 2.?}D2:DOS.SYSERROR - NOT VERSION 2 FORMAT. , &* բ( 1L `[) 0NΞ 0 L1M) 1@} L BAD LOAD FILELOAD FROM WHAT FILE?) 0 0#B 1L WHAT FILE TO LOCK?) 0 0$B 1L WHAT FILE TO UNLOCK?DUA}P DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO USE PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV. h  ,B}  `)  <0 2 2 0  ,   ,,ޢ* 1L ,K* 1 ~0 0C}FINSERT BOTH DISKS, TYPE RETURNERROR - DRIVES INCOMPATIBLE., 1 ~038  , 1L D}, &*  Lz+, 0 , 1 ~0 + Y,0!,0 ,L+ ,mm  v,"ǭE}0Ξ, 05,Lt+L +,Hh` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNF}INSERT DESTINATION DISK,TYPE RETURN`    `L,8,0( rG}L1(`ߢ) 1* 1 ~0Y`hhL S SL1) 8`NAME OF FILE TO MOVE?- 0 0|DLtH}% A., 1 <0 0 .@L# .BJ 1  DEHIB V L1 ,5 1 <0,L. I} JB|,A#Pd#DE 1 HI BDEHHII 1 B 1 , 1 <0,0Lf- B VJ},A#P, 1 <0 0L#L ߢ) 1* 1 ~0Yj383}mm ݭK}}`8}``|* ? ɛ,`|:(|/ 1L `DESTINATION CANT L}BE DOS.SYS0 0H{ $22Δ $28/L /) $2 Π $2 0 ξM}hAΞB,0 J 1 BޝDEHI,HDE 1HIHIDELSAVE-N}GIVE FILE,START,END(,INIT,RUN)O X0 1`BDEPHI V` X0H 1 L O}0 0 1L0`PLEASE TYPE 1 LETTER,0`hhL <0 1L0LA1 ,;ɛ7,"ɛ:ݦ1ݥP}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{Q}NAME TOO LONG B VL ` L1I H1EӝDL1|mDiE` V0`8d/8 i:"2!22 1R} L ERROR- 128ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4u  S*P*A*C*E fig-FORTH vers. 1.1 Page @S*P*V}A*C*Efig-FORTH version 1.1INTRODUCTION S*P*A*C*E fig-FORTH 1.1 is a full implementation of the de-facto staW}ndard FORTH as defined in the FORTH Interest Group's (fig) Implementation Guide. It follows closely (in fig-FORTH style if nX}ot in deed) the 6502 Rev. 1.1 FORTH sources as supplied by the the FORTH Interest Group (FORTH Interest Group, P.O. Box 1105,Y} San Carlos, CA 94070). To make use of the inherent power of both fig-FORTH and the host computer, many changes were mZ}ade during the long process of adapting the sources to the Atari PCS (Personal Computer System). However, the definitions, o[}perations, and user interfaces were implemented exactly as described in the Implementation Guide. This is an expanded f\}ig-FORTH package in that many useful definitions have been added, including such extended double-precision words as 2DUP, 2SW]}AP, D@, D! ...and many others. For the FORTH purist, the de-facto standard FORTH Editor is included. You may find that^} other FORTH editors, as they become available, may be more to your liking. In addition, a complete Assembler for the 6_}502 is included at no extra cost. And as far as debugging those new FORTH programs, various debug functions are best provide`}d by S*P*A*C*E fig-FORTH itself. Nonetheless, debugger aids are included as loadable screens as an integral part of the totaa}l package. To make full use of the Atari's graphics capabilities, a powerful Color Graphics Vocabulary can be loaded frb}om screens on the master diskette. Unique to this implementation, as released, is the inclusion of a Floating Point Vocc}abulary, a set of Floating Point definitions also supplied as screens on the master diskette. A new SAVE definition ald}lows you to create a self-booting diskette that includes all of the definitions you added during the current session. This ae}llows you to produce applications diskettes trivially, and in volume. Definitions not implemented are DLIST, MON and TAf}SK. This fig-FORTH 1.1 implementation of FORTH 65 retains the complete set of Atari Screen Editor capabilities. Thus, g}editing and changing FORTH programs is simple, forthright and straightforward.Patrick Mullarky, Implementor and Writerh}John C. Allen, Writer and EditorCONFIGURATIONComputer and Memory S*P*A*C*E fig-FORTH 1.1 requires and Atari 4i}00 or 800 (600XL, 800XL or 1200XL) and 16K of memory. That is the absolute minimum. 24K or more is recommended. Even at 24j}K, you will not be able to use most of the Color Graphics higher level graphics modes without interfering with the screen bufk}fers. But don't let the lack of equipment deter you. An Atari 400 with 16K will leave you about a thousand byte space in whl}ich to learn a lot about FORTH.Disk or Cassette At least one disk drive is recommended. Two are a joy. As applied m}to microcomputers, some form of quick access mass storage is highly desirable. However, it is possible to use a cassette. n} All though FORTH is not really very workable in a cassette only environment, applications software using the FORTH languao}ge can be put onto a self-booting cassette if the user requires. If you have a cassette copy of S*P*A*C*E fig-FORTH 1.1, it p}will take some time to load, but it will come up finally.Printers A printer is an important tool for FORTH. S*P*A*Cq}*E fig-FORTH 1.1 will work with any ATARI printer using two new definitions, PON and POFF, which turn the printer on and off,r} respectively. The printer does not print the prompts and commands as they occur on the screen, allowing very clean printouts}s.RS-232 Interfaces A download sequence is provided. With the ATARI-850 DOWNLOAD screen loaded, typing BOOT850 (RETt}URN) will download your ATARI 850 Interface if you have it turned on. There is no need to download the RS-232 AUTORUN.SYS whu}en you are in the FORTH environment.STARTING-UP Simply place the ATARI fig-FORTH disk in the disk drive and power upv} the computer. The program will come up with the prompt: "fig-FORTH 1.1 " when the load is complete. Hitting the RETURN keyw} will give you the standard FORTH prompt "ok". The Editor, Assembler, Debug, Color Graphics, and Floating Point packagex}s included with ATARI fig-FORTH must be loaded separately.NOTES ON THIS IMPLEMENTATION** The program does not size memy}ory, and actually uses only the lower 24K of memory. This may seem limiting until one realizes that the entire FORTH packagez} of routines supplied, including Editor, Color Graphics, Assembler, Debug, and Floating Point all together only take up about{} 4K, and there is 4K left over!** The program does not use the lower 8K of memory for several reasons: some of the Opera|}ting System functions use lower RAM; The FMS routine which loads binaries resides itself in lower RAM; the Assembler/Editor C}}artridge itself cannot load binaries into lower RAM without destroying its own areas of RAM. (Yes, this whole product was pu~}t up using the Assembler/Editor Cartridge!!)** If you have only 24K of RAM you will not be able to use most of the Color }Graphics higher level graphics modes without interfering with the screen buffers.** The SYSTEM-RESET key calls the COLD (}cold-start) function directly, so any new word definitions that have not been "SAVE"d will be erased. This can be a handy fe}ature while debugging: simply pressing SYSTEM-RESET erases all of your old work and leaves a clean copy. There is a negativ}e side: if your program wanders off into never-never land, and you have to press SYSTEM-RESET, all of your new definitions w}ill be lost unless you have been editing them into new screens. Using the standard OS screen editing functions excludes the }use of the BREAK key for this purpose. The BREAK key is used to inform the system to ignore the previous input string.** } There is absolutely no compatibility between FORTH diskettes and DOS (I or II) diskettes. You may read a DOS diskette with }a FORTH program, but unless you know exactly what you are doing, writing to a DOS diskette will, in all probability, trash-ou}t the diskette from a DOS point-of-view. The only DOS function that applies to FORTH is that FORTH expects DOS-Formatted dis}kettes.** The word TYPE outputs only 7 bits to the screen or printer. If you want TYPE to output all 8 bits (which inclu}des reverse-video characters) you can type in the following little sequence: HEX FF ' TYPE 14 + C! DECIMALIn fac}t, you can make up a couple of routines if you wish: HEX : MODTYPE ' TYPE 14 + C! ; } : 8-BITS FF MODTYPE ; : 7-BITS 7F MODTYPE ; DECIMALThen, to set your system to type out 7 bits simp}ly type 7-BITS and for 8 bits just type 8-BITS. Further, these routines can be used in any other programs you wish, just as }any other word definition. If you type VLIST with TYPE set to 8-BITS then the last character of each word will be in reverse}-video. The word EMIT always outputs all 8 bits in each byte. TYPE uses EMIT with a mask for 7 or 8 bits.** The ERROR s}creens are 14 and 15 instead of the standard 3 and 4. This is because the self-booting FORTH interpreter, if it is present o}n the diskette you are using, occupies screens 0 through 7, with 6 screens available for larger versions. If your working di}skette does not have a bootable FORTH on it you may use all screens numbered 0 through 89. Disk Drive 2 screens are numbered} 90 through 179. The second drive may also be accessed by the word DR1 which sets an offset into the drive addresses for aut}omatically accessing the second drive. The word DR0 accesses the first drive. Alternatively, the blocks are numbered 0}-719 on the first drive, and 720-1439 on the second drive.** THIS IS fig-FORTH, NOT FORTH-79! This means that disk block}s are 128 bytes long and not 1K bytes long. Each screen is 8 blocks long, not 1 block long. A later version will be ma}de available, someday, using the FORTH-79 standard, a standard that doesn't map too well into the 8-bit micro world, but a st}andard nevertheless and standards should be followed if they are at all usable. This product uses the fig-FORTH "standard".}DEFINITIONSSAVE (---) 200This word, when executed, saves a self booting copy of the RAM-resident FORTH program} to Disk Drive 1, after setting up parameters for COLD and FENCE. On booting up, all definitions will be protected by fence,} and the FORTH vocabulary will be the current dictionary. This word uses DSAVE described next. 150DSAVE (n---) 200T}his word writes n blocks to Disk Drive 1 starting at sector 0. 150-DISK (addr n2 n3 flag --- n4) 200This word perfor}ms the actual read/write on the disk, where addr is the starting RAM address, n2 is the actual diskette sector number (0-719)}, n3 is the drive number (1-4), and the flag is 1 for a read and 0 for a write. On return, n4 will contain a zero if everyth}ing went ok, or it will contain the DOS error number returned by DOS if any kind of error occurred. It is not expected that }the normal FORTH program will use this word. The usual disk I/O word used is R/W which is documented in the implementation g}uide. 150PON (---) 200Enable the printer5, PFLAG is set to one, and thereafter every character put to the screen w}ill be echoed on the printer except the prompts. 150POFF (---) 200Disables the printer. Sets PFLAG to zero. 150}PFLAG (--- addr) 200The printer flag. See PON. 150GFLAG (--- addr) 200The graphics mode cursor-control flag. } When GFLAG is set to non-zero, FORTH will use the alternate cursor address variables required by the Operating System to han}dle the text window at the bottom of the screen. This variable is handled automatically by the various graphic commands in t}he Color Graphics package. 150PROMPT (---) 200This word was added to handle the extended complexities of excluding th}e prompt from the printer when PFLAG is non-zero. Basically, it types "ok". 150 A series of words were defined for th}e Assembler: NEXT, PUSH, PUT, PUSHOA, POP, POPTWO, BINARY, IP, W, N, XSAVE, and UP. These are explained in the Assembler doc}umentation and will not be further described here.--------------------"Go FORTH and conquer""May the FORTH be wi}th you"--------------------P.S. The best book for new FORTH programmers is "Starting FORTH", available at your local }computer bookstore, written at FORTH, Inc.EDITOR The Editor in this package is the "Screen Editor" described in t}he FORTH Interest Group's Installation Manual, complete and unchanged. It isn't the most sophisticated editor around, and it} has some quirks that take getting used to, (for example: it is very difficult to insert spaces into a line of text) but it i}s specifically designed to work with FORTH screens and is a very handy tool for that purpose. To load the Editor into y}our system, simply put the Master diskette into drive 1 and type:27 LOAD Ignore any errors regarding duplicate names}. In order to use the Editor, you must first type EDITOR to set the context to the Editor vocabulary. To edit a given scree}n, type n LIST first to load the screen into memory. One new word has been added to the Editor vocabulary, MARK. This }word will mark every line in the current screen (the one you last used the LIST command with) as having been modified, so tha}t a subsequent FLUSH command is given, the whole screen will be written out. It is used primarily to update backup diskettes} and to duplicate single screens onto other diskettes. Whenever you have finished an editing session, type the word FLU}SH to save your work. It is quite important that you get into the habit of doing this. If you fail to do this, and subseque}ntly your program bombs out, you can lose the last screen that you edited.COMMANDSword form 200definition 150}L (---) 200List the current screen. The current screen is changed by n LIST which will list out screen n and make }it the current screen. 150T (n---) 200Type out line n and put the cursor at the beginning of that line. 150E } (n---) 200Erases line n. 150D (n---) 200Delete line n and move up all following lines. Save the conte}nts of the line in a buffer so that an I command may be used later if desired. 150P (n---) 200Put a character st}ring into the line n and erase the previous contents, if any. This is the command used to create new lines. The character s}tring may be any combination of characters and spaces up to 64 characters in length. (Character string is delimited by a car}riage return .) 150I (n---) 200Insert the buffer from the previous D command into a line created immediately} above the line n and then move all following lines (including n) down one line. The last line is lost. 150F (---}) 200Find a character string in the current screen starting from the current cursor position. 150B (---) 200Ba}ck up the cursor over the word just found using the F command. 150C (---) 200A character string will be inserted} into the current line at the current cursor position. This is the primary character entry command (with P). 150M } (n---) 200Move the cursor n characters forward or backward (backward if n is negative). 150S (n---) 200Spread} the current screen at line n. This will create a new line immediately preceding line n and move all following lines down on}e. The last line will be lost. 150X (---) 200Extract a character string and shorten up the line. This is the p}rimary find-and-delete command. The X command uses the F command, which means that the string search will commence from the }current cursor position. 150CLEAR (n---) 200CLEAR screen n by completely filling it with blanks. This destroys any }previous information on that screen. Note that an unused, unCLEARed screen will be filled with "hearts" which is the Atari n}ull character. CLEAR will replace the "hearts" with spaces. 150COPY (n m---) 200COPY screen n onto screen m. This} destroys any old information on screen m. 150 The best way to learn the Editor is to pick an arbitrary unused screen }and use the LIST and CLEAR commands to erase it and make it the current screen. Then use the P command to put several lines }of text into the new screen. Then, try out the various commands one at a time until they become somewhat familiar. Use the }command FLUSH if you wish to keep the results of your handy work, otherwise, use the command EMPTY-BUFFERS to erase all trace}s of your screen editing.D2:SPACE2g-FORTH vers. 1.1 Page @S*P*)EDITOR (69) VOCABULARYM (Starting FORTH pg 84) 200Copies the current line into the insert buffer and moves a } copy of the insert buffer into the line under the specified line in the destination block. 150R (Starting FORTH p }g 85) 200Combines the commands E and I to replace a found string with a given string or the contents of the insert buffer. } 150U (Starting FORTH pg 84) 200Copies the given string, in any, into the insert buffer, then puts a copy of the }insert buffer in the line under the current line. 150I (Starting FORTH pg 85) 200Copies the given string, if any }, into the insert buffer, the inserts the contents of the insert buffer at the point just behind the current cursor position. } 150S (Starting FORTH pg 85) 200Copies the given string, if any, into the find buffer, then searches the range o }f blocks, starting from the current block and ending with n-1, for the string. 150D (Starting FORTH pg 85) 200Co }pies the given string, if any, into the find buffer, finds the next occurrence of the string within the current line, and del }etes it. 150E (Starting FORTH pg 85) 200To be used after F. Erases as many characters as are currently in the f }ind buffer, going backwards from the cursor. 150F (Starting FORTH pg 85) 200Copies the given string, if any, int }o the find buffer, and then finds the string in the current block. 150P (Starting FORTH pg 84) 200Copies the giv }en string, if any, into the insert buffer, the puts a copy of the insert buffer in the current line. 150T (Startin }g FORTH pg 84) 200Types the current line. 150X (Starting FORTH pg 85) 200Copies the current line into the inse }rt buffer and extracts the line from the block. 150L (Starting FORTH pg 76) 200List the current block. 150N } (Starting FORTH pg 76) 200Used with L. Causes the next block to be listed. (e.g. N L) 150B (Starting FO }RTH pg 76) 200Used with L. Causes one block back to be listed. 150TILL (Starting FORTH pg 85) 200Copies the give }n string, if any, into the find buffer, then deletes all characters starting from the current cursor position up to and inclu }ding the string. 150COPY (Starting FORTH pg 85) 200Copies the contents of the source block to the destination block }. (e.g. COPY nnn ddd) 150WIPE (Starting FORTH pg 84) 200Sets the contents of the current block to blanks. 150ED }ITOR (Starting FORTH pg 86) 200Sets the editor vocabulary to current. Must be entered to use the editor. 150FIND-BUF } (Starting FORTH pg 86) 200A memory location in which the string that is to be searched for is stored. Used by F, E, D, T }ILL and S. 150INSERT-BUF (Starting FORTH pg 86) 200A memory location in which the string that is to be inserted is s }tored. Used by I, P, and U. In addition, X moves the line that it deletes into the insert buffer. 150DEBUG T }he Debug package may be loaded by simply typing: 21 LOAD The Package includes several very useful features f }or testing and debugging your FORTH program. Each function is described below in standard FORTH nomenclature.DEFINITIONS }B? (---) 200This word will type out the current BASE value (radix) without changing it. It overcomes an intrinsic } difficulty in simply typing BASE ? which will always return the value 10 no matter what the current radix is. (10 is the rig }ht answer always!) This word types out the value Base 10 so that if your current base is hex (hexadecimal), B? will type out } 16. 150CDUMP (addr n---) 200This word will type out n bytes in character format starting at addr. For example, to }display the characters in any disk block, say sector 34 for instance, just type 34 BLOCK 128 CDUMP. 150DUMP (addr---) } 200This word will type out n bytes in numerical format using the current value of BASE. You can go from a decimal dump to } a hexadecimal dump simply by typing HEX first and vice versa. 150DECOMP (---) 200This word will decompile the previo }usly entered colon definition for debugging purposes. Some caution is necessary in the use of this word. It is defined for }the purpose of decompiling colon definitions only, and it can go off to never-never land if you try to decompile things like }dictionary headers (ex: FORTH), words terminated by ;CODE or words whose definitions do not end in ; such as ABORT. Most all } definitions that are not colon definitions will simply cause the message "Primitive" to be displayed if you try to decompile } them. Try DECOMP VLIST and DECOMP @ to see the different results. (This word is the same as SHOW in earlier versions.) 15 }0H. (n---) 200Outputs the top of the stack in hexadecimal, no matter what the current value of BASE is. Similar t }o U. (unsigned type-out). 150S. (---) 200Print out the contents of the stack in unsigned form using the current B }ASE (radix). Does not change the contents of the stack in any way. This is quite easily the most useful debugging tool. Du }ring program development you will probably use it frequently. 150ASSEMBLER The Assembler vocabulary included in } this product is a full-featured 6502 assembler, capable of assembling the total range of assembler opcodes. It is very simi }lar to W. Ragsdale's assembler used in the fig Installation Manual. It is loaded by typing: 39 LOAD As is u }sual in any FORTH product, the notation used in the assembler is in RPN or Reverse Polish Notation. This very brief outline }assumes a quite complete knowledge of assembly language programming, particularly in regard to the 6502. The RPN notation wi }ll seem awkward at first, but it allows the full power of the FORTH language to be brought to bear in an assembler-level rout }ine. The opcodes are very similar to standard 6502 opcodes, except that every one ends with a comma, a FORTH convention for }assembler-level codes. Some examples will describe the assembler in the best fashion. 300LDA 123 is written as 123 LDA,s }imilarly,STA 3BC0 IS 3BC0 LDA,LDA 33,X IS 33 ,X LDA,AND (45,X) IS 45 X) AND,STA (74),Y IS 74 } )Y STA,LDA 3374,Y IS 3374 ,Y LDA,LDX #7F IS 7F # LDA, 150 The current BASE value (radix) of FORTH det }ermines whether the assembler creates hexadecimal, decimal or octal values, or any radix for that matter. The only non-s }tandard opcodes are the A register shifts which are expressed as: ROL.A,instead of: ROL Aand the op }code for an indirect JMP instruction which is: nnnn JMP(),instead of: JMP (nnnn), Loop construc }ts use the words BEGIN, and END, (note the commas) and as alias for the latter UNTIL,. The END, is preceded by a 0= or a 0= }NOT construct to determine loop termination. The termination test actually assembles as a BNE or BEQ instruction, as in the }following example: 0 ,X LDY, BEGIN, INY, 0= END, NEXT JMP,The above routine increments the Y register until it i }s zero and exits to a routine named NEXT. It will be assembled as: LDY 0,X INY BNE *-1 } JMP NEXT The branch instructions have been integrated into a generalized IF construct so that they may be readily i }ncorporated into a level-less branch capability. The syntax is: IFxx, ... ... ... THEN,or: IFxx, ... } ... ... ENDIF,where xx is the last two letters of the standard 6502 branch instructions (IFEQ, IFNE, IFMI, etc.) The test } will be made on the status register as appropriate to the sense of the conditional branch, and if the test is TRUE, the code } enclosed between the IFxx, and the THEN, or ENDIF, will be executed. Otherwise, the enclosed code will be skipped. The ope }ration of the construct is almost identical to the IF ... THEN at the higher level FORTH definitions except that nothing is p }opped off the stack by IFxx, words. Instead, a branch instruction is assembled. There are only a few "legal" exits fro }m assembly language FORTH routines to the main FORTH inner interpreter. These addresses are predefines in the main FORTH dic }tionary and need no further definition by the assembly language itself. These returns are accomplished by a cccc JMP, sequen }ce such as shown in later examples. The legal exits are:NEXTL200The normal return, takes no stack action. 150PUT 20 }0Places the A register and the first item on the hardware stack on the top of the stack, i.e. does a 1 ,X STA, PLA, 0 ,X STA }, NEXT JMP sequence. This action over-writes whatever was previously on the top of the stack. 150PUSH 200Pushes down th }e stack and does a PUT. This action adds one item to the stack. 150POP 200Performs the DROP function. 150POPTWO 200 }Performs DROP DROP. 150PUSHOA 200First pushes the A register followed by a zero. Essentially, it pushes one byte, the }A register, onto the stack, adding a 16 bit word to the stack with one byte in the lower half. 150BINARY 200This is used } when you take two words off the stack and replace them with one word. The best example is the add word, + . This routine d }oes a DROP followed by a put which over-writes the old top of the stack. The word CODE is used to call the assembler au }tomatically when defining a new assembly level routine. The character sting following CODE will become a new FORTH word havi }ng directly executable assembly level code. Two examples follow which do the same thing. They multiply the top of the stack } by two, using a single left shift across the two bytes that are the top of the stack: CODE 2* 0 ,X ASL, 1 ,X ROL, NEXT } JMP, CODE *2 0 ,X LDA, ASL.A, PHA, 1 ,X LDA, ROL.A, PUT JMP,The first routine shifts the actual memory locations of }the top of the stack. This procedure is quite short and very fast. The second routine is the more universal method, in that } the arguments are first loaded to the A register and later stored. Notice that the low order byte is pushed to the hardware } stack and the high order byte is left in the A register on the return to PUT . The second example shows how words are retri }eved from the stack and how a return is made. To reach the second word down on the stack, you would use 2 ,X LDA, to access }the low byte and 3 ,x LDA, to access the high byte, and so on. You can increment the stack pointer (push the stack) with a D !}EX, DEX, sequence, and pop the stack with an INX, INX, pair. In point of fact, the DROP word does a simple INX, INX, NEXT JM "}P, sequence. If your routines need the x register for any reason, you must save it off someplace. A very convenient pl #}ace called XSAVE is provided. Do an XSAVE STX, later followed by an XSAVE LDX, instruction. Several other addresses are mad $}e available as hooks into the FORTH system. These are predefined words which you may use at your own risk. You had better s %}tudy up a bit before you do. But some routines, such as the assembler itself, need these addresses.IP 200The interpreter &} instruction pointer which points to the next word to be executed. 150W 200The actual execution address of the current w '}ord being executed. 150N 200A convenient eight byte (four word) save area where you may save your words and bytes by sto (}ring them in N+0, N+1, N+2 ... N+7. There is an internal routine called SETUP which you may call with the following sequence )}: # 2 LDA, SETUP JSR, if you want to copy the top two stack words into N+0 ... N+3, low bytes first. Use # 3 for the top thr *}ee stack words, etc. This does not change the stack itself, only extracts copies however many words you want. 150 On +}entry to your routine, the Y register will contain zero. This fact can be handy for clearing out bytes or registers. For ex ,}ample, you can clear the A register with a simple TAY, instruction. Using the assembler, like almost any assembly level -} programming, is playing with fire, and you will probably get burned from time to time. But, one of the delights of FORTH is .} that you can simply reboot and try again. Careful examination of your code will probably clear up your problems.NOTE: Wm /}. Ragsdale's assembler has a good write-up in Dr. Dobb's Journal, Vol. 6, No. 9 (Sept. 84). This assembler is quite similar 0}on the surface. Internally, they are totally different approaches to solving the same problem using FORTH. Reading Ragsdale 1}'s code and reading the code for this assembler could be very instructive in the area of assembly FORTH programming.FLO 2}ATING POINT The floating point package uses the Atari floating point routines in OS ROM, exactly like the Atari Basic 3} interpreter does. The routines are not very fast, but they are easily accessible and fairly complete (there are no transcen 4}dental functions except LOG and EXP). Most of the floating point definitions follow the conventions for double precision wor 5}ds as far as spelling goes, making them very easy to remember. To load the floating point package, first make sure that 6} you have already loaded the assembler, then simply put in the master disk and type: 60 LOADThe floating point r 7}outines will be loaded into the current dictionary. All floating point operations assume 3-word variables (fn) with few 8} exceptions. The only real variant from standard FORTH nomenclature occurs in the definition of floating point constants and 9} variables (FCONSTANT and FVARIABLE respectively) in that these operations expect a floating point number to be on the stack :}already. Therefore the syntax is a bit different from single precision or double precision constants and variables. A ;}single precision variable, for example, would be written: 1234 VARIABLE MYNUM Whereas a floating point varia <}ble would be written: FLOATING 1234 FVARIABLE MYNUM To reduce typing, the word FLOATING has been given the s =}ynonym FP: FP 1234 FVARIABLE MYNUMIn fact, the word FLOATING or FP should precede any floating point number if y >}ou wish that number to be placed on the stack in floating point format. Floating point numbers may be entered in any st ?}andard FORTRAN "E" format: 1.234 .00000001 -7.8945E-31 9999999 5 All @} of the above are legal floating point numbers as long as they are preceded by FP or FLOATING. The decimal point is optional A} for integer values. The package is very easy to use. Here is an example of a square root function definition: : B} FSQRT FLOG FP 2.0 F/ FEXP ; The routine expects a floating point value on the top of the stack (top 3 words), takes t C}he natural log of the value, enters the floating point value 2.0, divides the numbers, and raises the result to the power "e" D}. This is the standard "slow" square root routine used in mathematics.DEFINITIONS The following definitions conform E} to the standard FORTH nomenclature, with the addition of the symbol fn (f1, f2, etc.) which represents a 3 word floating poi F}nt number.FCONSTANT (f1---) 200A character string will be defined as a new word which will place the floating point G} constant f1 on the stack. The floating point number, f1 is normally preceded by the word FLOATING or FP. 150FVARIABLE H} (f1---) 200A character string will be defined as a new word which will return the address of the floating point variable I} whose initial value will be f1. f1 is normally preceded by the word FP or FLOATING. 150FDUP (f1---f1,f1) 200 J}Duplicates the floating point number on the top of the stack. 150FDROP (f1---) 200Drop the floating point numbe K}r on the top of the stack. 150FSWAP (f1,f2---f2,f1) 200Reverse the order of (swap) the top two floating point n L}umbers on the stack. 150FOVER (f1,f2---f1,f2,f1) 200Copy the second floating point number and place it on the t M}op of the stack. 150FLOATING (---f1) 200A character string will be converted to a floating point number and placed N} on the top of the stack. The string must be a valid, FORTRAN-style floating point number representation, e.g. 1.23 or .67E9 O} or -9.876E-21 or 5 . There is no error check. If the string is invalid, the value of f1 will be undetermined. 150FP P} (---f1) 200A synonym for FLOATING. 150F@ (addr---f1) 200Load the floating point number whose addr Q}ess is at the top of the stack. 150F! (f1,addr---) 200Store the floating point number at the address on the R}top of the stack. A total of four words will be dropped from the stack at the completion of F!. 150F. (f1---) S} 200Type out the floating point number on the top of the stack. The output format will be identical to the Atari Basic for T}mat. The floating point number will then be dropped from the stack. 150F? (f1---) 200Type out the floating U}point number whose address is on the top of the stack. 150F+ (f1,f2---f3) 200The top two floating point numb V}ers are added and the result is placed on the top of the stack. 150F- (f1,f2---f3) 200The floating point num W}ber f2 is subtracted from the floating point number f1 and the result is placed on the top of the stack. 150F* X} (f1,f2---f3) 200The top two floating point numbers are multiplied and the result is placed on the top of the stack. 150 Y}F/ (f1,f2---f3) 200The floating point number f1 is divided by the floating point number f2 and the result is pl Z}aced on the top of the stack. 150FLOAT (n---f1) 200The integer on the top of the stack is converted to a floati [}ng point number and the result is placed on the top of the stack. 150FIX (f1---n) 200The floating point numbe \}r on the top of the stack is fixed (after rounding) and placed on the top of the stack. The range of the integer result must ]} be between -32768 and 32767. 150FLOG (f1---f2) 200The natural logarithm of the floating point number on the t ^}op of the stack replaces the top of the stack. 150FLOG10 (f1---f2) 200The log base 10 of the floating point numb _}er on the top of the stack replaces the top of the stack. 150FEXP (f1---f2) 200The floating point number on th `}e top of the stack is raised to the power "e" and replaces the number on the top of the stack. 150FEXP10 (f1---f2) a} 200The floating point number on the top of the stack is raised to the power 10 and replaces the top of the stack. 150F0 b}= (f1---flag) 200This word drops the floating point number from the stack and tests it. If the number is identi c}cally equal to zero, a true flag (1) is placed on the stack. Otherwise, a false flag (0) is placed on the stack. 150F= d} (f1,f2---flag) 200The top two floating point numbers are dropped from the stack and compared. If they are identi e}cally equal, a true flag (1) is placed on the stack. Otherwise, a false flag (0) is placed on the stack. 150F< f} (f1,f2---flag) 200The top two floating point numbers are dropped from the stack and compared. If f1 is strictly less tha g}n f2, then a true flag (1) is placed on the stack. Otherwise, a false flag (0) is placed on the stack. 150Some Random N q}B'DOS SYSB*+DUP SYSBxUSPACE1 BSPACE2 BswSPACE3 B4SPACE4 BREADME DOCotes: This package is not meant to be exhaustive, nor is any claim made for any particular level of usefulness. Howeve r}r, if you have a need for floating point capabilities, the package works quite well to extend the range of numbers, particula s}rly in the area of scientific calculations. Trigonometric functions could be added by a clever programmer. A sufficient set t} is SIN, COS, and ATAN. A random number generator could be added also. In fact, any number of features could be added. u} In summary, if your program specifications cannot be implemented using the double precision capability of FORTH, then try t v}his floating point package.D2:SPACE3ting FORTH pg 84) 200Copies the current line into the insert buffer and moves a ,COLOR GRAPHICS The Assembler vocabulary must have been previously loaded into your FORTH dictionary before the Colorx} Graphics definitions will load properly. Once you have the assembler loaded, simply type: 50 LOADThere is a tiy}ny demo program which will draw a box and FIL it in Graphics Mode 5 when you enter the word FBOX. Simply type: 56z} LOADfollowed by: FBOXSimply type 56 LIST to examine the program itself.NOTICE: As in BASIC, a color value {}of zero is used to erase a point. Also, note that in Graphics Mode 8, there are only two color values, 1 and 0.DEFINITION|}S The following words have been defined for use with S*P*A*C*E fig-FORTH in programming color graphics. Most resemble }}the commands used in the BASIC language.SETCOLOR (n1,n2,n3---) 200Color register n1(0...4) is set to color n2 (0..~}.15) at luminence n3 (0...7). This word is very similar to the BASIC SETCOLOR command. 150SE. (n1,n2,n3---) 2}00A synonym for SETCOLOR using an identical abbreviation as used in BASIC. 150GR. (n---) 200This word select}s Graphics Mode n, where n is defined exactly as in BASIC's "GRAPHICS n" command. (plus modes 9, 10 & 11) 150XGR } (---) 200A simple word which allows easy exit from Graphics Modes 1-8. It essentially does a "0 GR". 150POS } (n1,n2---) 200Sets the X (n1) and Y (n2) coordinates for the next point to be plotted. It does not plot anything by itse}lf. It is primarily used in the FIL word definition. 150PLOT (n1,n2,n3---) 200Using the color value given by }n1, plot the point at position x (n2), y (n3). 150DRAW (n1,n2,n3---) 200Draws a line from the last plotted poi}nt using color value n1 to the point X (n2), Y (n3). 150FIL (n---) 200Fills the enclosed area just drawn with} color value n. The Atari FIL command is somewhat awkward to use. Careful reading of the Atari literature is recommended. }See example of FIL described later. 150G" (---) 200In Graphics Modes 1 or 2, this word performs exactly as t}he word ." does in text mode. The character string will be compiled if in compiler mode, or typed out if in interpreter mode}. The POS word may be used to position the output.SOUND Creating sounds on the Atari is a ccomplished by simply s}toring values into particular locations just as if the locations were actually memory. There is no real need for any particu}lar "SOUND" definitions in this FORTH package. Simply refer to the Atari Hardware Manual, CO16555, available through your de}aler or direct from Atari. Basically, storing a byte into addresses D200, D202, D204, and D206 (hex) sets the frequenci}es of channels 1 through 4 respectively. Addresses D201, D203, D205 and D207 set the noise factors (high four bits) and the }volume (low four bits) in channels 1 through 4. Location D208 is the Audio Control Register, where every bit means something} different. Try a few things and see what happens!VOCABULARY LISTNote: This is a list of words not defined by the }Instruction Manual or the fig-FORTH Installation Manual.2OVER (Starting FORTH pg 53) 200Makes a copy of the sec}ond pair of numbers and pushes it on top. 1502SWAP (Starting FORTH pg 53) 200Reverses the top two pairs of numb}ers in the stack. 1502DROP (Starting FORTH pg 53) 200Discards the top pair of numbers. 1502DUP (St}arting FORTH pg 53) 200Duplicates the top pair of numbers. 150' (Starting FORTH pg 246) 200Attempts to fi}nd the address of the word that follows the input stream in the dictionary. 150FLUSH (Starting FORTH pg 84) 200}Forces any modifications that have been made to a block to be written to disk. 150BINARY (Starting FORTH pg 284) }200Converts the text beginning at addr1 to a binary value with regard to base. The new value is accumulated into d1, being }left as d2. addr2 is the address of the first non-convertible character. 150U< (Starting FORTH pg 177) 200L}eaves true if u1 for a leading minus sign. 150#> (Starting FORTH pg 178) 200Completes num}ber conversion by leaving the character count and address on the stack. (These are the appropriate arguments of TYPE.) 150}<# (Starting FORTH pg 177) 200Begins the number conversion process. Expects an unsigned double length number }on the stack. 150SPACES (Starting FORTH pg 27) 200Prints the given number of blank spaces at your terminal. 150}BEGIN (Starting FORTH pg 143) 200Sets up an indefinite loop. To be used in with conjunction with UNTIL or WHILE}. 150UNTIL (Starting FORTH pg 143) 200Part of an indefinite loop. The loop will end when the UNTIL flag is tru}e. 150WHILE (Starting FORTH pg 143) 200Part of an indefinite loop, will execute xxx and yyy if the WHILE flag i}s true, ends if the WHILE flag is false. 150REPEAT (Starting FORTH pg 143) 200Used with BEGIN and WHILE to repea}t the loop. 150IF (Starting FORTH pg 103) 200The start of a conditional branch statement. If its flag is tr}ue, it will execute xxx. (See ELSE.) 150ELSE (Starting FORTH pg 103) 200Part of the conditional branch stateme}nt. If the IF flag is false, then it will execute ELSE yyy. (See THEN.) 150THEN (Starting FORTH pg 103) 200P}art of the conditional branch statement. Whether the flag is true or false, the THEN zzz will be executed. 150DO } (Starting FORTH pg 143) 200Sets up a finite loop. Used with LOOP and +LOOP. 150LOOP (Starting FORTH pg 143}) 200Sets up a finite loop, giving the index range. 150+LOOP (Starting FORTH pg 143) 200As above, except adds} the value of n to the index. 150FORGET (Starting FORTH pg 84) 200Forgets all definitions back to and including }xxx. (e.g. FORGET xxx) 150' (Starting FORTH pg 246) 200Attempts to find the address of xxx (the word that }follows the input stream) in the dictionary. 150EXPECT (Starting FORTH pg 284) 200Awaits u characters (or a carr}iage return) from the keyboard and stores them starting at the address. (e.g. EXPECT (addr) u) 150LOAD (Startin}g FORTH pg 84) 200Loads a disk block (compiles or executes.) 150BLOCK (Starting FORTH pg 283) 200Leaves the a}ddress of the first byte in block u. If the block is not already in memory, it is transferred from mass storage into whichev}er memory buffer has been least recently accessed. If the block occupying that buffer has been updated (i.e. modified), it i}s rewritten onto mass storage before block u is read into the buffer. 150BUFFER (Starting FORTH pg 283) 200Obtai}ns the next block buffer, assigning it to block u. The block is not read from mass storage. 150DR0 (info sheet}) 200Accesses disk drive number one. 150DR1 (info sheet) 200Accesses disk drive number two. 150EMPTY-BUF}FERS (Starting FORTH pg 283) 200Marks all block buffers as empty without necessarily affecting their actual contents. Upd}ated blocks are not written to mass storage. 150FLUSH (Starting FORTH) 200Forces any modifications that have be}en made to a block to be written to disk. 150UPDATE (Starting FORTH 200Marks the most recently referenced block }as modified. The block will later be automatically transferred to mass storage if its buffer is needed to store a different }block or FLUSH is executed. 150*/ (Starting FORTH pg 123) 200Multiplies, then divides. Uses a 32 bit interm}ediate result. 150*/MOD (Starting FORTH pg 123) 200Multiplies, then divides. Returns the remainder and the quo}tient. Uses a double-length intermediate result. 150MOD (Starting FORTH pg 53) 200Return the remainder from d}ivision. 150/ (Starting FORTH pg 53) 200Divides. 150/MOD (Starting FORTH pg 53) 200Divides. } Returns the remainder and the quotient. 150* (Starting FORTH pg 53) 200Multiplies. 150M/ (S}tarting FORTH pg 178) 200Divides a 32 bit number by a 16 bit number. Returns a 16 bit result. All values are signed. 150}M* (Starting FORTH pg 179) 200Multiplies two 16 bit numbers. Returns a 32 bit result. All values are signed}. 150MAX (Starting FORTH pg 123) 200Returns maximum. 150MIN (Starting FORTH pg 123) 200Returns} minimum. 150DABS (Starting FORTH pg 178) 200Returns the absolute value of a 32 bit number. 150ABS } (Starting FORTH) 200Returns the absolute value. 150D+ (Starting FORTH) 200Adds two 32 bit numbers. 150}COLD (info sheet) 200Erases all new words in RAM. (System Reset.) 150ABORT (Starting FORTH pg 103)} 200If the flag is true, types out the last word interpreted, followed by the text. Also clears the user's stacks and return}s control to the terminal. If false, takes no action. (e.g. ABORT" xxx ") 150( (Starting FORTH pg 84) 200}Causes the string xxx to be ignored by the text interpreter. The character ")" is the delimiter. (e.g. ( xxx )) 150PROMP}T (info sheet) 200This word was added to handle the extended complexities of excluding the prompt. 150FORTH } (Starting FORTH pg 246) 200Makes FORTH the CONTEXT vocabulary. 150IMMEDIATE (Starting FORTH pg 313) 200Marks} the most recently defined word as one which, when encountered during compilation, will be executed rather than compiled. 15}0INTERPRET (Starting FORTH pg 246) 200Interprets the input stream, indexed by >IN, until exhausted. 150?STACK } (Starting FORTH pg 103) 200Returns true if a stack underflow condition has occurred. 150LITERAL (Starting FO}RTH pg 313) 200Used only inside colon definitions. At compile time, compiles a value from the stack into the definition as} a literal. At run time, the value will be pushed onto the stack. 150[COMPILE] (Starting FORTH pg 313) 200Used in }a colon definition, causes the immediate word, xxx, to be compiled as though it were not immediate. xxx will be executed wh}en the definition is executed. (e.g. [COMPILE] xxx) 150CREATE (Starting FORTH pg 209) 200Creates a dictionary e}ntry (head and code pointer only) named xxx. The word, xxx, returns its address when executed. (e.g. CREATE xxx) 150NUMB}ER (Starting FORTH pg 285) 200Converts the text beginning at addr 1, with regard to base, to a binary value that is} single length if no valid punctuation occurs, and double length if valid punctuation does occur. The string may contain a p}receding negative sign. Addr may contain a count which will be ignored. 150GFLAG (info sheet) 200The graphics }mode cursor control flag. When GFLAG is set to nonzero, FORTH will use the alternate cursor address variables required by th}e operating system to handle the text window at the bottom of the screen. This variable is handled automatically by the vari}ous graphics commands in the color graphics package. 150PFLAG (info sheet) 200The printer flag. See PON. 150}VARIABLE (Starting FORTH pg 209) 200Creates a variable named xxx. The word, xxx, returns the address of the variabl}e when executed. (e.g. VARIABLE xxx) 150CONSTANT (Starting FORTH pg 209) 200Creates a constant named xxx with the} value n. The word, xxx, returns the value n when executed. 150: (Starting FORTH pg 27) 200Creates a new d}efinition with the name, xxx, consisting of the word, yyy. (e.g. : xxx yyy ;) 150; (Starting FORTH pg 27) }200Delimiter for colon definitions. 150C! (Starting FORTH pg 209) 200Stores an 8 bit value into the address}. 150! (Starting FORTH pg 209) 200Stores a 16 bit value into the address. 150dictionary before the ColorbC@ (Starting FORTH pg 209) 200Fetches an 8 bit value from the address. 150@ (Starting FORTH pg }209) 200Replaces the address with its contents on the stack. 150DUP (Starting FORTH pg 53) 200Duplicates th}e top stack item. 150SWAP (Starting FORTH pg 53) 200Reverses the top two stack items. 150DROP (St}arting FORTH pg 53) 200Discards the top stack item. 150OVER (Starting FORTH pg 53) 200Makes a copy of the se}cond item and pushes it on top of the stack. 150+ (Starting FORTH pg 53) 200Adds. 1500< (Sta}rting FORTH pg 103) 200Returns true if n is negative. 1500= (Starting FORTH pg 103) 200Returns true if n i}s zero (i.e. reverses the truth value.) 150>R (Starting FORTH pg 123) 200Takes a value off the parameter sta}ck and pushes it onto the return stack. 150R> (Starting FORTH pg 123) 200Takes a value off of the return sta}ck and pushes it onto the parameter stack. 150LEAVE (Starting FORTH pg 143) 200Terminates the loop at the next }LOOP or +LOOP. 150OR (Starting FORTH pg 103) 200Returns the logical OR. 150AND (Starting FORTH }pg 103) 200Returns the logical AND. 150CMOVE (Starting FORTH pg 284) 200Copies a region of memory u bytes lon}g, byte-by-byte beginning as addr 1, to memory beginning at addr 2. The move begins with the contents of addr 1 and proceeds} toward high memory. 150CR (Starting FORTH pg 27) 200Performs a carriage return and line feed at your termin}al. 150EMIT (Starting FORTH pg 27) 200Transmits a character to the output device. 150KEY (Starti}ng FORTH pg 284) 200Returns the ASCII value of the next available character from the current input device. 150EXECUTE } (Starting FORTH pg 246) 200Executes the dictionary entry whose parameter field address is on the stack. 150BINARY } (Starting FORTH pg 284) 200Converts the text beginning at addr 1 to a binary value with regard to base. The new val}ue is accumulated into d1, being left as d2. Addr 2 is the address of the first non-convertible character. 150PAD } (Starting FORTH pg 246) 200Returns the beginning address of a scratch area used to hold character strings for intermedi}ate processing. 150ERASE (Starting FORTH pg 210) 200Stores zeros into n bytes of memory beginning at the addres}s, n.150FILL (Starting FORTH pg 209) 200Fills n bytes of memory, beginning at the address, with the value b. }150." (Starting FORTH pg 27) 200Prints the character string xxx at your terminal. The " character terminates} the string. (e.g. ."xxx") 150-TRAILING (Starting FORTH pg 283) 200Eliminates trailing blanks from the string that} starts at the address by reducing the count from u1 (original byte count) to u2 (shortened byte count.) 150TYPE } (Starting FORTH pg 283) 200Transmits u characters, beginning at address, to the current output device. 150COUNT } (Starting FORTH pg 285) 200Converts a character string, whose length is contained in its first byte, into the form approp}riate for TYPE, by leaving the address of the first character and the length on the stack. 150DOES> (Starting FOR}TH pg 313) 200Used in creating a defining word. Marks the end of its compile time portion and the beginning of its run tim}e portion. The runtime operations are stated in higher level FORTH. At run time, the pfa of the defined word will be on the} stack. 150DECIMAL (Starting FORTH pg 177) 200Returns the base to ten. 150HEX (Starting FORTH pg 17}7) 200Sets the base to sixteen. 150[ (Starting FORTH pg 313) 200Leaves compile mode. 150]  } (Starting FORTH pg 313) 200Enters compile mode. 150COMPILE (Starting FORTH pg 313) 200Used in the definition o }f a compiling word. When the compiling word, in turn, is used in a source definition, the code field address of xxx will be  }compiled into the dictionary entry so that when the new definition is executed, xxx will be executed. 150SPACE (S }tarting FORTH pg 27) 200Prints one blank space at your terminal. 150ROT (Starting FORTH pg 53) 200Rotates t }he third item to the top of the stack. 150< (Starting FORTH pg 103) 200Returns true if n1 is less than n2.} 150< (Starting FORTH pg 103) 200Returns true if n1 is greater that n2. 150= (Starting FORTH} pg 103) 200Returns true if n1 and n2 are equal. 150- (Starting FORTH pg 103) 200Returns true if n1 and n}2 are not equal. 150U< (Starting FORTH pg 177) 200Returns true if u1