Change History for kForth 2017-05-31 -- fixed a problem with use of macro in intrinsic words [DEFINED] and [UNDEFINED] (CPP_defined() and CPP_undefined() in ForthVM.cpp). These words were causing misalignment of the data and type stacks in the regular version of kForth (no effect on kforth-fast). -- freshened following files in examples/ : parallel-mm.4th fsl/extras/mmul.4th -- added following files in examples/ : parallel-mm2.4th fsl/extras/mmul_x86.4th 2017-05-19 -- freshened the following files in examples/ : parallel-mm.4th fsl/fsl-util.4th -- added the following file in examples/ : fsl/extras/mmul.4th 2017-05-09 -- fixed bug in S" (CPP_squote() in ForthVM.cpp) which led to strings having length > 127 to have a wrapped length. C" does not have this problem. Since S" is based on C" , it is limited to entering string constants which are no longer than 255 characters in length. Consider whether or not we need to remove this restriction for string literal entry. S" strings can be concatenated to have length greater >= 256 chars. -- implemented a preliminary xchars wordset in xchars.4th. added this file to examples/ 2017-05-06 -- added examples/libs/x11/demo-xft-telugu.4th 2017-05-05 -- updated examples/fsl/fsl-util.4th 2017-04-30 -- updated version number in Makefile to 1.6.0. There are enough significant changes to move to a new minor version number. -- deprecated use of double quote character (x22) as a word for compiling a counted string. 2017-04-25 -- added FEXPM1 and FLNP1 to the Forth dictionary. 2017-04-24 -- updated examples/strings.4th -- updated examples/fsl/extras/array-utils1.4th and examples/fsl/extras/stats.4th 2017-04-22 -- updated version to 1.5.4-3 in Makefile. 2017-04-16 -- updated vm.s and vm-fast.s to recode following words to use NEXT macro when no error condition exists: ?DUP MAX MIN COUNT UM/MOD SM/REM FM/MOD UM* M* M/ -- revised FLOOR implementation in vm.s and vm-fast.s; fixed a potential bug in its implementation in which the ebx register might have gotten clobbered when calling the C math library function, floor(). -- consolidated the following words from vm.s and vm-fast.s into common implementations in vm-common.s: FATAN2 FLOOR FROUND FTRUNC DEGTORAD RADTODEG -- updated files in examples/system-test : regress.4th fpio-test.4th 2017-04-08 -- updated Makefile with CFLAGS and CPPFLAGS to include -Wall to report all compiler warnings. -- fixed warnings of some unused variables in ForthVM.cpp and kforth.cpp; fixed warnings of comparing signed with unsigned integers in ForthVM.cpp. -- fixed error handling in CPP_evaluate() (from ForthVM.cpp), so that compilation failure of string passed to EVALUATE will result in an appropriate error message. -- fixed logic in kForth.cpp so that the "Ready!" prompt will print when no command line args are given to kforth -- this has been broken since when? 2017-03-26 -- changes to vm-common.s, vm.s, and vm-fast.s: improved the efficiency of the word @ and the SWAP macro in vm.s, cleaned up unneeded instructions in the words NIP and ? , and consolidated all error jumps in vm-common.s. 2017-03-25 -- renamed US@ to US2@ to indicate return type; created macro FETCH in vm.s to avoid internal calls to L_fetch. 2017-03-17 -- revised US@ to return unsigned double length instead of single cell unsigned, to avoid wrapping. -- added UD. and D0< to the Forth wordlist. -- revised examples/system-test/dbltest.4th to uncomment tests of D0< -- version 1.5.4-2. 2017-03-13 -- added US and US@ to provide words similar to MS and MS@ but with microsecond time resolution. 2016-06-04 ** RELEASING kForth 1.5.3 *** -- Created examples/x11 and examples/qm -- Freshened the following files in examples/: client.4th server.4th bifurc-logmap.4th henon-graphics.4th poetry-reader.4th benchmarks/mmu.4th fsl/demo/gfit-curvefit.4th x11/banner-x11.4th x11/hello-world-x11.4th x11/font-properties-x11.4th x11/font-strings-x11.4th x11/simple-fonts-x11.4th x11/simple-frames-x11.4th x11/simple-graphics-x11.4th -- Added the following example files: lyx/literate-included.lyx lyx/modular-forth.lyx qm/h2XJ0.4th qm/h2XJ0-x11.4th qm/H-atom.4th qm/he-scf.4th qm/hf.4th qm/potential.4th qm/schr1d.4th x11/symfonts-test-x11.4th x11/typeset-test-x11.4th -- Moved the following example files: fsl/demo/func_Ngauss.4th --> fsl/extras/ fft-x86.4th --> fsl/extras/ qm4.4th --> qm/ qm6.4th --> qm/ qm8.4th --> qm/ -- Removed the following deprecated example files: matrix.4th matfiles.4th zmatrix.4th zeigen22h.4th 2015-12-30 -- Freshened examples/lists.4th 2015-08-01 -- Freshened examples/syscalls.4th 2015-07-31 -- Added the following files in examples/fsl/extras : find.4th jairy.4th zzeta.4th -- Moved the following files in examples to examples/qm : qm4.4th qm6.4th qm8.4th 2015-07-30 -- Freshened the following files in examples/ : naacb.4th simple-fonts-x11.4th simple-frames-x11.4th libs/gmp/libmpfr.4th libs/gmp/libmpfr-test.4th fsl/extras/numerov-test.4th fsl/extras/read_xyfile.4th -- Added the following files: bsc5-reader.4th bsc5-structs.4th bsc5-test.4th poems/ libs/x11/Xft.4th libs/gmp/mpfr_airy.4th libs/gmp/qmpfr.4th fsl/extras/numerov_x86.4th 2015-04-18 -- revised copyright notice in kforth.cpp. 2015-04-17 -- applied patch file vmc.diff to vmc.c, from the 1.5.2 updates. This patch works around a compilation problem exhibited by gcc version >= 4.8, causing the Forth word, "#", to fail. 2012-06-10 -- Freshened the following files in examples/libs/x11 : libX11.4th Xlib.4th demo01.4th demo02.4th demo03.4th demo04.4th -- Added the following files in examples/libs/x11 : Xutil.4th Xrender.4th libXft.4th demo-xft.4th -- Freshened the following files in examples: font-strings-x11.4th simple-graphics-x11.4th simple-typeset-x11.4th simple-fonts-x11.4th henon-graphics.4th bifurc-logmap.4th poetry-reader.4th -- Added the following files in examples/ : cs-strings-x11.4th hello-world-x11.4th banner-x11.4th 2012-05-02 -- Freshened the Forth source files, bifurc-logmap.4th, fsm-example.4th, and fsl/extras/eigen33.4th -- Removed obsolete versions of examples/histogram.4th (the up-to-date version is in fsl/extras/) and simple-plot.4th (up-to-date version has been renamed to simple-graphics-x11.4th). -- Added the following Forth source files: simple-graphics-x11.4th simple-frames-x11.4th font-strings-x11.4th simple-fonts-x11.4th simple-typeset-x11.4th poetry-reader.4th henon.4th henon-graphics.4th ogy.4th 2012-04-07 -- Added new OPCODE, OP_PTR, to support address constants. CONSTANT did not work correctly with address constants, even though we thought our earlier modifications (see notes from 2011-02-02) were supposed to enable such use. The new opcode is necessary for CONSTANT to work transparently with address values. -- Added fsl/extras/eigen22.4th. 2012-04-04 -- Freshened the following Forth source files: modules.fs, serial.4th, syscalls.4th, terminal.4th, hexterm.4th, gpib.4th games/ sudoku.4th fsl/ adaptint.4th, aitken.4th, backsub.4th, complex.4th, dets.4th, dfourier.4th, dynmem.4th, elip12.4th, erf.4th, fsl-util.4th, gamma.4th, gauleg.4th, gauss.4th, gaussj.4th, hermite.4th, horner.4th, invm.4th, lagroots.4th, levmarq.4th, lufact.4th, pcylfun.4th, polrat.4th, polys.4th, quadratic.4th, r250.4th, regfalsi.4th, runge4.4th, shanks.4th fsl/extras/ array-utils0.4th, array-utils1.4th, gamma-aph.4th, noise.4th, numerov.4th, paranoia.4th, stats.4th, zerf.4th, zwofz.4th -- Added the following Forth source files: dummy-comm.4th, serial-comm.4th, term.4th, literate-included.fs fsl/extras/ bes-jy.4th, histogram.4th, numerov-test.4th, quartic.fs, fsl/demo/ sigfig-example.4th -- Removed the following Forth source files: lyx-included.4th, dltest.4th 2011-11-26 -- Revised implementation of COMPILE, to permit its use in interpretation mode, e.g. in code such as, : myword ... [ ... compile, ... ] ... ; ANS Forth states that interpretation semantics for COMPILE, are undefined, but Gforth and other Forths support such use. Changes to implementation of COMPILE, were made in ForthVM.cpp and in ForthWords.h (to declare COMPILE, as a nondeferred word). 2011-11-02 -- Downgraded the version number in the Makefile to 1.5.2p1, to make patch files for the current 1.5.2 release. -- Generated patches for ForthVM.cpp and Makefile for 1.5.2. -- Committed changes to svn repository. 2011-11-01 -- Found a problem in testing new Forth modules interface code, illustrated by the following: create buf 256 allot ' buf execute should return the address of buf on the stack. However, it causes a seg. fault, because neither CREATE nor ALLOT assign a valid Cfa to the newly created word. Now, the name buf , when executed will return its address properly, and words that are created using CREATE ... DOES> have no problem also; however, a valid Cfa should exist for a word, at least once it has been ALLOTed in kForth. Revised ForthVM.cpp to fix this issue: * CPP_allot has been revised to assign a valid Cfa and execution code to the previously created word. * Code in CPP_variable and CPP_fvariable, which performed the same function of assigning executable code, was removed, since it is now handled by ALLOT. The change to ALLOT provided factoring. * The word ?ALLOT is automatically fixed up since it calls ALLOT. -- Updated the version in the Makefile to 1.5.3. -- Freshened the following source files: macro.4th, utils.4th, libs/x11/Xlib.4th, 2011-07-10 -- Added GNU MPFR (multiprecision reliable floating point) library interface and test files to libs/x11/gmp 2011-04-02 -- Added libs/gmp directory to provide GNU multiprecision library interface. The following files are provided: libgmp.4th (library interface), libgmp-test.4th (test code) 2011-03-05c -- Revised the Makefile to prevent .svn subdirectories from being included in the archive files made with "make archive" and "make snapshot". -- Modified copyright notice in kforth.cpp. 2011-03-05b -- Modified behavior of ACCEPT to conform to ANS Forth: input does not terminate until the end of line character is received. -- The 1.5.2 version code is now frozen for new features. After a brief testing period, and barring any significant problems, this version will be released. 2011-03-05 -- Development of the 1.5.x tree is now being mananged through the Subversion version control system. Significant changes and issues will continue to be logged in the ChangeLog file. -- Freshened several .4th files in the examples/ directory and subdirectories. Added lyx-included.4th and the lyx/ subdirectory in examples/ -- We are close to release of version 1.5.2. One outstanding problem is to fix the behavior of ACCEPT to behave according to the ANS Forth standard. Currently, ACCEPT terminates after receiving the specified number of characters, behaving more like the obsolete EXPECT. This problem was pointed out by Zbigniew Baniewski in 2010. 2011-02-06 -- System validation tests for the present kforth executable were conducted. All system tests pass with the exception of the following: 1) a few corner case tests in divtest.4th 2) a few input conversion tests in fpio-test.4th These are not new issues, and 2) is due to a flaw in either gcc or glibc. None of the above failures are considered to be serious issues, at present. A new problem was discovered with the test file paranoia.4th, which failed to load properly. The addition of FS. to the kForth dictionary revealed a problem in the Forth source implementation of [ELSE] (in ans-words.4th). The conditional compilation words can become confused by the presence of tab characters in the input stream and fail to recognize the control structure words, for example if a tab character happens to be part of the [THEN] being parsed by [ELSE]. This is a consequence of using BL WORD for parsing, and the parser will have to be improved to ignore all whitespace characters to fix this type of problem. For the moment, tabs were removed from the offending [IF] ... [ELSE] ... [THEN] structure in paranoia.4th. The present version shows no additional anomalies. 2011-02-05 -- Implemented [DEFINED] and [UNDEFINED] (CPP_defined() and CPP_undefined() in ForthVM.cpp). -- removed Forth source definitions of [DEFINED] and [UNDEFINED] from ans-words.4th. -- Internal code changes to use new macros PUSH_IVAL() and PUSH_ADDR() (see kfmacros.h) to simplify code in ForthVM.cpp and vmc.c -- there shoud be no effect on operation; however, the original code which is replaced by PUSH_IVAL() and PUSH_ADDR() remains as comments in the file for now. -- Changed _PUSH and _POP macro names to PUSH_R and POP_R in vm.s and vm-fast.s; changed L_push and L_pop function names to L_push_r and L_pop_r, and L_twopush and L_twopop to L_twopush_r and L_twopop_r in all *.s files. Thes are internal naming changes and do not affect the functionality. 2011-02-02 -- CONSTANT can now be used with addresses as well as integer data. It was realized, during development of the 1.6.x code, that CONSTANT has access to the type information of the data at creation time, so the vm code can be conditionally defined to use the appropriate type of fetch (@ or A@). The changes to CPP_constant() in the 1.6.x tree have been merged into the 1.5.x tree. This change should eliminate the need to define the word PTR for address constants (or PTR can become a synonym for CONSTANT). -- Implemented the words PRECISION and SET-PRECISION (see vm-common.s). Initialized PRECISION to 15 on startup (OpenForth() in ForthVM.cpp). -- Implemented FS. (CPP_fsdot() in ForthVM.cpp). FS. uses the PRECISION value to display the specified number of significant digits in scientific notation. 2011-01-30 -- Revised vm-common.s to add a new global function, L_initfpu(), which is used to set the rounding mode and precision for the numeric data processor (or floating point unit). The precision is now set to be double precision on startup, in the function OpenForth() from ForthVM.cpp. Previously, kForth started up with the default extend precision mode set. This mode results in double rounding since kForth must round from extended to its native format of double precision when storing fp numbers from the fpu to memory. As a result, the paranoia.x system test code for floating point arithmetic gave only a "Satisfactory" rating. With the above changes, paranoia.x gives an "Excellent" rating for kForth's floating point arithmetic. -- Fixed problems and incompatibilities with ALLOCATE and RESIZE, CPP_allocate() and CPP_resize() in ForthVM.cpp. kForth not only failed the tests in Gerry Jackson's memorytest.x, from the anstests 0.8 suite, but also aborted with an exception when executing these tests. Part of the problem with the tests in memorytest.x was due to an incompatibility of the test code with ttester.x (anstests provides its own test harness, tester.fr). Gerry provided replacement for the incompatible test code in memorytest.x, fixing this issue with its use under ttester.x. There were two problems with kForth's implementation of the memory wordset: 1) -1 ALLOCATE caused a fatal exception. 2) -1 RESIZE failed as expected, but returned an invalid address. The first was due to not suppressing an error throw for C++ new[] operator, used by CPP_allocate(). The second was due to returning zero for the address, instead of returning the original address when a call to realloc() failed in CPP_resize(). This was also easily fixed. kForth now passes the relevant tests in memorytest.x. -- Added memorytest.4th to the system-test/ directory. 2011-01-28 -- updated the files in the examples/fsl and examples/fsl/extras directories -- several new files have been added and two, erf.4th and quadratic.4th, have been moved from fsl/extras to fsl/ since they have been accepted into the Forth Scientific Library. -- updated ans-words.4th to make conditional compilation words to ignore the case of [IF] [ELSE] [THEN] . 2010-12-22 -- implemented F2DUP in vm.s and vm-fast.s (apparently meant to be implemented in 1.5.1, but overlooked). -- freshened the examples files; the Private: / Public: data hiding mechanism in the fsl-util.4th file is restored throughout the fsl examples. -- reserve space for PRECISION in vm-common.s, for later implementation along with SET-PRECISION and corresponding changes to fp output. -- updated kfmacros.h to the version in the pre-1.6.x tree. -- updated Makefile and version number to 1.5.2. 2010-07-07 -- updated the following example files: struct-ext.4th, lists.4th, lists-test.4th, gpib.4th, games/strek.4th. -- added new example files: ftran202.4th, ftran-test.4th, fsm2.4th, chr_tbl.4th. 2010-05-01 -- revised implementation of +LOOP (L_plusloop in vm.s and vm-fast.s) to provide behavior consistent with Forth-94, rather than the behavior described in Starting Forth (see notes from 2009-12-13). The revised implementation passes all tests in core.4th and coreplus.4th. -- updated curvefit.4th and cg-test.4th in examples/fsl/extras -- We will now freeze development of version 1.5.1 and roll out the release!! 2010-04-30 -- revised README file. -- revised syscalls.4th 2010-04-29 -- replaced examples/system-test/stringtest.4th with new version (0.5) from Gerry Jackson. -- revised SYSCALL to take up to 6 arguments, which appears to be sufficient to handle the presently known system calls. -- updated examples/syscalls.4th 2010-04-28 -- fixed two bugs in implementation of SLITERAL. Verified its behavior w.r.t. persistent and non-persistent strings. 2010-04-26 -- updated examples/syscalls.4th which has been revised to provide words for more system calls. -- added examples/parallel-mm.4th 2010-04-25 -- implemented SLITERAL (CPP_sliteral() in ForthVM.cpp), rather than making it a synonym for 2LITERAL. Therefore, SLITERAL will also work with non-persistent strings, as it should. -- Revised the code for >FLOAT (C_tofloat() in vmc.c) to allow exponent marker to be '+' or '-', in accord with DPANS94. We now pass all of the tests in examples/system-test/to-float-test.4th The above file has also been revised to include some additional tests of >FLOAT. -- We have completed all planned revisions for the release of kForth v1.5.1. After allowing for a couple of days of testing with the recent changes, the new version will be rolled out. 2010-04-24 -- Revised the code for COMPARE and SEARCH (C_compare() and C_search() in vmc.c) to change their behavior with respect to zero length strings. COMPARE and SEARCH failed some tests, involving zero length strings, in the stringtest.x module from Gerry Jackson's anstests. The functions have been revised to provide the expected behavior, and the current executables pass the tests in stringtest.4th. -- We still need to fix SLITERAL, but some support code must first be added for searching kForth's string table. -- A problem with the behavior of SET-ORDER has been fixed. SET-ORDER (CPP_setorder() in ForthVM.cpp), per DPANS94, must reset the search order to the minimum search order when the number of searchlists is -1. This was not being done, and the problem was detected with the searchordertest module from anstests. -- A problem with SEARCH-WORDLIST has been fixed (CPP_searchwordlist() in ForthVM.cpp). The word was case sensitive, causing words not to be found. The character string is converted to upper case before the search is performed. The problem was found after failure of a test in the searchordertest module. The current executables pass the tests in searchordertest.4th. -- Both the stringtest.4th and searchordertest.4th modules from Gerry Jackson's anstests have been added to examples/system-test/ -- The test code for >FLOAT in to-float-test.4th has been revised to keep and display an error count, following DNW's practice. 2010-04-23 -- updated our regression tests for kForth, examples/system-test/regress.4th A major change was to perform all floating point number comparisons using the ttester.4th supplied methods. This brings regress.4th into uniformity with the other test code involving floating point calculations. Another change was to comment out the tests for M*/ which have a negative third argument -- a condition declared to be ambiguous by DPANS94. 2010-04-22 -- removed examples/ftest.4th and used an adapted version of Gerry Jackson's filetest tester for ANS compatible file access words. Testing of ANS file access functions, defined in files.4th is handled now by examples/system-test/filetest.4th The filetest tester uncovered incompatibilities in our source implementation of two file access words with the Forth-94 standard. The two words, defined in files.4th, are: WRITE-FILE and REPOSITION-FILE The ior result was not guaranteed to be zero on success, as required by Forth 94. The ior result code for these words has been fixed in files.4th. In addition, the change to WRITE-FILE will affect the return value of WRITE-LINE, also defined in files.4th. Another problem was found, using filetest.4th, with the implementation of READ-LINE, which did not return the correct values if the last line in the file did not terminate with EOL. This problem has also been fixed. *** NOTICE *** The updated module, files.4th, now passes relevant tests in filetest.4th. However, all previously written kForth source code making use of files.4th must now be examined for side affects resulting from the changes to WRITE-FILE WRITE-LINE READ-LINE REPOSITION-FILE *** END NOTICE *** -- also found a problem with our implementation of SLITERAL, again thanks to ANS Forth test code, stringtest.x, by Gerry Jackson. Our current implementation of SLITERAL assumes that the string to be compiled has persistence. This is not always a valid assumption. Our implementation of SLITERAL must be fixed. -- Judging from the output of stringtest.4th, we may also have problems with the implementation of SEARCH and COMPARE with regards to their behavior with null strings. These problems are being studied. 2010-04-21 -- modified code for LOOP and UNLOOP in vm.s and vm-fast.s. -- Moved asm-x86-test.4th into the examples/system-test/ subdirectory. -- Removed signal-test.4th, which has been obsolete for awhile. -- Updated arcfour.4th, games/tscp.4th, and ttester.4th. -- Things to do before release: 0) update version number in Makefile to 1.5.1. 1) replace ftest.4th with a more comprehensive file functions tester, to be placed in the examples/system-test/ subdirectory 2) update lists.4th, 3) verify freshness of files in examples/benchmarks, examples/fsl, examples/games, and examples/libs directory 2010-04-20 -- Consolidated some changes from 2009-12-13 into the current 1.5.x tree, with corresponding note below. Unified assembly code for floating point arithmetic words ( F+ F- F* F/ ) into vm-common.s -- added F2DROP (change from 2009-12-03). 2010-04-18 -- Decided to move the current 1.5.x development tree to the 1.6.x tree, due to the instability of the current development code as of 2010-04-08. The working system we have been using over the past few months has been from the 2009-11-30 development snapshot. Since the code at that point in time has undergone real-world testing for several months now, we consider it to be stable enough for release. Following the 2009-11-30 snapshot, major changes were made to the vm.s and vm-fast.s in the now-named 1.6.x tree. Other changes made between 2009-11-30 and 2010-04-17 are part of the 1.6.x tree. Plan to make a release package by the end of this month. -- Consolidated changes from 2009-12-02 into the current 1.5.x tree (with corresponding note below). 2010-04-17 -- modified interpreter "ok" prompt behavior when the VM or compiler returns an error (revised kforth.cpp). It was pointed out by Zbigniew Baniewski that the "ok" prompt, as described in Starting Forth, is a response to previous input to the interpreter, rather than a prompt indicating readiness to accept new input. The DPANS94 wording supports this interpretation of the prompt behavior, so the "ok" is no longer displayed to the console when an error has resulted from input to the interpreter. -- fixed the order of arguments to the syscall() function in C_syscall() in vmc.c so that stack order of args to SYSCALL can be same as order of the args to the corresponding C system call function. -- Updated and renamed syscalls386.4th to syscalls.4th. 2009-12-13 -- Studied the problem with failure of kForth on the coreplus tests, which extends the testing of the Forth-94 compatibility of +LOOP. Concluded that kForth does not obey the Forth-94 spec, but appears to adhere to the earlier Forth-83 spec, and is consistent with the behavior described in Leo Brodie's, Starting Forth. A survey of other free Forth systems shows that PFE, up to the latest version (0.33.71), also has the same behavior as kForth (same behavior w.r.t. coreplus tests), while the following systems pass the coreplus tests: Gforth (0.7.0), bigforth (2.3), win32forth (0.02.05). -- The implementation of F/ has been revised to remove the error checking code for divide by zero. Apparently the test was not working as intended, and no checking was actually being performed in the previous versions of kForth. The FPU does not do a signaling exception anyway on divide by zero, which is what the test was intended to avert. A floating point divide by zero results in "+/-inf" or "nan", which may be considered to be the valid result of a computation. -- Recently updated Forth source files in the examples/ directory include 3ds-transform.4th fsl/extras/read_xyfile.4th games/tscp.4th system-test/regress.4th 2009-12-02 -- implemented line comment word, "\", in assembly source in vm-common.s. Removed its previous definition in vmc.c -- implemented -TRAILING as an intrinsic word in vmc.c; Forth source definition in strings.4th has been removed. 2009-11-30 -- The current build has been tested with the system test code, and with several example source files. However, the user is cautioned that anytime such major source changes are made, as described below, there is a high potential for buggy behavior by the Forth environment. In particular, our assembly source files are currently in a state of flux. -- extend our technique of using macros to combine regular and fast implementations to the assembly language portion of the VM. The file vm-common.s now uses several conditionally defined macros, paralleling the C macros, to enable common coding of regular and fast versions of words implemented in assembly source. A number of words have been moved into vm-common.s. The goal is to reduce vm.s and vm-fast.s to skeletal files which need minimal or no maintenance. Another goal is to revise the regular version to keep the data stack ptr in the EBX register, as is done in the fast version. The latter change will provide a substantial (2x) speedup for the regular version. -- further reorganization of the code in ForthVM.cpp, ForthCompiler.cpp and vmc.c. Functions from the cpp files have been moved to vmc.c. New macros, DROP and TOS, have been added to kfmacros.h and are used in the source files to improve clarity. -- updated examples/system-test/fatan2-test.4th 2009-11-26 -- implemented D2* and D2/ as intrinsic words in vm.s/vm-fast.s. The Forth source definitions of these words have been removed from ans-words.4th. -- added interp_array.4th to examples/fsl/extras/ 2009-11-25 -- added a minimal wordlist to the search order. Following the Gforth model, we add the "Root" wordlist containing the following words: ORDER SET-ORDER FORTH-WORDLIST FORTH WORDS The "Root" wordlist will always appear at the base of the search order. Further modified the behavior of ONLY to clear the search order and append the Root wordlist, and modified FORTH to ensure that the Root wordlist is never removed from the search order. -- implemented PARSE and reorganized the code. Some functions have been moved out of ForthCompiler.cpp and ForthVM.cpp into vmc.c. In particular, functions that need no access to the system objects (wordlists, searchlist, opcode vectors, etc.) belong in vmc.c. See the source comments in the aforementioned files for details. -- updated Forth files tpf.4th and system-test/regress.4th. Removed within-test.4th, from which the tests have been moved to regress.4th. 2009-11-23 -- revised strings.4th, with more efficient definitions for the words: -TRAILING SCAN SKIP IS_LC_ALPHA IS_DIGIT 2009-11-22 -- implemented CPP_tick (ForthVM.cpp) and removed references to earlier implementation of "tick", L_tick (vm.s and vm-fast.s). The new version performs error handling when the ticked word is not found in the search order, rather than simply return an invalid address. -- Updated the library interface files, lib-interface.4th and fcalls-x86.4th, and the examples in examples/libs. All three examples, blas, cftisio, and x11, have updated code. Also updated forth2html.4th and lists.4th. -- Added read_xyfile.4th to examples/fsl/extras/ and 3ds-transform.4th. -- Removed henon.4th and ogy.4th -- these example programs need to be updated to use FSL files; also removed todouble.4th, which is no longer needed since NUMBER? may be used to perform the desired string to signed double conversion. 2009-11-10 -- Revised CPP_semicolon (ForthVM.cpp) to report a word re-definition only if the new word name is found in the current compilation wordlist, instead of in the entire search order. -- Updated the x11 library interface and demo files in examples/libs/x11 -- Updated lib-interface.4th, syscalls386.4th, -- Added 3ds.4th, contained development code for reading 3ds files. 2009-10-30 -- Updated the x11 library interface files in examples/libs/x11. -- Updated the files four1.4th and polyfit.4th in examples/fsl/extras. 2009-10-23 -- Updated lib-interface.4th to handle calls to C functions with no return values. Still need to integrate handling of calls to C functions with no args. -- Updated the x11 library interface files in examples/libs/x11/. Renamed demo files to demoxx.4th. 2009-10-19 -- We now have a simple demo program to illustrate the x11 library interface! Copied the development files for the x11 interface to examples/libs/ 2009-10-18 -- copied the development files for the cfitsio libary interface to examples/libs/ -- created development library interface for X Windows (libX11.4th), based on bigForth's x11.fs. 2009-10-17 -- revised libblas.4th and moved the blas/ subdirectory to examples/libs/ 2009-10-16 -- finished implementing ALIAS, which now works. We will retain ALIAS in kForth. -- implemented RESIZE. -- need to redo "tick", which is currently implented in vm.s/vm-fast.s. The current "tick" does not do proper error checking. This word will be move to ForthVM.cpp. Stub for CPP_tick() has been added. 2009-10-14 -- implemented SET-ORDER and VOCABULARY. -- revised DLOPEN and DLSYM to accept addresses of null-terminated strings, rather than Forth C" counted strings. The conversion from a Forth string to a null-terminated string will now be handled by the Forth source calling DLOPEN/DLSYM, to allow for more flexibility in the type of strings used by the application. -- Revised lib-interface.4th to correspond to changes in DLOPEN/DLSYM mentioned above. -- internal code changes for class and member function definitions, and their use (see ForthCompiler.h and ForthVM.cpp). -- commented out code for ALIAS, which is currently flawed. This word may be removed. -- make snapshot of current 1.5.x dev tree. 2009-10-12 -- implemented GET-ORDER. -- revised lib-interface.4th and fcalls-x86.4th -- added BLAS library interface to examples/fsl/extras/blas/ Test code for the BLAS interface needs to be fleshed out. -- continue to develop the CFITSIO library interface; also plan to port the X11 library interface from bigForth (X11.fs). 2009-10-08 -- fixed bug with return flag for NUMBER? in vmc.c; fixing this bug fixed the test failures with lists-test.4th. -- implemented ALIAS, but the implementation is flawed. Attempt to mirror the aliased word results in double memory freeing upon BYE. -- A number of internal changes were made to the classes relating to wordlists and vocabularies. -- implemented SEARCH-WORDLIST. -- added stubs for VOCABULARY and RESIZE. 2009-10-07 -- Added Gerry Jackson's coreplus tests in the examples/system-test directory (file, coreplus.4th). We fail some of the +LOOP tests; need to investigate. -- We fail several tests in lists-test.4th; need to investigate. This does not happen in kForth v1.4.1. The source files lists.4th and lists-test.4th are the same between v1.4.1 and the 1.5.x dev tree. -- Created lib-interface.4th to provide generic words for working with external shared object libraries. -- The function call interface is in fcalls-x86.4th. For both asm-x86.4th and fcalls-x86.4th, added links to generic files asm.4th and fcalls.4th. -- Need to implement ALIAS and VOCABULARY. 2009-10-05 -- Development is now in the 1.5.x tree. Version number is now 1.5.0. -- renamed the README.SNAP file to ChangeLog, which is a more commonly used filename for the type of info contained here. Made README.SNAP a link to this file. Revised the Makefile to include ChangeLog in the archive and snapshot files. -- Added and tested a number of the Search Order words to kForth. The remaining words to be implemented have stubs for the present. In addition to the standard Search Order words and extensions, the word ASSEMBLER is intrinsic in kForth. -- Revised the assembler, asm-x86.4th, to use wordlists. The assembler words now are part of a separate ASSEMBLER wordlist. The examples file, asm-x86-examples.4th, appears to work with the revisions. -- Began a generic function call library for calling external C functions provided by a shared object library. Our test case for the shared object library interface is the CFITSIO library. The kForth interface (.4th files) to CFITSIO are not yet a part of the included examples, but we have demonstrated a simple test program in Forth, translated from the CFITSIO doc, to write a simple FITS format file. 2009-10-04 -- The 1.4.x development tree has been closed, and the existing files have been moved to the 1.5.x tree. This change was made for two reasons: 1. The number and scope of recent changes necessitated the the increment. 2. The need for separate Forth and Assembler wordlists is now critical. Existing work in the early 1.5.x tree, to implement wordlists, has been integrated with the latest 1.4.x code. 2009-10-01 -- fixed NUMBER? in vmc.c. This word now handles signed numbers of double length. -- fixed several issues with internal implementation of >FLOAT in ForthVM.cpp. >FLOAT now handles strings of blanks and Fortran double precision notation properly. It also checks for the presence of at least one numeric digit in the string. The latter requirement needs to be moved into the function IsFloat() in ForthCompiler.cpp. At present, simply entering "E" in the interpreter results in a floating point conversion to 0E, assuming base is not HEX. -- modified definition of [ELSE] in ans-words.4th, to make it case insensitive. -- revised strings.4th -- Updated version number to 1.4.7. 2009-09-30 -- revised dltest.4th. This example now works, and illustrates how to open a shared object library, find the address of a library function, and call the function. The test illustrates use of the cos() function from the 32-bit C math library, libm.so. 2009-09-28 -- exported L_dnegate for use by C_numberquery. The word NUMBER? is currently in the midst of revision and does not work. 2009-09-27 -- fixed a long-standing bug in the number interpreter which took as valid input a digit larger than permitted by BASE, e.g. BINARY 3 returned 0 instead of a dictionary search error message. The problem is fixed in the recently factored function, isBaseDigit(), in ForthCompiler.cpp. 2009-09-26 -- added definition of WITHIN in vm.s and vm-fast.s, and removed its Forth source defn. from ans-words.4th. Began a test file, within-test.4th, to test the new assembly language implementation. The tests for WITHIN will later be merged into regress.4th. -- added definition of /STRING in vm.s and vm-fast.s, and removed its Forth source defn. from strings.4th. -- revised examples: asm-x86.4th, syscalls386.4th, struct.4th, todouble.4th, minispread.4th -- revised system-test module, regress.4th. 2009-09-24 -- added an interface to dynamic link libraries (shared object libraries). The following words have been added: DLOPEN, DLERROR, DLSYM, DLCLOSE Their source is defined in vmc.c. A test program, dltest.4th, is provided in the examples subdirectory. While the actual function calling word may be defined in assembler, using asm-x86.4th, it would be better to define an intrinsic word that would set up the stack pointer and call the function. -- The example file, syscalls386.4th, needs revision, since the word SYSCALL has been intrinsic to kForth since version 1.4.1. The assembly language interface, which is specific to 32-bit x86, is no longer needed. 2009-09-20 -- made >NUMBER intrinsic (in ForthVM.cpp). Its Forth source definition has been removed from ans-words.4th. -- consolidated C macros in file kfmacros.h, and updated dependencies in Makefile; also updated version number to 1.4.6. -- began revising NUMBER? (in vmc.c) to work properly with double numbers. 2009-09-19 -- added placeholder opcodes in fbc.h for: >NUMBER WITHIN SPACE BLANK /STRING -TRAILING PARSE ZDROP ZDUP ZSWAP ZOVER Z@ Z! Z+ Z- Z* Z/ -- revised opcodes in fbc.h for the following words: NUMBER? DMAX DMIN -- BLANK is now an intrinsic word (vm.s, vm-fast.s), and its Forth source definition has been removed from strings.4th. 2009-09-18 -- freshened example .4th files. Many files, particularly in the fsl/ subdirectory were revised and new additions were also made. 2009-09-17 -- added word FALOG (implementation in vmc.c); revised Makefile to update version number to 1.4.5. 2009-08-02 -- added FLOATS and FLOAT+ as intrinsic words. 2009-07-23 -- added erf-wc.4th in examples/fsl/extras 2009-07-03 -- made some mods to kForth.cpp to fix picky compiler errors with gcc 4.3.x. 2009-05-23 -- added new floating point power function in vmc.c to replace the call to the math library pow() function, which has unexpected loss of accuracy for extreme values. 2009-05-03 -- Fixed a bug in L_calladdr (see notes from 2008-03-17), which was clobbering the stack pointer, in the file vm-fast.s. -- Completed modifications to vmc.c so that only one version is now needed. Removed file vmc-fast.c from the source package, thereby reducing the maintenance load by one file. Currently, the only extra file needed to support the fast version of kForth is vm-fast.s -- Updated Makefile to remove dependencies on vmc-fast.c, and incremented version number to 1.4.4. -- The source package is now in a buildable state once again. Both kforth and kforth-fast execute the system test files with the same results as v1.4.1 (see notes from 2007-08-01). -- Freshened the following files in examples/: ttester.4th -- Added the following files in examples/: fatan2-test.4th 2008-07-07 -- revised ForthCompiler.cpp to remove dependency on the type stack, by recoding the function IsInt(). This file now becomes common between the regular and fast versions of kForth. The file ForthCompiler-fast.cpp has been removed from the fast/ directory. -- revised ForthVM.cpp to perform conditional compilation for type stack code. This change removes the need for a separate ForthVM-fast.cpp, and thereby reduces our effort needed to maintain the code. -- removed the fast/ directory altogether. The remaining files which are distinct for the fast version of kForth have been move up one level from fast/ -- these are vmc-fast.c and vm-fast.s. -- updated the Makefile to reflect new directory structure (no fast/ subdirectory) and to pass a switch to the compiler to control the version of kForth (regular or fast) being built. The version nuber was updated to 1.4.3. 2008-07-04 -- fixed problem with WORD (see notes from 2007-11-27). This fix necessitated a global change in the handling of pTIB (in ForthVM.cpp and ForthCompiler.cpp). Some validation of the revised system was performed using the Forth programs in the examples/ directory. -- revised fsl-util.4th; freshened cg-test.4th; removed ftester.4th. 2008-03-30 -- fixed stack behavior of >FLOAT. According to DPANS94, >FLOAT should treat a string of blank characters as a valid conversion of floating point zero. We don't yet have this behavior. -- added 2LITERAL, SLITERAL, and FLITERAL as intrinsic words. These words are all synonyms in kForth. Removed Forth source defn of 2LITERAL in ans-words.4th, and defn of SLITERAL in strings.4th. 2008-03-21 -- factored out the intrinsic Forth word list from ForthCompiler.cpp and ForthCompiler-fast.cpp into a separate file named ForthWords.h, which is included by both .cpp files. This simplifies adding new words to the intrinsic Forth dictionary. -- While making the above factorization, it was noticed that the Forth compiler does not need to distinguish between the regular and the fast versions of kForth. In fact, the only difference between ForthCompiler.cpp and ForthCompiler-fast.cpp is a trivial use of the type-stack (GlobalTp) in the function IsInt(). This can be easily removed to eliminate the need for two separate ForthCompilerx.cpp files. We plan to eliminate ForthCompiler-fast.cpp as well as kforth-fast.cpp and generate kforth-fast from the ordinary versions of these files. -- The word ">FLOAT" has been added as an intrinsic word. This word is specified in DPANS94. We will use it to recode some string to floating point conversion words in strings.4th -- Some words in strings.4th which should be made intrinsic are BLANK, /STRING, -TRAILING, SLITERAL, and maybe SCAN and SKIP. -- From ans-words.4th, SPACE, >NUMBER, and 2LITERAL should be made intrinsic. In fact, SLITERAL is just a synonym for 2LITERAL. In kForth, FLITERAL is also a synonym for 2LITERAL. 2008-03-18 -- factored out common declarations and data (JumpTable) from vm.s and vm-fast.s into a new file vm-common.s. The common file is included by vm.s and vm-fast.s during assembly, so there is no standalone object file associated with vm-common.s. This factorization saves us work in maintaining the Jump Table when we add new words or remap existing words, since mods only have to be made in one file. -- Updated the Makefile(s) to introduce dependency on vm-common.s for building vm.o and vm-fast.o. Also added symbolic link to vm-common.s in the fast/ directory. 2008-03-17 -- modified the method in which intrinsic words with opcodes > 255 are compiled and executed, using the new OP_CALLADDR opcode. The new method is considerably more efficient than the older method. This change required code changes in ForthVM.cpp (OpenForth() and CPP_postpone()), and in ForthCompiler.cpp (ForthCompiler() and the new function CompileWord()). Implemented L_calladdr in vm.s. -- In order to accomodate the OP_CALLADDR opcode, the opcode for FORGET (in fbc.h) was moved outside the range 0--255, and some opcodes between 260 to 274 have been remapped (changes in fbc.h and the JumpTable in vm.s). -- Fixed POSTPONE for words with opcodes > 255 (CPP_postpone() in ForthVM.cpp). -- Added INCLUDED as an intrinsic word (CPP_included() in ForthVM.cpp), in anticipation of new Forth 200x requirements. Also removed its Forth source definition from files.4th. -- Added 2CONSTANT and 2VARIABLE as intrinsic words. The corresponding Forth source definitions were removed from ans-words.4th. -- Corresponding changes to the kforth-fast source are being made, but not yet complete. 2007-11-30 -- Revised the Makefile to copy the "examples" subdirectory into the archive and snapshot files. -- Updated version number in Makefile to 1.4.2. -- Freshened the "examples/fsl" subdirectory, which is undergoing rapid revision. 2007-11-27 -- Applied a patch to fix handling of relative paths by INCLUDE, with respect to the default directory specified by the shell environment variable KFORTH_DIR. Previously, if KFORTH_DIR was specified, an include statement such as INCLUDE fsl/fsl-util would fail to load the file at $KFORTH_DIR/fsl/fsl-util (if no file existed at the current path "fsl/"). This behavior has been fixed, and allows us to use a subdirectory structure for the .4th files within the default directory. -- Moved the Forth example programs into their own subdirectory, "examples". The examples are being organized, by category, into their own subdirectory structure. -- Freshened the Forth Scientific Library (FSL) files, and associates files, which are now organized in "examples/fsl". -- Discovered bug in implementation of WORD. Its behavior is inconsistent with corresponding implementation in other Forth systems when the delimiter character is not a space. The code below illustrates the problem: : test bl word count type [char] " word count type ; ( a) test hello world" \ prints "helloworld" ( b) test hello world" \ prints "helloworld" ( c) test hello world" \ prints "hello world" The output from cases ( b) and ( c) are not the same as for other systems. The output should be ( b) "hello world" ( c) "hello world" kForth's WORD is ignoring the first character in the input stream when it is a space and the delimiter is not a space. This problem will be further diagnosed and fixed, presently. 2007-10-05 -- Applied patches to files vm.s and vm-fast.s to change the definition of MOVE to use memmove instead of memcpy. Although the older definition of MOVE passed the Hayes' tests and the kForth regression tests under Linux, it failed its regression tests under Windows/cygwin. The patches make the definition consistent for the two platforms. 2007-08-01 -- Updated utils.4th -- Updated version number in Makefile to 1.4.1 -- Commented some tests of F>D in regress.4th. The x86 version uses the native floating point to double conversion instruction provided by its FPU. We will address the inconsistency between the expected results for the corner cases and the actual output from the FPU at a later date. -- Updated code for UTM/ in vm-fast.s to match code in vm.s. -- Implemented UTS/MOD and STS/REM in vm-fast.s. Both kforth and kforth-fast give identical results for divtest.4th and regress.4th. -- We still fail some corner case tests for STS/REM and have an inconsistency between the ppc and x86 versions for M*/ with a negative divisor. However, these are not considered to be serious enough problems to postpone the long-delayed release of kForth 1.4.1 for x86-linux. 2007-07-01 -- Implemented UTS/MOD in vm.s. The two words UTS/MOD and UTM/ share common code, with UTS/MOD being the more general word. The current implementation passes the tests in divtest.4th, but the code needs to be better factored (logically, UTM/ should call UTS/MOD). -- Implemented STS/REM in vm.s. This word currently fails a few of the corner-case tests in divtest.4th. Analysis in progress. 2007-02-19 -- Fixed problems with L_utmslash in vm.s. Previously, the word "M*/", which uses "UTM/", failed some tests. The problems arose from improper handling of the carry flag during arithmetic in "UTM/". -- Added checks for divide by zero and division overflow errors in L_utmslash and L_umslashmod, in the file vm.s. -- Added checks for divide by zero in L_fmslashmod, L_smslashrem, L_mod, and L_slashmod, in the file vm.s. The changes for MOD and /MOD are carried over from patches to kForth 1.3.2. -- Corresponding changes, to those described above, have been made for L_utmslash, L_umslashmod, L_fmslashmod, L_smslashrem, L_mod, and L_slashmod, in the file vm-fast.s. -- Added word "#!" in ForthCompiler.cpp and fast/ForCompiler-fast.cpp This word is synonymous with "\" and allows a .4th file to be used as an executable shell script. -- Updated core.4th to the version from the ppc-osx 1.4.x distribution. -- Other .4th files which have been updated are: asm-x86.4th, fft1d.4th, primes.4th -- Added the following .4th files: expint.4th, elip.4th, logistic.4th, horner.4th, gamma.4th, pcylfun.4th, crc-32-x86.4th, ioctl.4th, struct-ext.4th, cg.4th, cg-test.4th, notes.4th, queens.4th, speech.4th, syscalls386.4th, grating.4th, mersenne.4th, ran-next.4th, sl.4th, corewars.4th, arcfour.4th -- Removed the following obsolete .4th files: nigpib.4th -- Only known remaining tasks for synchronization with the ppc-osx 1.4.x distribution are to add the words UTS/MOD and STS/REM, and to provide consistent behavior for M*/ when it is used with a negative divisor (behavior of M*/ with use of a negative divisor is undefined in DPANS94, but we wish to have consistent behavior between the ppc and x86 code). 2006-11-02 -- Recoded the floating point zero comparison words to remove conditional branching: F0= F0< -- Added the fp zero comparison word F0> -- Above changes were made in both vm.s and vm-fast.s. Both kforth and kforth-fast pass all of the fp comparison tests in regress.4th. -- Updated installation instructions in README file. Also include instructions in README for customizing Emacs to provide syntax highlighting for .4th files. -- Revised Makefile to add gforth.el file to the snapshot and archive files. -- Updated the following Forth code examples: fsl-util.4th, lufact.4th, backsub.4th, gaussj.4th, shellsrt.4th, regfalsi.4th -- Added the following Forth code examples: strek.4th, sudoku.4th, pispigot.4th, qm8.4th, naacb.4th, hilbert.4th, invm.4th, dets.4th, gpib.4th, fft-x86.4th, curvefit-fsl.4th, and gfit-fsl2.4th. 2006-07-22 -- Major recoding of vm-fast.s (for kforth-fast) has been completed. This revision allows nearly all Forth primitives in vm-fast.s to assume that the stack pointer is loaded in the EBX register. The changes to keep the stack pointer in EBX imposes additional new rules for coding Forth primitives in vm-fast.s; these rules are given in the comments. The net result is about a 17% speedup w.r.t the previous snapshot for kforth-fast 1.4.0. -- Updated vm-fast.s with all recent changes to vm.s, described in the last snapshot. -- Thorough testing of the revised kforth-fast has not been done; however, it passes the tests in core.4th (except for SOURCE) and works with the benchmarks. A few of the other Forth programming examples have been tested and found to work also. 2006-06-12 -- Fixed error reporting for CPP_include() in ForthVM.cpp and ForthVM-fast.cpp. When no default source directory is specified in the environment variable KFORTH_DIR, and an attempt is made to load a non-existent file using INCLUDE, the load failed silently without an error message. This has been fixed. -- Fixed problem with terminal echo setting being turned off if COLD was executed. Restoration of terminal settings has been moved from CPP_bye() to CloseForth() in ForthVM.cpp and in ForthVM-fast.cpp. -- Updated regress.4th with latest version from DNW, which includes revised tests for SP@ and RP@ plus tests for SP! and RP!. -- Updated Makefile to add sample *.dat files to the archive and snapshot files. 2006-05-30 -- Recoded CMOVE in vm.s and vm-fast.s. CMOVE now passes dnw's tests in regress.4th. The earlier implementation appears to be consistent with the ANS Forth word MOVE. -- Made MOVE an intrinsic word, using the previous implementation of CMOVE. MOVE passes the Hayes' core tests, but still needs to be rigorously tested. -- Commented out the source level definition of MOVE in ans-words.4th. 2006-05-02 -- Finished coding DS* DMIN and DMAX in vm.s. Added several new macros to facilitate these changes: DLT FDUP FSWAP FOVER _ABS and TNEG. -- Used macro FREL_DYADIC in vm.s to consolidate the code for all dyadic floating point relational operators: F<> F= F< F> F<= and F>= No conditional jumps are needed for these operators. -- The above changes have not yet been applied to vm-fast.s. 2006-04-28 -- Revised code for "D=", "D<", and "D0=" to remove conditional jumps. -- Created macro STOD in vm.s and vm-fast.s, and used this macro to recode "S>D" and "M+". The problem with "M+" has been fixed and it now passes its tests in dbltest.4th. -- Revised code for "D<" to fix problem caused by using DMINUS. The logic is the same as that used in DNW's vm-osxppc.s. "D<" now passes its tests in dbltest.4th. -- Added code for "DU<" in vm.s and vm-fast.s. This word passes its tests in dbltest.4th. All issues with failures in dbltest.4th have now been resolved. -- Revised code for "F<>", "F=", and "F<" to remove conditional jumps. Still need to revise the remaining floating point relational operators. -- Remaining tasks are to fix "UTM/", and add the following words: UTS/MOD STS/REM DS* DMIN DMAX F0> -- Analyze unexpected failure of tests from DNW's regress.4th under x86-linux: CMOVE CMOVE> FILL ERASE INCORRECT RESULT: { pad 5 + pad DO i c@ LOOP -> 1 1 1 1 1 } SP@ RP@ 2R@ 2>R 2R> INCORRECT RESULT: { sp@ dup @ = -> true } INCORRECT RESULT: { 3 RP@1 -> 3 } 2006-04-23 -- Revised vm.s and vm-fast.s to recode the relational operators "=", "<>", "<", ">", "<=", ">=", "0=", "0<>", "0<", and "0>" to remove conditional jumps. I was able to use the x86 SETx instruction to form the TRUE/FALSE values. Also factored the code for the above words into two macros: REL_DYADIC and REL_ZERO, which reduces the size of the code and improves consistency and readability. -- The above change resulted in approximately 5% increase in speed as measured with tscp.4th and the regular kforth. Have not benchmarked the improvement in kforth-fast yet. -- Further revised vm.s and vm-fast.s to factor the macros _AND, _OR, _XOR, into another macro, LOGIC_DYADIC. This change further improves the readability and consistency of the code. -- Updated hmac-md5.4th and replaced test-lists.4th with lists-test.4th. 2006-04-19 -- Updated vm-fast.s to add fix for M/ which was implemented earlier in vm.s. The fix was not documented in the comments in vm.s, so a comment was added. -- Added the intrinsic word SYSCALL (C_syscall in vmc.c and vmc-fast.c) to provide a method for calling low-level system functions. 2006-04-15 -- Updated vmc.c and fast/vmc-fast.c with recent patches to fix the signals interface. A test program, signal-test.4th, is included to show the problem and test the fix. Problem: ------- If a Forth word is installed as a signal handler, when the OS executes the handler, the stack state is in an unpredictable condition, i.e. the switch may have occured during the middle of execution of a word. This can cause the handler to overwrite intermediate operands on the stack. Fix: --- The stack states are preserved and restored upon entry to and exit from the handler. The stack pointers are copied, then offset by a fixed amount towards the top so that, effectively, the handler uses its own separate stack. After the Forth handler is executed, the original stack pointers are restored. -- Updated the Makefile to fix "make snapshot" so that it will preserve soft links in the fast/ subdirectory. -- Copied updated tests from DNW's ppc-osx port: divtest.4th, dbltest.4th, and regress.4th. For divtest.4th, we must do the following: * Fix L_utmslash in vm.s * Implement UTS/MOD, STS/REM, DS* in vm.s For dbltest.4th, the following must be done: * Fix M+ in vm.s * Fix D< in vm.s * Implement DU< in vm.s For regress.4th, the following must be done: * Implement DMIN and DMAX as native words; retire these words in ans-words.4th. * Add "F0>"? -- apparently added to the kForth intrinsic dictionary by DNW in the osx-ppc port. 2006-04-12 -- Modifications for consistency with latest snapshot of David Williams' ppc-osx port, with stubs added in vm.s for division words implemented by DNW in the ppc version which are not yet available in the x86 version. -- Updated ForthVM.cpp and ForthVM-fast.cpp for automatic endian handling in OpsCompileByte(). 2006-04-01 -- Includes updates for vm.s and vm-fast.s, which use the EBP register to hold the virtual IP. -- Includes updates for asm-x86.4th and asm-x86-examples.4th. -- Merges some additions by David N. Williams (DNW) from the Mac OS/X development code in the files fbc.h, ForthCompiler.h, ForthCompiler.cpp, ForthVM.h, and ForthVM.cpp -- Revised the Makefile. Use DNW's method for making a development snapshot, "make snapshot" with changes described in README.SNAP. The file names for the archive and snapshot files have been changed to be of the form: kforth-cpu-os-version.tar.gz (archive) kforth-cpu-os-builddate.tar.gz (snapshot) -- New .4th files: fpu-x86.4th div-test.4th -- Made UTM/ a visible word (see L_utmslash in vm.s) for testing. The current implementation fails some tests devised by David Williams (see div-test.4th). -- There appears to be a bug with the code "POSTPONE :". An initial attempt to fix this was not successfull, and the fix is commented out in ForthVM.cpp. Further study is needed.