--------------------------------------------------------------------------- Todo: Optimizers for: "lit lit " "rot -rot" --------------------------------------------------------------------------- *** uForth 2.54 14-Sep-2015 ks Floating point added to the host in order to compute float numbers during compilation *** uForth 2.53 22-Jun-2015 ks Modified to work both under 32 and 64 bit systems *** uForth 2.52 16-Mar-2013 ks ?GOTO, GOTO, CALL, ADDR with optimal branch addresses by interpreting the souce twice. Definition of END to trigger re-interpretation. *** uForth 2.51 15-Mar-2013 ks More efficient implementation of data memory initialisation. *** uForth 2.50 13-Mar-2013 ks Bug in prog_ld corrected, the number of bytes fetched needs to be dependent on #bytes. *** uForth 2.49 12-Mar-2013 ks Bug in ?GOTO corrected (missing ?nop,) Data memory initialisation realised with these user words: INITIALISED, UNINITIALISED, SAVE-DATA, INITIALISE-DATA Note: Forward referencing "ADDR Program-size" needs to be resolved with "LABEL Program-size" at the end of the program (see: LOAD.FS) *** uForth 2.48 11-Mar-2013 ks ADDR added as forward reference for addresses, returned as literal. *** uForth 2.47 9-Mar-2013 ks ?GOTO GOTO CALL have been updated for gforth as forward referencing mechanism. LABEL as well as : can be used to define the branch destination and to unresolve the pending forward references RECURSIVE and RECURSE to support recursive calls. *** uForth 2.46 9-Jul-2011 ks renaming: carry-set, carry-reset, tor_branch FORTH.FS: sqrt and double shifts added MESSAGES.FS extracted out of DEBUGGER.FS. MESSAGES must be updated to display application specific messages. *** uForth 2.45 4-Sep-2010 ks New way of setting bit wise writeable registers (CTRL!, IE!) implemented in the cross compiler. See FORTH.FS: setctrl, resctrl, int-enable, int-disable. INVERT optimizer looks for preceeding literal, which it inverts statically if present. *** uForth 2.44 3-Sep-2010 ks System dependend code for the debugging umbilical isolated in UMBILICAL.FS. Restructuring of load_xx.fs and sim_xx.fs files. *** uForth 2.43 27-Mar-2010 ks Two problems solved: ?EXIT and 0=EXIT can now be traced correctly. The word close-port has been defined and must be executed before re-loading the debugger. *** uForth 2.42 20-Mar-2010 ks Opcode definitions from CONSTANT.VHD directly translated into Forth instructions. Opcodes structured by function, no longer by opcode structure. Disassembler re-written to display Forth dictionary names. Optimizers implemented for "r> >r" and "call exit". *** uForth 2.41 14-Mar-2010 ks dtarget> added in debugger to allow d. in target. *** uForth 2.40 28-Feb-2010 ks VHDL file CONSTANTS.VHD gets included in MICROCORE.FS so that the opcodes don't have to be defined twice. All opcode primitives and architecture constants renamed to their VHDL version. *** uForth 2.30 21-Feb-2010 ks CATCH and THROW defined in MULTITASK.FS Version control constant "gforth_062" in GFORTH-CONFIG.FS. When false, the cross-compiler load on top of gforth_7, which will have the prelude bit included. See files stuff.fs, prelude.fs and some kernel files in gforth_7 sources *** uForth 2.20 8-Aug-2009 ks TIMER does no longer generate Exceptions, instead TIME? instruction is introduced. The Multitasker has been extended to allow for efficient handling of timing and polling requests using POLL, CONTINUE and POLL_TIMED words. These test for events before the task wakes up. *** uForth 2.13 9-Jul-2009 ks TIMES instruction syntax modified in uCore 1.43. uForth has to be adapted accordingly. *** uForth 2.12 21-Jun-2009 ks ABORT added in DEBUGGER.FS *** uForth 2.11 27-May-2009 ks OBJECTS.FS streamlined. OOP_TEST.FS as test file for objects. Reference renamed [], IS works with nested Attributes *** uForth 2.10 24-May-2009 ks With Objects and Methods: OOP.FS and OBJECTS.FS See: LOAD.FS Some Version control Variables eliminated. File-restructuring: IMAGES.FS contains those definitions, which are only necessary for simulation. Error messages more explicit in the debugger. *** uForth 2.00 6-May-2009 ks/uho Now with integrated debugger. Currently, it only loads on top of gforth. This is for uCore 1.41 taking into account some opcode reshuffling. Several minor impovements/bug fixes. *** uForth 1.340 1-Mar-2009 ks A bug in TIMEOUT? correct, which was due to the limited word width of timer. Operators DI@ and EI! added. This greatly simplifies EI and DI. +!, INCREMENT, and DECREMENT are now indivisible operations with interrupt disabled. In MULTITASK.FS: WAIT enhanced so that SIGNAL can safely be executed by an interrupt service routine. DO_PRIORITY added for performance measurement. *** uForth 1.331 28-Feb-2009 ks Tail recursion optimization added and DEBUGGER.FS adjusted accordingly. Both CALL EXIT and >R EXIT will be replaced by a BRANCH. *** uForth 1.330 28-Feb-2009 ks "over over " und "swap -" optimizers implemented. Redefinitions now possible, because a :-definition will only be visible after ; (HIDE and REVEAL added to Gforth layer). Files have now .FS extension in line with Gforth common usage. Some syntactic changes: ovl -> ovfl, and ?OVL -> ?OVFL etc. Added MULTITASK.FS for multitasking and semaphores. Some definitions and macros optimized in MICROCORE.FS and FORTH.FS *** uForth 1.321 27-Apr-2008 ks GOTO, ?GOTO, 0=GOTO added and LABEL extended to support multiple forward references for C compiler. Bug in FIXED, corrected (?LITERAL did test the wrong stack item). *** uForth 1.30 21-Apr-2005 ks This version supports uCore_1.31 Variable Defining introduced in order to differentiate between cross-compilation and Compiler extensions / Macros, at present only used to define LITERAL properly. Minor cleanup concerning Macro definition capability. *** uForth 1.20 25-JUN-2004 ks Arithmetic overflow implemented with ?OVL trap and NO-BRANCH ( ovl IF ... THEN ). SWAP- instead of SBC. d- realised using "invert +c" 30 bit limitation bug corrected. Now full 32 bits may be used. Conditionals restructured: BRA PUSH group as special branches CODE END-CODE and macro IP-BRANCH to support threaded code. Code has been modified to support the TOR register: ALU NONE group has been reserved for complex math steps The FLAGS/IE register has been turned into a memory mapped register, freeing its field in the MEM group for the IP register IF, WHILE, UNTIL using DROP_FLAG instruction and therefore, a radically simplifyed compilation of conditional constructs. Compilation tokens for new instructions ?DUP, NIP and R! added. Compatibility with gforth, sym-file writes symbol table in file. Defining words USR: ... ;USR added in order to define "soft-call instructions" of the USR-type. *** uForth 1.10 9-Feb-2003 The publicly released version. What is missing? - It does not handle forward references. Adding this capability would require to deeply delve into the workings of the WIN32FOR compiler, which is anything but simple. So I quickly abandoned forward references. If they can not be avoided at all, there are workarounds using execution vectors. - It does only a limited amount of optimisation but primitives for optimisation have been added already: PREV@, PPREV@, and MATCH. Worth-while optimisations: First candidate: EXIT to take care of tail recursion. Second candidate: Binary operators to take care of preceeding stack operations and literals.