ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º Common Forth Experiment Version 1.668 Release Notes : º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÄÄÄÄÄÄÄÄÄÄ Warranty ÍÍÍÍÍÍÍÍÍÍ This software is distributed WITHOUT ANY WARRANTY. I prevented using any low-level operations like BIOS disk I/O, since my major goal is to build a common environment which can use other sources outside FORTH world and treat them like FORTH ( Abstract Common Forth ), so I/O performance is not my first consideration. Common Forth is implemented as macro-expansion subroutine threaded which means the compiled code is fast enough. Besides, many optimizations will be done in the future. Therefore, whenever you can prevent CODE words, don't use them, for portabiliby's sake. And I haven't met any serious problem yet. Several successful projects have been implemented with this system, with the supporting of C(++) libraries ( such as database library : CodeBase ). The whole system goes in protected mode, many illegal operations should abort the whole system. However that's depended on the underlying DOS-extender. So I believe your normal programming and operation won't cause any problem. But be careful not to enter any infinite loop in your program, it is not always possible to CTRL-BREAK those operations. For all those low-level I/O operations, that's depended on the underlying DOS extender, which might again based on VCPI or DPMI. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ You must realize that this is an experiment system and contains many prototypes . So far, they works fine. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄ Copyright ÍÍÍÍÍÍÍÍÍÍÍ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Note that a PART of this software is protected by GNU's General ³ ³ Public License ( the loader itself . ) See the detail file ³ ³ descriptions below. For those not protected programs, all rights ³ ³ are reserved by Luke Lee. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The whole system is written by Luke Lee since 1991, currently public domain but not for commercial use. The system kernel CF0.4TH itself is derived from 16bit subroutine threaded eForth . You are welcome to distribute them but not for profit . Of course any target codes you wrote belongs to yourself, you can release a turnkey system or just include your source with the WHOLE SYSTEM WITH ALL DOCUMENTS, or just release your source code. You can charge fee for your codes but not for any other part of this system, even you made some modifications, ( except ONLY for your ALMOST COMPLETE REWRITTEN ) . Besides, any turnkey system that provide the functions which implemented in this system cannot be charged. For example, if you include the assembler/disassembler code in your turnkey system, and 'run through' the assembler/disassembler for assembling/ disassembling, the outputs itself is not chargable. If your turnkey system provides only user-interface for DIRECT MANIPULATION of those tools, it cannot be charged. The term 'run through' applies to all tools except for the kernel codes in CF0.4TH . However the term 'run through' itself is quite ambiguous, don't worry, just USE YOUR CONSCIENCE and you will know what to do. Just don't charge fee for codes not belongs to yourself. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º þ ABSOLUTELY FORBID to use in ANY military purpose except for Taiwan's º º self-defence; even for testing things irrelevant to any weapon. º º þ NEVER use it for ANYTHING relevant to ANY military purpose. º º þ ANY violation to this rule will be treated as much serious problem º º than encroach on my copyright, though I might not have legal ways to º º stop this but this is never to forgive. º º þ Use other's FORTH system for your military purpose but NOT MINE . º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Sell Your Product ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ The best way is that you can sell your product ( not include any portion of this system ) and declare that they need this system for execution environment ( tell them the version too. ). And tell them how to obtain this system. Just like you release MS-DOS executable applications without releasing the copyrighted MS-DOS itself. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Compatibility ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ There is no guarantee that your application written in this system would be compatible with next released Common Forth. This system changes RAPIDLY ! Of course you might think this system useless since it change so fast. However, you should remember that this is an experiment version. This system will be settled down and be compatible with ANSI standard after version 2.0 . Before v2.0, I won't follow any standard except mine. o eForth version : This system is derived originally from the following eForth : Subroutine threaded eForth; Version. 1.0, 1991 by Richard E. Haskell Dept. of Computer Science and Engineering Oakland University Rochester, Michigan 48309 which based on eForth 1.0 by Bill Muench and C. H. Ting, 1990 Much of the code is derived from the following sources: 8086 figForth by Thomas Newman, 1981 and Joe smith, 1983 aFORTH by John Rible bFORTH by Bill Muench o GNU is the trademark of Free Software Foundation. o MS-DOS is the product of Microsoft Cooperations . !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Note that this system is CASE-SENSITIVE ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ What's Different ? ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ What are the differences between CF and other Forth systems ? 1. High performance Stack Expression : ( Common Forth Unique ) Input/output parameter and local variables without headache for DUP, SWAP, OVER, TUCK, NIP, ROT ... and still keeps the performance since it does not use extra codes to access local variables and input/output parameters, and it never move these data into return stack, they are just move to top of data stack (TOS) when they are needed ( just like PICK ) and move TOS into the cell where they are assigned. It is a prototype version. New algorithm will be applied in new version which will compile SWAP, DUP ... directly. See HI.4TH, STKEXPR.4TH for stack parameter and local variable examples . 2. Subroutine threaded with macro expansion : Fastest Forth system implementation method. In the future, many other optimizations will be implemented. Use SEE.4TH or DISASM.4TH to see the compiled code. 3. Short-cut Boolean evaluation available : ( Common Forth Unique ) T/F ANDTHEN T/F ANDTHEN .... THEN-AND T/F ORELSE T/F ORELSE .... ELSE-OR See SHORTCUT.4TH for usage and examples. 4. FORTH call C(++) and C(++) call FORTH : Since the loader is written by DJGPP ( GNU C++ for PC ), all the C(++) functions it used could be called by FORTH with INFIX syntax ! See INVOKEC.4TH. ( OO features are not implemented yet. ) And another feature is that after your FORTH program starts, you can interpret FORTH words within your C(++) function ! See INVOKEC.H for 'forth_interpret(...)' function. About C(++) actually 'CALL' FORTH words, not just interpreting every time, this facility will be implemented later. See DEMO_C.4TH for examples of FORTH calls C . 5. Data structure oriented implementation : Most of the data structures are defined by STRUCT: ... ;STRUCT , UNION: ... ;UNION , including the memory map and head structure which makes it easier to understand this system. See STRUCT.4TH and MEMMAP.4TH and CPU80486.4TH for examples. For unions, see GRX.4TH for examples. 6. A very syntax-clear 80486 assembler and disassembler (CPU80486.4TH), both PREFIX and POSTFIX syntax are provided and has exactly the same syntax except for that the memonic can be put before operands or after them. SEE VERIFY.4TH and VERIFYPO.4TH for prefix / postfix examples . 7. A very fast multitasking system with different mechanism and minimum overhead ( much much faster than a single INT instruction in protected mode ! ). ( MULTASK.4TH ) 8. A very simple meta-compilation mechanism without H: T: ... In fact, except for user variables, the meta-compiler implements almost no-thing for supporting meta-compilation. ( CFMETA.4TH ) 9. Support one CREATE with multiple DOES> . See the definition of FIELD: in STRUCT.4TH, and ARRAY: in HI.4TH. 10. A powerful discompiler ( SEE.4TH ), multiple exit loops like : BEGIN ... WHILE ... WHILE ... UNTIL ... ELSE ... THEN ... ELSE ... THEN ... could always be discompiled successfully. 11. Compatible with Chinese system ( such as ETen, 01 ... ). That's why it is case-sensitive. 12. Assertion tools for your debugging version program. See #IF.4TH and ASSERT.4TH . 13. No floating point stack, all floating goes to data stack. I believe 2 stack is enough for one FORTH task. Besides, multitasking won't cause any problem in this way since there could be many tasks computing floating on stack at the same time. There is only one format : 64-bit IEEE floating point. Each floating number occupies 2 cells, just like double precision integer. Many floating operations goes through INVOKEC.4TH with C(++) function calls, but 387FLOAT.4TH use 387 instructions. See FLOAT.4TH and 387FLOAT.4TH . And the demo program 3DR.4TH. 14. Pure graphics mode operation. Cursor is emulated by multitasking with a CursorTask. A standard graphics interface have been defined which means that you can write portable programs which could be executed under other Common Forth environments ( like Watcom's loader . ) For example, a demonstration program 3DRp.4TH by Sam Chen is now running under GO32+DJGPP(V1), RUN386+WATCOM and PMODE/W+WATCOM. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Running this System ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ If your system support VESA BIOS calls, set the following environment for GO32 : Example: SET GO32=driver F:/cf/vesadrv.vdr gw 640 gh 480 nc 256 ÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÂÄÄ- ÄÄÂÄÄ- ÄÄÂÄÄÄ- ³ ³ ³ ³ ³ ³ ³ ÀÄ- default number of ³ ³ ³ colors in graphics mode ³ ³ ³ ³ ³ ÀÄ- default number of pixels of ³ ³ screen height in graphics mode ³ ³ ³ ÀÄ- default number of pixels of screen ³ width in graphics mode. ³ ÀÄÄ Any driver in the .\DRIVERS subdirectory, choose your suitable driver . Try VIDEOID.EXE written by Bob Berry and find out what kind of driver you need. ( The maximum number of colors is 32768. ) SET GRXFONT=G:\gcc\contrib\libgrx\allfonts or GRX.4TH will search for .\FONTS for appropriate fonts. Without fonts, you cannot see text under GRX's graphics mode. You should have at least 3 files to run this system : CF.EXE + CF.IMG + CF.HED . ( or GO32.EXE + CF. + CF.IMG + CF.HED . ) Execute CF.EXE to run this system ( or "GO32 CF" ) . There are several other drivers now included in the DRIVERS subdirectory, which belongs to GNU. You can use them instead of using 'vesadrv.vdr'. ! NOTE ! Each time you FSAVE, the original CF.IMG ! ! and CF.HED will be overwritten without ! ! any backup. So backup them first in case ! ! your FSAVEed system won't work. ! ! Two files for solving this problem : ! ! CF_IMG.BAK and CF_HED.BAK ! ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ User Manual MANUAL.DOC ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ An user manual is now included in this version named MANUAL.DOC, and I must appologize that my English might not be good enough. However it should be of some use. This file is still under construction. There are a few parts of that manual, including basic operations, word summary, turnkey systems, meta-compilation, assembly programming and how to include your C programs . ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º Detail Descriptions for this system : º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ About DOS Extenders ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ This release version use GO32 for DOS Extender. See README.G32 and README.DJ for extra details, for its full source, download DJGPP V1 . Before version 1.60, the Common Forth system image is executed under Phar Lap's DOS Extender : RUN386.EXE . Version 1.60 is meta-compiled from version 1.59 under Phar Lap's RUN386.EXE . Now there are another version for Watcom C/C++ which can use PMODE/W , RUN386 ... for its DOS Extender. From version 1.60, the whole system is executed under DJGPP's public domain DOS Extender GO32.EXE, with an 80387 emulator. Virtual memory is supported by GO32, so you can run it under DOS with only 512k RAM but with very very terrible performance . But for 4M memory, its performance is quite good. See README.DJ for DJGPP's info. GO32.EXE + EMU387 : DJGPP's public domain DOS Extender with 80387 emulator. ( + VESADRV.VDR : if you have VESA BIOS, graphics modes defined by vesa will be available. For other video cards, use the appropriate driver in the .\DRIVERS ) * There is a bug in GO32 while opening file with read/write mode or write only mode, I have already fixed it and rebuild GO32.EXE by Borland C++ 3.1. INVOKEC.H + BIND.H + EXTENDED.CC .. : Vendor dependent C library. Include your C functions only here ! + INVOKEC.CC ... : ANSI C standard library. (System independent) + CF.CC : Loader's source code. SECTIONS.LD : Command file for GCC's linker : "ld.exe" . It defines the memory layout of CF. CF : Use GCC to compile CF.CC ( use CYCLE.BAT or MAKEFILE ) CF.EXE : GO32.EXE + CF = CF.EXE ( use BIND.BAT ) .\DRIVERS\*.* : Video drivers for GO32. .\FONTS\*.* : Several fonts for GRX. Note : VIDEOID.EXE in .\DRIVERS is a public domain program written by Bob Berry . See VIDEOID.DOC for detail. ! Notice ! The programs listed above ( CF.CC + SECTIONS.LD + CF + CF.EXE ) ! ! ÍÍÍÍÍÍÍÍ and any other program released by GNU ( GO32 + EMU387 ... ) ! ! are protected under GNU's copyleft license. ! ! ! ! But all Forth programs listed below contains not a single byte ! ! from GNU's code, they are originally derived from 16bit ! ! eForth . The image itself is originally executed under PHAR ! ! LAP's RUN386 DOS Extender, and for any source codes listed ! ! below contains NOT A LITTLE CODE FROM GNU's RELEASED programs. ! ! Except for the interface program definitions which is complete ! ! compatible with DJGPP's library ( might also be compatible ! ! with other C(++) compilers ). For all other programs, they are ! ! all derived ( meta-compiled ) by previous Common Forth from ! ! version to version. And the Common Forth itself is derived ! ! from the subroutine threaded 16bit eForth by Richard E. Haskell. ! ! ! ! Thus for these programs not protected by GNU's General Public ! ! License, copyrights are reserved by Luke Lee. See the first ! ! paragraph of this README.TXT file. Maybe someday I will release ! ! them according to GNU's General Public License . ! ! ! ! These programs which are not copylefted by GNU can be executed ! ! under any other DOS Extender ( Portability ) with proper ! ! environment setting or with some other kind of meta compilation. ! ! They are all in source level or in machine code level with no ! ! invocation to GNU's code. You can execute them without DJGPP. ! ! But for DJGPP interface programs such as GRX.4TH , they ! ! won't be able to be executed without LIBGRX's code . Of course, ! ! you can write your own C(++) graphics library which is source ! ! level compatiable with LIBGRX. ! ! ! ! ! Notice ! Please refer to GNU's General Public License for using GNU's ! ! library. ! You can use any other C(++) compiler to write a loader in order to load the following codes into your operating system. CF.INI : Initialization program, just like AUTOEXEC.BAT . CF.IMG : Common Forth Code/Data image file. CF.HED : Common Forth Head image file. CF_IMG.BAK CF_HED.BAK : Backup file for current image, incase you accentially deletes them or FSAVE a system which cannot executes normally. Just do : COPY CF_IMG.BAK CF.IMG COPY CF_HED.BAK CF.HED to restore original system. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ High Level Forth Modules ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ You don't have to FLOAD or NEEDS these modules yourself, they have already been FLOADed previously. HI.4TH : Miscellaneous words and other high level definition module loading program. It is used only when the target system has just been Meta-compiled, not until you FLOAD HI.4TH you can't do SAVE-SYSTEM ( FSAVE ) or WORDS or FORGET .... STRUCT.4TH : Simple data structure defining words, nesting data structures and unions are also supported, the Forth head structure is now defined this way to reduce the requirement for accessing fields by specifying the offset value directly. For example, you might have to use "10 +" to access the field with offset 10 in a data structure, this is not a good programming habit and may result in unpredictable bugs, now use STRUCT: and ;STRUCT to define structures will help you preventing such kind of problems. MEMMAP.4TH : System memory description, use STRUCT: and ;STRUCT to describe memory map. CASE.4TH : CASE ... OF ... ENDOF ... ENDCASE structure. DOLOOP.4TH : DO ... LOOP and ?DO ... LOOP. ( +LOOP, LEAVE and ?LEAVE are also included ). VOCAB.4TH : Vocabulary words. Note: The word ".VOCS" replace the name in F-PC : "VOCS" . MULTASK.4TH : A very fast multitasking system for Common Forth; unlike any other FORTH systems, its execution mechanism is not a jump; and sleep tasks will cause no delay since there is no jump instructions to jump through them. (prototype) I use circular double linked-list to implement this. It's usage is still the same as other Forth systems but the internal mechanism is different. STKEXPR.4TH : Introduced in Common Forth 1.2, the stack expression for data stack. There is no need to put local variables in return stack. Read the file for more examples. (prototype) From CF 1.48, it supported one CREATE and multiple DOES> . In fact, in previous versions, you could use single CREATE and multiple DOES> before you FLOAD STKEXPR.4TH; now it is available even if STKEXPR.4TH is FLOADed . ( Example : FIELD: in STRUCT.4TH ) Some stack balance checking has already been implemented. Now compiling words doesn't have to care about how to maintain a correct value of the local stack pointer . You don't even have to know what the 'compiling time local stack pointer' is. FSAVE.4TH : Save system, FSAVE is the alias for SAVE-SYSTEM, it will create 2 image files, one named CF.IMG which stores the code space of your system; another named CF.HED which stores the head space of your system. If you are building a turnkey system, just drop the CF.HED . (prototype) SHORTCUT.4TH : My creation. In fact, this idea came from ADA language; in ADA, if you don't specifically use 'ANDTHEN' and 'ORELSE' , all Boolean evaluation will be treated as full evaluation. Now I introduce ANDTHEN ... THEN-AND and ORELSE ... ELSE-OR control structure for FORTH . KEYBUF.4TH : Command history recording tools, with a simple line editor. Its function is very similar to DOSKEY.COM in MSDOS 5.0. (prototype) TRACER.4TH : A simple debugging tool. Stack depth checking before enter/ leave some Forth word, execution sequence displaying and data stack frame displaying. (prototype) Reference to TRACER.4TH for detail help. Ex. TRACER ON FLOAD HANOI.4TH TRACING ON 4 TOWER-OF-HANOI // See the result ! TRACER/RESET #IF.4TH : Conditional compilation . Syntax : ... #IF ... #ELSE ... #ENDIF ASSERT.4TH : Assertion making tool. For testing program's assertion. (prototype) Like : ASSERT{ ArrayIndex LowerBound UpperBound BETWEEN }?ASSERT" Array index exceed boundary." A variable named NODEBUG is used to control the compiling process, if you use 'NODEBUG ON' , ASSERT{ won't lay down any code. In short, it's function is just like <assert.h> in C(++) language. --------------------------------------------------------------------- * Not like those modules listed above which are loaded by HI.4TH, the following files should be FLOADed explicitly . --------------------------------------------------------------------- ALLTOOLS.4TH : FLOAD this file will eventually FLOAD some of the following tools below, just for your convenience . Note that it takes a lot of memory since SEE will grow VERY fast for building the 'macro recoginaztion tree', the algorithm and data structure will be modified later and it will save at least 80% memory wasted in one-way branching tree nodes. CPU80486.4TH : A complete 80486 assembler, including both 16-bit mode and 32-bit mode, use USE16 and USE32 to switch between them. Both PREFIX and POSTFIX syntax are implemented. The default setting is prefix syntax . If you wants to use postfix syntax, just type in " POSTFIX SYNTAX " . In the PREFIX SYNTAX setting, postfix syntax could be used either ! But for macro definition and inline definitions, you have to use postfix syntax. All instructions and addressing modes are supported ( except for ESC ), only valid instructions with appropriate addressing modes are accepted by this assembler, all other combinations will be treated as error. So you don't have to worry about that it might generate some illegal instructions. All legal instructions and addressing modes have already been checked by PHAR-LAP debugger ( I also found some bugs in 386DEBUG while disassembling ) and Turbo assembler/debugger. However, I strongly suggest you use DISASM.4TH to examine the assembled codes since I don't guarantee that all possible errors in your code word would be detected by this assembler. So it is possible that some of your errors will not be reported on screen. The syntax is very clear and uniform, for example : PREFIX SYNTAX // default setting, allow both PREFIX and POSTFIX syntax // INSTRUCTION DESTINATION SOURCE MOV { VARIABLE-NAME } EAX MOV { EAX ESI + } 234 # JMP ' FORTH-NAME # JMPF 1234 # ABCDDCBA # CALLF { ADDRESS } POSTFIX SYNTAX // DESTINATION SOURCE INSTRUCTION { VARIABLE-NAME } EAX MOV { EAX ESI + } 234 # MOV ' FORTH-NAME # JMP 1234 # ABCDDCBA # JMPF { ADDRESS } CALLF For each instruction, refer to VERIFY.4TH for a correct syntax. Now global labels are also implemented now, forward references are also allowed. See VERIFY.4TH for usage. From version 1.55, CPU80486.4TH also includes a complete 80486 disassembler. Advantage of postfix notation : 1. Meet the concept of data-flow. 2. Easy to used in colon definitions in order to compile some codes, for example, a macro ( for postfix syntax only ) : ALSO ASSEMBLER ALSO FORTH DEFINITIONS : T EAX ; : SP EBP ; : $PUSHT SP { SP 4 - } LEA { SP } T MOV ; PREVIOUS PREVIOUS CODE: TEST ( -- 5 ) $PUSHT T 5 # MOV RET ;CODE 3. Since this system is a macro expansion subroutine threaded Forth system, the execution speed is much faster than direct threaded codes ( except for screen I/O , disk I/O ), so you should implement your Forth program with high level words whenever possible. ( Try : DECIMAL : TEST 1000000 FOR 4311 431 + DROP NEXT ; TEST in 80486-50 CPU, this takes about 1/2 second ) þ NOTE: It is NOT public domain, you could use it to write assembly for your own application, the target code is of course yours but the assembler/disassembler itself is copyrighted and cannot be used for commercial use. You are agree to distribute it but not for profit. DISASM.4TH : An output program using CPU80486.4TH's disassembler . There are two kinds of output format, one is "CFASM-LOOK", which is the default setting; the other is "MASM-LOOK". Using CFASM-LOOK will make the outputs looks exactly the same as CPU80486.4TH syntax ; yet using MASM-LOOK will makes it looks like MASM syntax . VERIFY.4TH : This file is written originally for debugging the assembler, since all the instructions have already been verified, it now become a valuable reference for a correct syntax for each instruction . There is another version named VERIFYPO.4TH for POSTFIX SYNTAX. INVOKEC.4TH : C++ function invoking tool. This is THE ONLY feature in this system. You could even use infix C syntax to invoke C functions, like : cprintf( Z$" %d %d" , a , b ); Refer to DEMO_C.4TH for detail. (prototype) SEE.4TH : A powerful discompiler. The discompiling process never need the disassembler ( DISASM.4TH + CPU80486.4TH ), but if it fail to discompile any word it will invoke the disassembler to display it. That's why it needs DISASM.4TH. The discompiling process never invoke assembler/disassembler. Many complex control structure have already been implemented. Currently the following control structure cannot be seen yet, it will soon be modified. DO ... WHILE ... LOOP ... ELSE 3RDROP ... THEN FLOAT.4TH : Floating point operations. It will load INVOKEC.4TH first. Before you FLOADing this package, numbers like "1.234" are illegal. Now "1.234" will be converted into 64bit floating on data stack. You can use 'F.' or 'E.' ... to display it. 387FLOAT.4TH : Like FLOAT.4TH but faster since it use 80387 instructions directly. However, I cannot guarntee that all floating point exceptions will be handled. If you are seeking for safer floating point package, use FLOAT.4TH instead. GRX.4TH : Graphics mode interface implemented according to DJGPP's GRX library. Please reference to LIBGRX.DOC for a manual for GRX library functions . GRAPHICS.4TH : A prelimiliary release of Common Forth Standard Graphics Interface. Follow this standard interface and your graphics program will works under other environments like Watcom's graphics library ( of course, runs under watcom's execution environment ). Use 'GRAPHICS-MODE' to enter graphics mode, Use 'TEXT-MODE' to return text mode. Please reference to MANUAL.DOC . DOSCMD.4TH : Commonly used DOS words like DIR , COPY , CD ... CHINESE.4TH : A Chinese System for Common Forth, support Eten System, and Chinese input facility have not been implemented yet . For its usage please refers to MANUAL.DOC. KEYTABLE.4TH : A keyboard mapping tools, remap your keyborard or perform some special action on special key-stroke. SPOOLER.4TH : A background spooler for printing, it's a good sample program for multitasking. A new version is implemented, now the printer output is thru BIOS calls, and it will check for printer busy to achieve minimum delay for faster printers. LOG.4TH : A very useful tool for logging terminal texts, written by Sam Chen and modified by Luke Lee for graphics mode. It's especially useful while debugging. For example : FLOAD LOG.4TH LOGTO HANOI.LOG TRACER ON FLOAD HANOI.4TH TRACER OFF TRACING ON 4 TOWER-OF-HANOI LOGEND DOS EDIT HANOI.LOG DBG1652.4TH : An assembly level debugger for Common Forth v1.652 written by Sam Chen, not fully implemented yet. If you see wired characters in source code, it is Chinese Big-5 code. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Meta Compilation Modules ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ Please reference to MANUAL.DOC or CFMETA.4TH for details. CFMETA.4TH : Meta compiler. CF0.4TH : Common Forth 1.6X source code. CFMETA : Automatical meta-compilation META2 : For automatical meta pass 2. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Demonstration Programs ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ * Many other demonstration programs are included in .\SAMPLES subdirectory. DEMO_C.4TH : Demonstration program for writing C function calls. Also demonstrates floating point numbers. DEMO_SEE.4TH : Demonstration program to use SEE . DEMO_GRX.4TH : Only partially implemented, demonstrates the minimal power of GRX library and GRX text-emulation . ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 3DROTATE.4TH : A program written by George Mai, and I just port it to this system. It's a good example for demonstrating multitasking, graphics facility and the performance of floating operations. 3DR.4TH : A facinating rewritten version by Sam Chen, try it and you will be surprised. Total eight background tasks ( including the cusor-task ) and one forground task. This program is written specifically for DJGPP+GRX. 3DRP.4TH : A portable version for 3DR by Sam Chen, I just modify it for standard graphics library GRAPHICS.4TH, this program can be executed under different environments : DJGPP+GO32, WATCOM+PHARLAP and WATCOM+PMODE/W . ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ HANOI.4TH : A demonstration for recursive programs and Stack Expression, you will see the much more readable FORTH word TOWER-OF-HANOI, compare it with the old-styled FORTH TOWER-OF-HANOI0 and you will realize how elegant and how clear you can express your FORTH program with the unique Stack Expression for Common Forth. FIB.4TH : Another demonstration program for stack expression, it is recommended that you should not use integer greater than 30 ( type in "30 FIB" ), or you might have to wait for a VERY LONG time. KEYBUF.4TH : You could treat this tool as another demonstration program, It use a lot of Stack Expression, including using them in CASE ... ENDCASE structure. ROMAN.4TH : An example from Thinking Forth, I implement it with different way, but I believe the implementation in Thinking Forth is much better since I use CASE structure to prevent calculation. * For other sample programs, refers to .\SAMPLES subdirectory. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Turnkey System Building ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ In this version, you can build your turnkey application now, there are several files supporting this : RKSEARCH.4TH : Robin-Karp string searching algorithm, in this algorithm, a good prime number is very important, I use 8388593 for CONSTANT RKMagic , if you can find a better prime number, please tell me, it will speed up this algorithm. TURNKEY.4TH : There are three versions for this, for DJGPP+GO32, for WATCOM+PHARLAP and for WATCOM+PMODE/W, the only difference is this word : : TurnkeySystemFiles (( -- $name1 $name2 )) $" GO32.EXE" $" TURNKEY." // GO32 version. // $" STUB386.EXE" $" TURNKEY." // Phar Lap RUN386 // $" NUL" $" CF.EXE" // PMode/W version ; 0 2 #PARMS comment out the other versions and leave the one you need, and you can build your turnkey application according to the C/C++ compiler you are using. T3DRP.4TH : A sample turnkey program for 3DRP.4TH, which can be executed under different platforms : DJGPP+GO32 , WATCOM+PHARLAP and WATCOM+PMODE/W . Try this : F:\CF>CF FLOAD T3DRP.4TH BYE and it will build 3DRP.EXE, 3DRP.IMG and 3DRP.HED. You can release the 3DRP.EXE as your application. T3DR.4TH : A sample turnkey building program for 3DR.4TH, try this : F:\CF>CF FLOAD T3DR.4TH BYE and it will build 3DR.EXE, 3DR.IMG and 3DR.HED. You can release the 3DR.EXE as your application. THANOI.4TH : A sample program for HANOI.4TH . CF FLOAD THANOI.4TH BYE will build HANOI.EXE, HANOI.IMG and HANOI.HED. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ About MetaForth v1.0 ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ In the sub-directory MF, it contains a tiny 32-bit Forth system named 'MetaForth'. The purpose for this system is for 'teaching' meta-compilation. This system might not have pratical use but should serve good for teaching's purpose. No documentation for this system yet, sorry. The complete meta-compiling procedure is : A) Executable needed : CF v1.654 or above, GO32.EXE+MF. Source needed : MFMETA.4TH and MF.MF B) Steps : Copy the MetaForth source to your working directory, for example, F:\CF : B.1) Meta compilation from Common Forth to Meta Forth. 1. F:\CF>CF.EXE 2. FLOAD MFMETA.4TH 3. FSAVE MF.BIN BYE - - - - - - - - - - - - - - - B.2) Meta compiling MetaForth itself. 4. F:\CF>GO32 MF 5. HERE META 6. $180000 META 7. FSAVE MF.BIN BYE goto step 4. to meta again. (just like RIFORTH) Demonstration programs for MetaForth : HI.MF : Miscellaneous hi-level definitions for MetaForth. HANOI.MF : Tower-of-Hanoi . FIB.MF : Fibonacci number . TEST.MF : Several testing . How to run : 1. GO32 MF 2. FLOAD HI.MF 3. FLOAD TEST.MF 4. FLOAD HANOI.MF 5. 4 TOWER-OF-HANOI 6. FLOAD FIB.MF 7. .FIBSEQ Note : 1. MF. is build from MAKEFILE with DJGPP. 2. MF.EXE is a turnkey system build from MF.4TH . Just like the above turnkey applications you have seen. eMail address : comforth@ms2.hinet.net þ P.S. Mail me only bugs since I might not have time to reply your letter, please. And Thanks. 10/09/'97 Luke Lee . ú ú ù ù ùùùÄ ÄÄ ÄÄÄ ÄÄÄÄ ÄÄÄÄÄÄ ÄÄÄÄÄÄÄ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ