Old news

  • 11.4.2009: release 3.4

    • core: renamed the words for the serial terminal to be more generic since they can deal with any serial port, not only the first one.
    • lib: dropped forget since it cannot work with multiple wordlists, fixed marker.
    • core: changed again digit? stack effect (and fixed a little bug).
    • core: number honors a leading &, $ or % sign to temporarily switch to DECIMAL, HEX or BIN base resp. Thanks to Michael Kalus for factoring the code.

  • 22.2.2009: release 3.3

    • core: faster noop.
    • added ANS94 search order wordlist.
    • core: within had problems with signed boundaries, literal numbers are processed faster (again).
    • core: improved digit? and number. They now report errors on invalid characters at the wrong position. The following strings are no longer valid numbers: --1 or 0@ (in base hex).
    • core: -1 spaces now prints nothing, Fix from Lothar Schmidt.
    • core: (loop) (runtime of loop) now checks for equality only, as specified in ANS94.

  • 10.1.2009: release 3.2

    • core: bugfix for trailling 0x00 byte during itype.
    • core: enable use of other usart port than 0.
    • pc-host: Ken Staton wrote a nice pc based terminal with upload functionality.
    • core: New controllers: ATmega328P and ATmega640.
    • core: changed digit to digit? found in many other forth's.
    • core: new word within.
    • core: split application dictionary definition into 2 parts, one for the lower flash, one for the upper (NRWW) flash. Both can be empty, but need to exists.
    • core: changed some names for internal constants (baudrate -> BAUD) and registers (EEPE vs EEWE).
    • core: new directory drivers for low level driver functions. Currently only the generic ISR and the USART0 interrupt handler.

  • 10.11.2008: release 3.1

    • core: icompare now has a similiar stack effect as compare.
    • core: new word: environment?. Supports /hold query.
    • core: Strings in flash (incl. names in the dictionary) contain now 16bit length information, previously only 8 bit.

  • 17.10.2008: release 3.0

    • core: s" new with interpreter semantics. s" hello world" type works at the command prompt. The compiled version is : hw s" hello world" itype ; .
    • core: Placement of Stacks is now an application setting. See example apps.
    • core: added VM register A and B. See http://www.complang.tuwien.ac.at/anton/euroforth/ef08/papers/pelc.pdf for details. Uses Atmega Register R6:R7, R8:R9 resp.
    • core: added cmove as a primitve.
    • core: f_cpu used the old (pre-2.7) stack order for double cell values.
    • lib: moved some definitions to more appropriate files.

  • 1.8.2008: release 2.9

    • core: heap, here and edp are now VALUEs. dp is gone (use here)
    • lib: more VT100 sequences.
    • core: The TIB location and size are accessible with the VALUEs TIB and TIBSIZE.
    • core: fixed TIBSIZE default configuration.
    • lib: created math.frt, contains among others the standard words sm/rem, fm/mod.
    • Alexander Guy fixed a bug in u*/mod.
    • Bernard Mentink adapted Julian Noble's Finite State Machine code.
    • applications: Lubos Pekny designed a smart computer with a 4line character LCD and a PS/2 keyboard. Details are in the Application Repository, a video is here.

  • 27.6.2008: release 2.8

    • core: Lubos Pekny found that -jtag sometimes used the wrong mcu register.
    • core: Bernard Mentink wrote a Atmega128 device file, Thanks alot.
    • core: Atmega88 & Atmega168 work too.
    • core: Fixed regression for atmega128.
    • core: Moved serial interface words to application dictionary (not every amforth installation may have a serial terminal).
    • library: Updated assembler from Lubos Pekny.
    • examples: sieve benchmark, optimized for 1K RAM.

  • 5.4.2007: release 2.7

    • core, lib and sample applications are now in one package.
    • restructured repository layout. Now the trunk has most of the sources.
    • core: re-arranged the register mapping.
    • core: m* was in fact um*.
    • core: double cell numbers changed stack order: TOS is now the most significant cell.
    • library: new: assembler written by Lubos Pekny, www.forth.cz. Thank you!
    • examples: PWM example from Bruce Wolk. TWI/I2C EEPROM access

  • 27.1.2008: release 2.6

    • core: new defining words code and end-code. code starts a new dictionary header with the XT set to the data field. The 2nd one appends the jmp NEXT call into the dictionary.
    • core: removed the pre-assembled case / endcase words. Added them as forth library.
    • core: new words -jtag (turns off JTAG at runtime) and -wdt (turns off watch dog timer at runtime. They need to be implemented as primitives due to timing requirements.
    • core: quit: Keep base when handling an exception.
    • library: TWI/I2C EEPROM Support.

  • 6.12.2007: release 2.5

    • Bug: hex 8000 . froze the controller. Now it prints -8000. Thanks to Lubos for the hint.
    • Moved init of base from quit to cold. turnkey be used to change it permanently. Thanks to Lubos for the hint.
    • nice looking dumper words for RAM/EEPROM/FLASH, dropped idump.asm.
    • Extended Upload utility (tools/amforth-upload.py) from piix: include files using following syntax:
      		\ demo file
      		#include ans94/marker.frt
      		marker empty
      		
    • usart transmit (tx0) made more robust.
    • User Area restructured for the new multitasker.
    • added documentation: Karl's User guide and a Technical guide.

  • 11.10.2007: release 2.4

    • Added AT90CAN128. Other Atmega128 style controllers should work too.
    • lot of fine tuning.
    • dropped the assembler device init portion.
    • New file: dict_compiler.inc. Without these words the forth system is (more or less) a pure interactive system without extensibility.
    • new words [char], fill.
    • re-arranged usart code. fixed bug when usart baud rate calculation leads to values greater 255.
    • renamed /int to -int and int to +int, it's more fortish ;=)

  • 29.7.2007: release 2.3

    • new words spaces and place.
    • Improved i!.
    • bugfixing runtime parts of do/loop and co.
    • re-coded find and icompare for better readability.
    • eliminated code duplets in some primitives.
    • moved usart init from cold to application specific turn key action. Added error checking in receive module.

  • 17.6.2007: release 2.2

    • new download section: application
    • optional dictionary is now part of the application, therefore renamed to dict_appl.
    • new words: leave and ?do.

  • 22.5.2007 release 2.1

    • changed stack effect for # to ansi (from single cell value to double cell). Double cell values do not work (yet).
    • introduced deferred words instead of tick-variables. Works for EEPROM based vectors (turnkey), RAM based (PAUSE) and User based (EMIT etc) vectors.
    • new words: wdr (Watchdog reset), d> and d< (double cell compare).

  • 2.5.2007 release 2.0

    • internal restructure of targets.
    • new words: u> and u<.
    • bugfixing interrupts.
    • new word: log2 logarithm to base 2, or the number of the highest 1 bit.
    • fixed wrong addresses for usart-io (esp. butterfly)

  • 25.4.2007 release 1.9

    • renamed dict_low.asm to dict_minimal.asm.
    • new word parse ( c -- addr len) parses source for char delimited strings.
    • new word sleep ( -- ) puts the controller into (previously defined) sleep mode.
    • new words s" ( -- addr len) parses TIB for " character and compiles it into flash, s, ( addr len -- ) does the real copying of the string into flash at here together with the invisible word (sliteral) (-- flash-addr len).
    • bugfix: f_cpu had wrong word order. Use swap as a temporary work around.
    • re-wrote initialisation of usart0 ( baud -- ) to forth code. Startup speed is taken from (eeprom) VALUE baud0.

  • 10.4.2007 release 1.8

    • interrupt handling redesigned. Now every interrupt (except those for usart0) can be used. intcounter is gone. New words are int@, int! and #int.
    • double and mixed cell arithmetics.
    • bugfix: proper initialization of data stack pointer. Thanks to Maciej Witkowiak.
    • move TOS into register pair.

  • 3.4.2007 release 1.7

    • new word: f_cpu sets a double cell value with the cpu clock rate.
    • HLD is now at PAD to save RAM.
    • pad did return some compile-time stochastic value
    • lots of internal changes.
    • optional dictionary: d-, d+, s>d and d>s.

  • 25.3.2007 release 1.6

    • split blocks/ans.frt into pieces.
    • sign no longer inserts a space for non-negative values.
    • new word: /key. It is vectorized via '/key and gets called by accept to signal the sender to stop transmission. See blocks/xonxoff.frt for example usage.
    • replaces up with up@ and up!.
    • new word: j ( -- n).
    • new word: ?execute ( xt|0 -- ) if non-zero execute the XT.
    • The Atmega644 works fine :=) but needs the Atmel assembler (see FAQ) :=(
    • Bugfix: +! did a +.
    • Bugfix: too many spaces in . (dot).
    • give user variables rp and sp a name.

  • 14.3.2007 release 1.5

    • changed: itype and (new) icount refactored by Michael Kalus. These words now have similiar stack effects as there RAM counterparts.
    • changed: . now operates on signed values.
    • new word: u/mod is basically the former /mod.
    • new word: u. to display unsigned values.
    • fixed bug in /mod for values less -FF (hex).
    • create left the address of the XT insted of the PFA. Fixed.
    • deleted word: idump. It is now in the file blocks/misc.frt.
    • new word: :noname ( -- xt) creates headerless entry in the dictionary.
    • new word: cold as main entry point. It executes the turnkey action. abort & co do not trigger the turnkey action.

  • 5.3.2007 release 1.4

    • pad is now in the unsed (according to heap) ram. That may help word to store longer strings.
    • new word: unused ( -- n) gives the number of unused flash cells in the dictionary.
    • /mod (and / and mod) now honor signed numbers, division is symmetric.
    • new word: abort"
    • quit now aborts on every catched exception.
    • quit no longer prints anything, ver is now a turnkey action.
    • new optional dictionary, included at compiletime. Contains now case & Co and some d- words for double cell arithmetics.
    • 24.2.2007 release 1.3

      • bug: digit did not work properly
      • bug: <: equal is not less
      • interrupts are processed faster
      • Interrupt counter are now only 1 byte long (access with c@)
      • change: allot works now for ram not for flash
      • added/corrected stack comments
      • bug: create leaves flash address insted of first cell content
      • change: .s nicer for empty stack
      • internal: i! internally completly turns off interrupts
      • bug: abort now works again, error was in quit
      • bug: while and repeat changed stack effects
      • bug: r@ now works correctly
      • new word: immediate
      • removed words: forget, postpone (these and many more are now in the blocks/ans.frt library)
      • bug: if ' (tick) does not find the word, it now throws the exception -13
      Many thanks to Ulrich Hoffmann for providing feedback and corrections!

    • 3.2.2007 release 1.2

      • anyone missed emit??.
      • increased user area to 24 bytes (12 cells). Fixed a overlap between handler and emit ff.
      • AVR Butterfly works (again). Many thanks to the German FIG for providing me with one.
      • internal changes for multitarget development (for the AREXX asuro minirobot).

    • 20.1.2007 release 1.1

      • emit, key and key? are now vectored via user based variables.
      • forget frees most of the flash space too
      • internal go back for i! to previous code
      • Code for Atmega8 was broken due to nrww flash overflow (found by Milan Horkel)
      • Bugfix: backspace key in accept now stops at beginning of line (found by Milan Horkel)

    • 4.1.2007 release 1.0

      • new immediate word: [']
      • new word user defines user variables
      • new controller: atmega169 (atmel butterfly)
      • renamed eheap to edp.

    • 17.12.2006 release 0.9

      • interrupts in high level forth colon words (INT0 and INT1 for now).
      • new word: noop a colon word for doing nothing.
      • number respects minus sign
      • changed turnkey into 'turnkey. The "turn-off" value is now 0 (zero)
      • new words: pause and 'pause. pause will execute the XT stored in 'pause (a RAM cell) when non zero
      • handler (used by cactch and throw) is a USER variable.

    • 7.12.2006 release 0.8

      • new words: create, does>, up, 0
      • Support for user variable, turned base, rp0 and sp0 into user variables
      • words like (do) which should not by called by user are now invisible to save nrww flash space
      • bugfix for negative increment for +loop.

    • 24.11.2006 release 0.7

      • new word: turnkey: executed whenever quit starts. See HOWTO
      • numbers may contain lower case characters (if base permits)
      • bugfixing case & co.
      • number emits -13 if an invalid character is found
      • renamed vheader to (create)
      • abort re-initializes both stacks
      • made backslash \ immediate

    • 20.11.2006 release 0.6

      • backspace now works in accept
      • depth based on sp0/sp@
      • "unused" control characters are treated as spaces
      • bugfixes for (loop) and (+lopp).
      • New words: 1ms busy waits 1 millisecond

    • 13.11.2006 release 0.5

      • definition files for varios atmega types
      • core wordlist should be complete
      • internal cleanups and bugfixes

    • 5.11.2006 release 0.4

      • start using catch/throw
      • Atmega8 works fine
      • few new words (case, comments)
      • nicer prompt

    • 31.10.2006 release 0.3

      • New website
      • Atmega16 works fine
      • Bugfixing, true flag always 0xffff
    • 27.10.2006 release 0.2

      • Compiler works
      • Many new words

    • 16.10.2006 release 0.1

      • first public release
      • interpreter over serial terminal