Solo Forth development history in 2016-12

Description of the page content

Solo Forth development history in 2016-12.



Fix bright!.


Load see preserving the word lists config.

Rewrite in Z80 and rename paper> and >paper. Rename paper> to attr>paper. Rename >paper to paper>attr.

Rename ~~show to ~~info.

Increase return stack; add ?rstack.

Compact the return stack module.

Fix needing of retry.

Improve typing of non-printable ASCII chars. New word >printable-ascii-char, a factor of type-ascii and fartype-ascii. New faster and specific check printable-ascii-char?.


Add cenum.

Add #>kk; document some keyboard words.

Define default /kk; improve keyboard module.

Fix needing of #>kk.

Fix conditional definition of /kk.

Add ~~app-info. This makes ~~ easier to extend and customize by the application.

Add +perform.


Remove mutual need of n>r, nr>; complete doc.

Add -order, +order.

Add -1|1; document randomize, randomize0.

Simplify documentation of within, between.

Add draft of assembler labels.

Rename ?jr-range and ?page to ?rel. The word is common to both assemblers but had different names.

Prepare assembler labels for future development.

Improve documentation of :noname.


Add switch, >cell-string.

Rename module of switch:.

Rename and complete the >bstring words. Rename >cell-string to >bstring. Add c>bstring, 2>bstring.

Improve switch: with char and 2-cell clauses.

Rename the internal module words to extend it. Old: internal, external, module. New: internal, end-internal, unlink-internal.

Fix privatize.

Add hide-internal.

Add VFX-like module. An implementation of VFX's module by Ulrich Hoffmann in Forth-94.

Simplify end-module and export.

Improve module and expose-module.

Improve export with alias.

Improve doc of module; remove expose-module.

Add SwiftForth's package.

Rename and improve the now called transient tool.


Improve transient: reserve headers space.

Fix u.r.

Fix /hold, floored environmental query strings.

Rename the environment? module.

Fix needing of ud..

Complete environmental queries; improve misc doc.

Rename "common" and "misc" module filenames. The change makes those modules more visible; besides, by default they are listed before their related modules.

Rename exchange to !exchange.

Update Makefile to the new module filenames.

Add c!exchange, new exchange, cexchange.


Fix needing of -1|1 and randomize.


Improve doc, names, need of associative-list.


Add sconstants.

Improve needing of some color words. Make color@, color!, color-mask@, color-mask!, color and 2color individually accesible to need.


Add /sconstants and u>str.


Improve documentation of escaped-wordlist.

Add uppers1; improve need of #chars, #spaces.


Fix name of blocks indexer common module.

Fix requirement of 2avariable.


Fix grep expression in

Fix and improve documentation of variable arrays.

Fix version build number.

Fix and improve several issues in both assemblers. Main changes, in the z80-asm, assembler: Fix jp>jr to manage also unconditional jumps; fix relse, rwhile and runtil.

Rewrite ms and add draft variants of pause.

Remove (wait) from the kernel.

Remove old draft variants of ms and pause.

Rename jpnext, jppushhl: jpnext,, jppushhl,. The new names are consistent with the rest of similar words also defined in the kernel: jp, and call,. Beside, z80-asm,, which uses the comma suffix convention, will be the only assembler in a future version.

Improve doc of thiscase and update old example.


Add make-block-characters.

Add block-characters and 0udg>.

Add odd?; rewrite 8* in Z80.


Update To-Do; improve some comments.

Add set-font, get-font, set-udg, get-udg, rom-font.

Make escaped chars configurable in s\" and .\". This improvement makes it possible to implement alternative escaped chars in BASin notation.

Use "esc-standard" as prefix; remove internal. The name esc-standard-chars-wordlist is more consistent than standard-esc-chars-wordlist with analogous word lists for escaped graphic chars.

internal has no advantage, because the words marked as internal can never be found anyway during the char-by-char parsing; beside, they could be useful for application-level addons to the escaped chars set to the escaped chars set.

Add even?.

Improve and document escaped strings words.

Support escaped graphic chars (BASin notation).

Rename "-characters" to "-chars" in graphic words. To be consistent with the notation used in the escaped string modules.


Add case-sensitive, lower, lowers... First version of a case-sensitive dictionary mode, in order to make the escaped chars case-sensitive, and make Gforth case-sensitive word lists possible.

Other words added: be-case-sensitive, be-case-insensitive, farlowers.

Store definition names in lowercase. This makes more sense, because this way words can be typed and interpreted in lowercase, which is the default in the sources, also when the case-sensitive mode is activated.

Fix needing of name<name with old system bank.

Fix missed uppercase names.

Use be-case-sensitive to define escaped UDG. Escaped UDG chars are not fully compatible with escaped standard chars yet. Also the dictionary searches done by the string parsing must be done in case-sensitive mode.

Use only case-sensitive to change the case mode.

Save one byte in find-name-from.

Add udg-chars to define the default UDG 'A'..'U'.

Improve documentation of search order words.

Add case-sensitive escaped strings. This improvement makes the escaped strings Forth-2012 compliant, and compatible with the ZX Spectrum escaped UDG notation (uppercase '\A'..'\U').

Fix syntax highlighting of strings.

Implement escaped strings search order. This method is analogous to the main search order, and lets the application configure the chars escaped by s\", .\" and other words.


Fix needing +field-opt-0 and +field-opt-0124.

Doc leave; improve/fix minor doc and comments.

Improve ~~ with clearer output.

Add window, first working version. A basic implementation of text windows.

Finish the window module; add window-test.

Add constants for common control keys.

Update to-do list about window.


Rename rdraw, adraw to rdraw176, adraw176. These implementations use only 176 pixel rows of the screen, like Sinclair BASIC. They can be useful for conversions from BASIC, beside the full screen implementations under development, but better with new names.

Add plot176, improve doc of pixel and line words.

Convert rdraw176 to the z80-asm, assembler.

Fix jp>jr.

Convert inkey, get-inkey to z80-asm,. z80-asm, is smaller and clearer, it will be the only assembler.

Move kernel aliases after the words they point to. This change makes the output of see clearer in certain cases, because >name searches the dictionary from oldest to newest definition. Anyway, this is the order aliases are defined outside the kernel.

Rename from to need-from and improve its doc. This word is seldom needed. from is a generic, more useful name in application context.

Improve needing of warn behaviors. warn.throw, warn.message, and warn-throw.

Improve needing of control chars printing words. 'cr', 'tab', 'bs', crs, tab, tabs, backspace, backspaces.

Fix names of im1, and im2,; review assemblers.

Make inverse-cond and jp>jr z80-asm -safe. There were problems when z80-asm was loaded before z80-asm,, because z80-asm has words homonymous with Forth words.

Fix: Make cold reset the behaviour of warn.


Fix code typo in fast-(pixel-addr).

Start rdraw, review transient.

Change the assembler of pixel graphic words. Convert all of them from the deprecated z80-asm to z80-asm,.

Try and improve assembler local labels.

Fix rstep.

Write first version of rdraw, not working yet.

Improve doc of leave and ?leave.

Rename wait-for-key to discard-key.


Add more words to plot and draw in 255x176 mode. The graphic commands of Sinclair BASIC work in 255x176 instead of 255x191. Therefore words that use the same resolution and origin are useful to adapt BASIC programs.

New words: (pixel-addr176), pixel-addr176, set-pixel176, reset-pixel176, toggle-pixel176, test-pixel176, set-save-pixel176, aline176.

Improve doc of the switch: control structure.

Fix escaped UDG "\C".

Add fyi.

Update Vim syntax file.


Add ifelse operator.


Modify transient; add transient-test. The debugging is not fully finished yet.

Convert names to lowercase in DOS kernel modules.


Compact the library.

Improve du<.

Improve .depth: 4 bytes smaller.

Fix thru-index-reneeded. Forgot to update it after a rename.

Improve the description of the Forth tools used by GNU make to build the Forth system.

Compact the library. It didn't fit the 636 KiB available in the TR-DOS disk images. Many blocks have been saved by reorganizing the source code of some modules.


Reserve for TR-DOS only the minimum memory needed.

Update documentation.

Release version 0.12.0.


Newer changes will not be included here. The Git repository in GitHub can be consulted instead. Beside, the main changes of every version are listed in a file included in every release.