- Version 0.14.0
- Version 0.14.0-rc.124
- Version 0.14.0-pre.209
- Version 0.13.0
- Version 0.12.0
- Version 0.11.0
- Version 0.10.0
- Version 0.9.0
- Version 0.8.0
- Version 0.7.0
- Version 0.6.0
- Version 0.5.0
- Version 0.4.1
- Version 0.4.0
- Version 0.3.2
- Version 0.3.1
- Version 0.3.0
- Version 0.2.0
- Version 0.1.0
- Version 0.0.0
To be released.
-
Fix details of the documentation.
-
Fix requirement of the block editors.
-
Fix needing of
r#
andtop
.
-
Deactivate assembler instructions
stpx,
andftpx,
, which need to be fixed. -
Remove
transfer-bytes
from +3DOS. -
Move TR-DOS
.drives
,.step-rates
and.fda
to the library. -
Remove from the glossary the unfinished
use-fly-index
.
- Title
-
Alonso Quijano prueba la celada (Alonso Quixano tries the helmet).
- Illustrator
-
Pahissa Laporta, Jaime (1846-1928).
- Engraver
-
Unknown.
- Book
-
El ingenioso hidalgo don Quijote de La Mancha (The Ingenious Gentleman Don Quixote of La Mancha) (1605), by Miguel de Cervantes (1547-1616).
- Edition
-
1897, Barcelona, El ingenioso hidalgo don Quijote de la Mancha (Centro Editorial Artístico de Miguel Seguí). Volume 1, chapter 1, page 21.
The ZX Spectrum image was created from image 5796 of the QBI image bank.
Released on 2020-11-23.
This is a release canditate of 0.14.0. It includes a manual with a full glossary, in EPUB, PDF and HTML.
-
Add frames converters:
frames/second
,frames>seconds
,frames>cs
,frames>ms
. -
Add
gigatype-style
to improvegigatype
. Move thegigatype
style from the stack togigatype-style
. This makes the usage simpler and compatible with the ordinarytype
. Update and improve documentation. -
Add "The ultimate Forth Benchmark". Adapted from https://theultimatebenchmark.org/.
-
Add
farfill
,farerase
. -
Add far-memory variants of
localized-string
. -
Add translation tools.
-
Add
mim-rng-px-bench
. -
Add
min>top
,max>top
,pair=
. -
Add toy
the-matrix
. -
Add TR-DOS
get-drive
. -
Add
?set-drive
. -
Add TR-DOS
3-block-drives
and4-block-drives
. The TR-DOS version of the library has to be split in two disks, because the disk size is only 640 KiB (636 KiB usable for blocks). These words will be helpful for using it. -
Add
str<>
. -
Add +3DOS
eof?
,get-user
andset-user
. -
Add
clocal
,2local
. -
Add +3DOS
flush-drive
. -
Add +3DOS
drive-unused
. -
Add G+DOS
tracks/disk
,tracks/cat
. -
Add +3DOS
write-line
andread-line
. -
Add
0leave
. -
Add +3DOS
write-byte
andread-byte
. -
Add
'lf'
. -
Add
emit-ascii
. -
Add
eol?
,newline
. -
Add +3DOS
file-size
. -
Add
os-prog
,os-unused
,?os-unused
,os-ramtop
,os-stkend
. -
Add
chan>
,chan>id
,stream>
,stream?
. -
Add
os-streams
,.os-strms
and.os-chans
. -
Add
dfca
andcurrent-channel
. -
Add G+DOS
((cat
. -
Add
array<
and2array<
. -
Add routines to save/restore the Forth IP in +3DOS. They will be needed to implement
write-file
and friends. -
Add +3DOS
bank-write-file
andwrite-file
. -
Factor +3DOS
default-1346
fromcold
. -
Factor
default-display
fromcold
. -
Add
no-exit
. -
Factor
d>str
fromd.r
. -
New words common to all display modes:
form>xy
,>form
,form
. -
Add
.2x1-udg
. -
Add
csprite
. -
Add
display>tape-file
andtape-file>display
. -
Add the 64-cpl fonts of the 64#4 driver.
-
Add
8+
and8-
They will be useful for writing new variants of UDG sprites. -
Add
emit-udga
. -
Add
#do
. -
Add +3DOS
acat
andwacat
. -
Add +3DOS
full-cat
flag. -
Add
home?
. -
Add
/first-name
. -
Add
i'
,j'', `k'
. -
Add
-keys
,new-key
,new-key-
. -
Add 2-cell variants of
ticks
(oldframes
). -
Add
elapsed
,delapsed
,timer
anddtimer
. -
Add
expired
anddexpired
. -
Add
n>str
. -
Add
?depth
. -
Add
cs-dup
,cs-mark
,cs-test
. -
Add
0repeat
. -
Add
coff
andc?
. -
Add
ms>ticks
. -
Add
>name/order
. -
Add
>oldest-name/order
. -
Add
>oldest-name
and>oldest-name/fast
. -
Add
empty-stack
, a useful factor of(abort)
. -
Add
c@1+
andc@1-
. -
Add
attr-wcls
,wcolor
. -
Add
x>gx
andy>gy
. -
Add
c@2+
andc@2-
. -
Add
andif
andorif
. -
Add
?c1-!
. -
Add
3*
. -
Add
manual-see
control tosee
. -
Add
,udg-block
,,udg-block-test
. -
Add
con
. -
Add assembler debug tools
<<
and>>
. -
Add
astack
. -
Add
inversely
. -
Add
key-graphics
,key-true-video
,key-inverse-video
,key-caps-lock
. -
Add
unpick
. -
Add
4dup
. -
Add
2-block-drives
. -
Add new tests.
-
Add +3DOS
read-file
andbank-read-file
. -
Add G+DOS
-uifa
and draftcreate-file
. -
Add G+DOS
bin
,r/o
,w/o
,r/w
. -
Add a G+DOS UFIA data structure. First step to implement file identifiers.
-
Add G+DOS
create-file
. -
Add assembler
ldar,
andldra,
. -
Add G+DOS
sectors-used
,sectors-used@
,drive-used
,drive-unused
,sectors/disk
,sectors/cat
,sectors>capacity
andmax-disk-capacity
. -
Add
/wordlist
,wordlist>last
. -
Add
dump-wordlists
,dump-wordlists>
,dump-wordlist
. -
Add
anew
.
-
Make control-flow-stack words compile-only.
-
Fix needing of
d0=
andd=
. -
Fix needing of
farcavariable
. -
Fix needing of
needing
. -
Rewrite/fix +3DOS
set-drive
&transfer-sector
. An important fix. Now +3DOS can use both drive units as block drives. Therefore2-block-drives
can be used. -
Fix needing of G+DOS
dfca
. -
Fix needing of
c?
; add2?
. -
Fix
eol?
. -
Fix +3DOS
reposition-file
. -
Fix +3DOS
file-position
. -
Fix
d2/
. -
Fix needing of
set-pixel
. -
Fix and finish +3DOS
wcat
. -
Fix +3DOS
.cat-entry
. -
Fix needing of
thens
. -
Fix
do-dos-open_
. -
Add
default-mode
&reset-default-mode
tocold
. This fixes an evident but subtle bug. -
Fix needing of
cs-roll
andcs-pick
. -
Fix and improve needing of
to
. -
Fix requirements of
cs-test
. -
Fix needing of
defer@
. -
Fix TR-DOS
read-system-track
. -
Fix
d2/
. -
Fix
c@1+
andc@1-
. -
Fix requirement of
>oldest-name
. -
Fix
?c1-!
. -
Fix/improve "kk" and other keyboard tools.
-
Fix port of key row Caps Shift-V.
-
Fix
key-delete
. -
Fix
unfit?
. -
Fix
}
in Hayes tester. -
Fix
marker
. -
Fix
blk-line
. -
Fix requirement of
2value
. -
Fix requirement of
[char]
. -
Fix
d2/
. -
Fix
m*/
. -
Fix
m+
. -
Fix requirement of
index
. -
Fix
catch
andthrow
: make them save and restore the source specification. -
Fix
marker
. -
Make
nest-source
save the contents ofinput-buffer
instead of the output ofsource
. The old behaviour didn’t seem to cause any problem, but anyway it wasn’t right. -
Fix
far-localized,
and make it accessible. -
Fix the error marker position in
where
. -
Fix one
sm/rem
test.
-
Improve documentation. Almost all kernel definitions, and their library variants, are documented. Now all Forth words mentioned in the manual outside the glossary are linked to their corresponding glossary entries.
-
Make the manuals more DOS-specific.
-
Homogenize description of ior notation.
-
Rewrite
d0=
in Z80. Much faster, and only two more bytes needed. -
Improve
bench.
to display seconds with hundrendths precision. -
Rename and document the ROM calculator commands. Now all calculator commands and friends have a "|" prefix. This makes the code clearer, makes search order changes unnecessary and makes a single glossary possible
-
Improve
quit
. Now the return is stack is emptied only once instead of in the loop, following the standard.terminal>source
was unnecessary, because it’s included inquery
. -
Improve needing of G+DOS directory descriptions.
-
Improve the
{if
control structure. -
Simplify
where
. -
Improve the width of table columns in the manual.
-
Improve
s,
andfars,
. -
Simplify
retry
. -
Improve
extend
andturnkey
. Still under development, though. -
Improve
in-block-header?
. -
Make G+DOS
get-drive
return an I/O result. It’s a fake value, but it makes the word compatible with +3DOS and TR-DOS. -
Rewrite
?
in Z80 and combine it with.
. This is faster and saves 4 bytes. -
Make
eol?
checknewline
. This is more versatile. -
Improve
open-ot-file
with?fam
,/w/o
,/r/o
. -
Make G+DOS
set-ot-file
choose an unused stream. -
Improve
.os-chans
. -
Improve the 128K sound editor.
-
Make
[needed]
optional. It’s almost useless. No need to load it with theneed
tool. -
Improve G+DOS
get-drive
. -
Rewrite G+DOS
back-from-dos-error_
with Z80 opcodes. -
Improve TR-DOS
cat
. -
Improve needing of
y/n?
module. -
Improve
next
; removepush_hlde
from the kernel. Thenext
code (the inner interpreter) has been moved afterexit
and copied afterdo_colon
. This reduces nesting time to 0.92. Jumps topush_hlde
, which was a secondary entry ofnext
, have been removed. Some benchmarks that use double-cell operations reduce its time to 0.99. These changes increase the size of the kernel by only 12 bytes. -
Rewrite
0.r
and0d.r
in Z80. Faster and smaller. 10 bytes are saved in total. -
Rewrite
cexchange
andc!exchange
in Z80. -
Improve
version
and.version
. One byte was too small for the prerelease counter. The improvements in.version
save 12 bytes. -
Update the Vim syntax highlighting.
-
Improve the text
window
implementation. -
Improve transition between 32/64 CPL display modes. Now the cursor position is preserved across
mode-32
,mode-32-iso
andmode-64o
. Beside,mode-32-font
andmode-32iso-font
preserve the fonts of their corresponding modes. -
Improve
mode-32iso
; addmode-32iso-output_
. -
Improve
ocr-chars
andocr-first
. -
Improve and extend the
window
module. It’s still in an early stage of development, with limited features, but it can be used for basic things and finally it’s documented. -
Update
lastblk
in(load)
instead ofload
. This is more useful, since(load)
is used byload
,continued
andload-program
. -
Improve
ltype
. -
Make
dticks>ms
andset-time
faster. -
Rewrite +3DOS
headed
in Z80. -
Use
mode-64-font
for both 64-cpl modes. -
Adapt to the library all 64-cpl fonts from disk 0.
-
Init far-memory config in
cold
. -
Make
cold
a code word with a high-level part. This change saves 47 bytes of data/code space, and makes the word more versatile for future improvements. -
Improve
doer
-make
. -
Move
/
to the library./
is not used in the kernel. This change saves 9 bytes of code/data space and 7 bytes of name space. -
Improve
[if]
and[else]
. -
Move
[defined]
and[undefined]
to the library. Also, simplify reducing their usage in the library. -
Make
push,
andpop,
accept registera
. This change makes the syntax ofpop,
andpush,
regular with all registers. -
Improve
(;code)
withlatestxt
. -
Remove
.system-time
and.system-date
. Not very useful. Beside, the names were almost longer than their definitions, which anyway are evident. -
Rewrite
?repeat
. Now its name is coherent with the rest of optional control-flow structures, included the new0repeat
. -
Rewrite
>name
and move it to the library. -
Make
;code
standard. Now the data field address of the redefined word is not placed on the stack but moved to register HL. -
Improve
does>
. -
Improve
default-stringer
. -
Make
.sinclair-stripes
and friends independent. -
Improve
see
to support non-colon words. But only directly, not recursively in colon words yet. -
Improve
udg-block
-
Rewrite run-time code of values in Z80.
-
Improve error checking in
(locate)
. -
Improve
g-emit-udg
withlast-font-char
. -
Restore default value of
#block-drives
incold
. -
Improve
xstack
. -
Make
hook,
andprt,
optional. -
Improve
defined?
. -
Make
lwidth
a byte variable -
Update stack notation "x y" to "col row" & "gx gy".
-
Make string checks of
[if] [else]
case-insensitive. -
Make it possible to load both block editors and switch between them.
-
Move
b/sector
to the library. -
Move
name>str
,name>strings
and.name
to the library. -
Move
depth
to the library. -
Move
+loop
to the library. -
Move
.unused
and.words
to the library. -
Move
2variable
to the library. -
Replace
r> drop
withrdrop
, except in benchmarks that would be affected. -
Make `
chars>string
,>bstring
and2>bstring
to use thestringer
instead ofpad
. -
Make +3DOS
cat-buffer
(used bycat
andacat
) use thestringer
instead ofpad
. -
Add a new
?stringer
to throw an error if a string is longer than the total capacity of thestringer
. The oldstringer
was renamed tofit-stringer
. -
Make
order,
,@order
,wordlists,
and@wordlists
independent frommarker
. -
Move
0exit
to the kernel; no data/code space needed, because of the space saved by using this word instead of0= ?exit
andif
. -
Make paren comments multiline in the Vim syntax file.
-
Make
do_create
anddo_variable
Z80 entries 8 T States faster, by moving them from thenoop
word to thenext
entry. -
The sources searcher searches also the document sources. It’s renamed to <tools/seek>.
-
Remove
get-default-bank
andset-default-bank
. -
Move
bank-start
and/bank
to the library. -
Rename
display
toterminal
. Following the standard, "display" is used in the documentation as a generic term, valid for both the terminal and the printer. -
Rename
print
toltype
. This word is a variant oftype
, likegigatype
and others. Beside, "print" is used for words related to the printer. -
Rename
load-app
toload-program
. -
Defer and factor
~~info
; remove~~app-info
. -
Move blocks speed test to benchmarks module.
-
Split TR-DOS library into two disks. This increases the maximum size of the library from 636 KiB (one TR-DOS disk, too small to fit the current library) to 719 KiB (one +3DOS disk).
-
Remove trailing closing paren from word names. This new convention is simpler. Beside it saves some bytes in name space and blocks.
-
Make
(located)
deferred; factorin-blk-header?
. Multiline block headers are activated by default, but the method fails when the block has no paren comment as header. -
Make
?locate
consume its argument. -
Remove +3DOS old
set-drive
&transfer-sector
. -
Make
newline>
a counted string; remove/newline
. -
Make
/tabulate
a byte variable. -
Move
fardump
andfarwdump
to <tool.dump.fs>. -
Rename
printable-ascii-char
tographic-ascii-char
. "graphic" is the standard notation for non-control characters. Old words affected:printable-ascii-char?
default-printable-ascii-char?
,>printable-ascii-char
. -
Rename
>kk
kk>kk
. -
Rename
keys
#kk
. -
Rename graphic "blocks" to "rectangles". "Rectangle" is a less confusing name, but it may be changed to "box", depending on the final word set, including words to draw line boxes in high resolution. Anyway, these words will be used as low-level procedures of the text windows.
-
Replace
mode-64
withmode-64o
. The code is identical (originally written by Andrew Owen), but now its source is integrated into the library. The name has changed because an improved variantmode-64s
(adapted from code written by Einar Saukas) is under development. -
Factor
load-program
into(load-program
. -
Replace "frames" names with "ticks". The OS variable used is called FRAMES, but
ticks
is the common name in Forth. All related words have been renamed. -
Rename
pause
tobasic-pause
.pause
is a common usage name in the Forth multitasker, which will be implemented. -
Move
cs-swap
to the kernel. -
Don’t make a +3DOS 180 KiB boot disk. Supporting only one disk format makes some things simpler on +3DOS.
-
Replace
random-range
withrandom-between
andrandom-within
. -
Rename
d/expired
tod/past?
. -
Replace
>name
with>oldest-name
insee
. -
Add suffix "-sound" to sound effects. Most names were too generic. The new names are clearer and prevent name clashes.
-
Remove
jppushhl,
. This word is useless, since it compilespush hl
andjp (ix)
. But thepushhl
constant is useful to make conditional exits in code words. -
Rename
ocr-charset
toocr-font
. -
Rename
1literal
toxliteral
,]1l
to]xl
,[1const]
to[xconst]
. The new names seem clearer, because an unknown cell is represented as "x" in the stack notation. -
Make "[(un)needed]" nonimmediate "(un)needing".
-
Move
blk-line
to the library. -
Move
>in/l
and→in/l
to the kernel.→in/l
is a factor of\
. -
Rename disk 2 to "programs".
-
Rename
astack
toestack
, and so the related words. -
Remove
?name-too-short
. It was used only once, and it was too specific to be useful. -
Remove the 5-second pause after displaying the background the first time.
-
Deactivate the documentation about G+DOS
file-dir#
andfile-dirdesc
, which don’t work fine yet because of a limitation in(file-status
. -
Remove
c>bstring
(improved to use thestringer
, it did the same than the currentchar>string
). -
Rename
?stringer
tofit-stringer
. -
Move
?
to the library. -
Rename
latest-wordlist
tolast-wordlist
. -
Delete <memory.bank.fs> and move its contents to <memory.far.fs>.
-
Rename
warn.throw
toerror-code-warn
,warn-throw
toerror-warn
andwarn.message
tomessage-warn
.
- Title
-
Alonso Quijano prueba la celada (Alonso Quixano tries the helmet).
- Illustrator
-
Pahissa Laporta, Jaime (1846-1928).
- Engraver
-
Unknown.
- Book
-
El ingenioso hidalgo don Quijote de La Mancha (The Ingenious Gentleman Don Quixote of La Mancha) (1605), by Miguel de Cervantes (1547-1616).
- Edition
-
1897, Barcelona, El ingenioso hidalgo don Quijote de la Mancha (Centro Editorial Artístico de Miguel Seguí). Volume 1, chapter 1, page 21.
The ZX Spectrum image was created from image 5796 of the QBI image bank.
Released on 2017-04-27.
Prerelease of 0.14.0 for the 18th annual European Vintage Computer Festival (April 29th and May 1st 2017, Munich).
This release is the first one that includes a manual and a glossary, in HTML. The documentation of the sources, from which the glossary is built, has been increased and improved a lot.
-
Add
set-block-drives
and related words. -
Add
get-block-drives
. -
Add G+DOS
ufia1
andufia2
. -
Add G+DOS
file-status
. -
Add G+DOS and TR-DOS
file-exists?
(removefile?
). -
Add G+DOS file metadata words.
-
Add TR-DOS file metadata words.
-
Add G+DOS and TR-DOS
find-file
. -
Add
-do
. -
Support the memory paging of Scorpion ZS 256.
-
Build kernels and boot disks for Scorpion SZ 256, Pentagon 512 and Pentagon 1024.
-
Add
banks
. -
Add
type-udg
. -
Add
]1l
and[1const]
. -
Add
ram
. -
Add
ldd,
andldi,
to the assembler. -
Add
outlet-autochars
. -
Add
set-mixer
andget-mixer
. -
Add words to support the ZX7 decompressor.
-
Add +3DOS
rename-file
. -
Add +3DOS
get-drive
. -
Finish +3DOS
transfer-sector
,transfer-block
. -
Add G+DOS
>ufia1
,>ufia2
,>ufiax
. -
Add G+DOS
rename-file
,back-from-dos-error_
. -
Add TR-DOS
>file
andfile>
. -
Add TR-DOS
delete-file
. -
Add +3DOS
delete-file
. -
Add TR-DOS
dos-hl_
entry. -
Add TR-DOS
cat
,undelete-file
and related words. -
Add TR-DOS
rename-file
,get-filename
. -
Add TR-DOS
filename>filetype
. -
Add
/bank
. -
Add
x>gx
,y>gy
,gx>x
,gy>y
. -
Remove
begin-module
. -
Add
seclusion
andisolate
. -
Remove the
save-display
tool. -
Add
xy>r
,r>xy
. -
Add
udg-block
,/udg
,parse-name-thru
,udg-group
. -
Remove
udg-row[
,udg[
. -
Add assembly
sll,
andsllx,
. -
Add
last-tape-header
and its fields. -
Add
l!
, fix assembler’saagain
. -
Add
gigatype
. -
Add
orthodraw
andortholine
. -
Add
xy>gxy
andxy>gxy176
. -
Add
menu
. -
Add deferred
sqrt
to support its two variants. -
Add
cval
andctoval
. -
Add
cvalue
. -
Add
gigatype-title
. -
Add
default-stringer
, needed bycold
. -
Add
mode32iso-emit
. -
Add
mode-32iso
.
-
Fix loading of
endm
. -
Fix TR-DOS
cat
(then rename itacat
),-filename
andfile-status
. -
Fix
relse
andaelse
. -
Fix graphic block character 128.
-
Fix
crnd
. -
Fix +3DOS
set-drive
. -
Configure the memory banks for +3DOS.
-
Fix G+DOS
cat
andacat
. -
Clear previous error at
dos.c
TR-DOS entry. -
Fix prerequisites to build the BASIC loaders.
-
Fix needing of
/name
andfirst-name
. -
Fix
?rel
. -
Fix
ascii-char?
andprintable-ascii-char?
. -
Fix
execute-hl
. -
Fix init of
last-font-char
. -
Fix needing of
[char]
.
-
Rewrite
read-mode
andwrite-mode
in Z80. -
Improve: Use
cconstant
for G+DOS constants. -
Simplify the loading of
macro
. -
Fix and complete a G+DOS paging test.
-
Improve needing of G+DOS hook codes.
-
Make G+DOS
set-drive
return an error result. -
Make G+DOS
transfer-sector
use the current drive. -
Improve documentation of the G+DOS module.
-
Make needing of tape read/write words independent.
-
Improve all Plus D memory fetch/store words.
-
Improve G+DOS
file>
. -
Make
cold
set the first drive as current. -
Improve the conversion of TR-DOS error results.
-
Use
cconstant
in the assembler. -
Improve
get-order
. -
Make words that init the
need
tool optional. -
Make
unresolved
optional and?rel
independent. -
Improve the scripts to search the source files.
-
Improve/Fix paging on 128-KiB models.
-
Simplify the usage of DOS-selection kernel symbols.
-
Improve
.unused
. -
Improve
emit-udg
. -
Improve
@p
and!p
. -
Add a Vim filetype plugin.
-
Improve 128k sound words.
-
Start faster version of
pixel-attr-addr
. -
Simplify TR-DOS
sector-id
. -
Improve +3DOS calls.
-
Improve the
set-block-drives
tool. -
Add Makefile rule to build only 128k TR-DOS disks.
-
Improve/fix
list
with a check. -
Rename/change tape words after disk equivalents.
-
Improve G+DOS
cat
. -
Improve +3DOS
close-file
. -
Set the lowest
origin
for TR-DOScat
. -
Improve the way TR-DOS calls return an error code.
-
Make assembler absolute control structures optional.
-
Halve the
stringer
and rename its main words. -
Rewrite G+DOS
rename-file
in Z80 opcodes. -
Improve the
~~
debug tool. -
Support
(abort")
insee
. -
Improve
case
; remove all its alternative codings. -
Improve
local
,arguments
andanon
. -
Rewrite the implemetation of assembler labels.
-
Make
cold
set the default action ofinit-asm
. -
Improve
environment?
. -
Make
/hold
a constant. -
Improve
to
and remove the non-standard version. -
Rewrite
call-xt
with Z80 opcodes. -
Improve/fix needing of some memory and time words.
-
Convert
mode32-max-char
tolast-font-char
. -
Improve
mode32-emit
. -
Rename display modes words and modules consistently.
-
Rename the DOS common module.
-
Reorganize and rename the disk images.
-
Change G+DOS notation "<file" to "file>".
-
Remove
file-as-is>
. -
Replace the
data:
set withdata
andend-data
. -
Move
do
to the library. -
Move
?(
andstr=
to the kernel. -
Rename all "csb" words to "stringer".
-
Change "hp" notation to "np".
-
Make G+DOS per-sector border color be the default attribute.
-
Change filename extension of library files to "fs".
-
Move
get-font
androm-font
to the fonts module. -
Change naming convention of Z80-routines constants.
-
Don’t change the border during G+DOS disk access.
-
Rename G+DOS "plusd-in/out" words to "dos-in/out".
-
Move +3DOS
close-file
to the library. -
Move +3DOS
file-position
andreposition-file
to the library. -
Rename factors of
file-dir#
andfile-status
. -
Add mode debugging code to
(located)
. -
Rename <bin/sys/> to <bin/dos/>.
-
Change "rec" to "sector(s)"; "blk" to "block(s)".
-
Rename and factor
sector-id
. -
Factor
create c,
to(c
in the assembler. -
Rename the graphic address conversion words.
-
Rename
>defer
to>action
. -
Rename screen filter words and module.
-
Rename and reorganize printing/display modules.
-
Move
mode-32iso-emit
to the library. -
Prepare the two implementations of
allocate
. -
Review and update the sample games.
-
Reorganize/improve/update benchmarks.
- Title
-
Alonso Quijano prueba la celada (Alonso Quixano tries the helmet).
- Illustrator
-
Pahissa Laporta, Jaime (1846-1928).
- Engraver
-
Unknown.
- Book
-
El ingenioso hidalgo don Quijote de La Mancha (The Ingenious Gentleman Don Quixote of La Mancha) (1605), by Miguel de Cervantes (1547-1616).
- Edition
-
1897, Barcelona, El ingenioso hidalgo don Quijote de la Mancha (Centro Editorial Artístico de Miguel Seguí). Volume 1, chapter 1, page 21.
The ZX Spectrum image was created from image 5796 of the QBI image bank.
Released on 2017-02-07.
Another version that includes more new features, bug fixes, improvements and changes than planned, having being heavily tested during the development of two game projects.
Some things are worth to be commented apart:
-
Only one assembler. The transition from the old assembler to the new one has been completed.
-
Full rewrite of the color management: the temporary attribute of the OS is manipulated directly. This method is much faster and more compact. Alternative words are provided to use the BASIC-like method (i.e., control characters).
-
Deep modification of the UDG management to use only the character range 0..255. Now the first UDG character is always character 0, in any context (so far, it could be 0 or 128, depending on the word used). Now the UDG code range of
emit
is coherent, and its default behaviour can be configured (by choosing the first character it will consider a UDG, instead of printing it through the ROM routine) Eventually this will be improved further in order to support 8-bit character sets. -
Improved support to store data in far memory.
-
Finally,
circle
is included, and a very fast one. -
Improved support to use
bleep
, and also to convert parameters of BASIC’sBEEP
. -
New standard tools to manipulate strings:
replaces
,substitute
andunescape
. -
On TR-DOS, the library can be used on any disk. This makes the system actually usable on this DOS, and makes it possible to improve its support.
-
Add
link>wid
. -
Add
>true
,2>true
,>false
,2>false
. -
Add
(cursor-addr)
andcursor-addr
. -
Add alternative
cursor-addr
and(cursor-addr)
. -
Add basic words to store and compile strings in far memory:
far,
,fars,
,farsconstant
,farsconstants,
,far,"
,/farsconstants
andfarsconstants-does>
. -
Add variants of the far-memory string arrays that return the strings in the circular string buffer:
save-farstring
,far>sconstants
,/far>sconstants
. -
Add
dot-quote-bench
, to compare printing one single char withemit
or."
. -
Add
-1..1
. -
Add
view
. -
Add
?seconds
. -
Add
faravariable
,far2avariable
,farcavariable
. -
Add
name>str
, a factor ofname>string
. -
Add
name>name
, an alternative>name
and>name-bench
. The current Z80 version of>name
is not needed in the kernel. An alternative version in Forth is being tested. -
Add
#words
. -
Add
/counted-string
constant. -
Add
replaces
. -
Add
substitute
andunescape
. -
Add
xt-replaces
. -
Add
1/string
. A faster alternative for the low-level idiom1 /string
. Beside, it saves six bytes in the kernel. -
Add
g+dos
,tr-dos
and+3dos
. -
Add
beep
,dhz>bleep
,middle-octave
,/octave
,octave-changer
,beep>dhz
,beep
, and a newbeep>bleep
. The support of Sinclar BASIC’sBEEP
is complete. The conversion of parameters frombeep
tobleep
is fully factored and reusable. -
Add
?shift
. -
Add
u.s
. -
Add
inverse-on
andinverse-off
. -
Add
overprint-on
andoverprint-off
. -
Add
.words
. -
Add
mask+attr!
andmask+attr@
. -
Add
circle
. -
Add
noop-routine
. A useful counterpart ofnoop
, needed by the new implementation of a configurablecircle
. -
Add
blackout
. -
Add
attr-cls
. A useful factor ofcls
-
Add
]cl
and]1l
. -
Add
contrast
. -
Add
attr>ink
. -
Add
default-bank-routine
ande-bank-routine
. -
Add
lower-routine
. -
Add constants for attribute masks:
bright-mask
,unbright-mask
,flash-mask
,unflash-mask
,ink-mask
,unink-mask
,paper-mask
,unpaper-mask
. -
Add words to manipulate the graphic coordinates:
g-xy
,g-x
,g-y
,g-at-xy
,g-at-x
,g-at-y
,g-home
. -
Add
far>sconstant
andfarsconstants>
. -
Add
os-sp
. -
Add
g-type
,g-emit
,g-cr
, etc. (They were almost finished but not tested). -
Add
mode32-max-char
. -
Add TR-DOS
set-drive
and related code. Finally, the library can be used on any TR-DOS disk drive.
-
Fix storage of unresolved assembler references.
-
Fix
runtil
,auntil
andragain
. -
Fix sound effects
laser-gun
,ambulance
andwhite-noise
. -
Fix
scroll-1px-up
. -
Fix
wordlists
. -
Fix erasing of
esc-context
. -
Fix loading of
see
. -
Fix
find-name-from
. A very subtle bug, first detected on 2016-12-06: Whenhp
crossed the 16-KiB boundary, sometimes a previous word was not found. Finally, the error condition has been found out: a previous word of the same length than the latest one is not found after crossing the 16-KiB boundary… The reason was the difference between the actual nt and its converted version in paged memory, which was used for restoring. -
Fix
fartype
. -
Make
s\"
and.\"
use standard escapes by default. -
Add
default-font
forcold
.cold
didn’t set the default font. That was a subtle bug. In order to reuse code,set-font
has been moved from the library to the kernel, but it has been rewritten is Z80 to save some bytes. -
Fix and improve
ocr
. -
Fix
last-column
andlast-row
. -
Fix needing of
??
. -
Fix needing of
16hex.
. -
Fix
error>ordinal
, which was not updated. -
Fix and update
fyi
. -
Fix
fzx-emit
. -
Rename
beep>bleep
tohz>bleep
. The word does not convert the parameters of BASIC’sbeep
, but hertzs. -
Fix requirement of
printable-ascii-char?
. -
Fix and improve
where
andlist-lines
. -
Fix requirements of
xdrop
. -
Fix
parse-esc-string
. -
Fix
(pixel-scroll-up
. -
Fix needing of G+DOS
set-drive
. -
Fix loading of the Pong game.
-
Write
attr
,attr-addr
, and(attr-addr)
in Z80 opcodes. No need to use the assembler for these small words. -
Remove the old assembler (
z80-asm
). Update the new one (z80-asm,
), move theassembler
vocabulary to the library, in order to useneed assembler
to load the new assembler when needed. Convert all words to the new assembler. -
Rewrite
ndrop
and2ndrop
with Z80 opcodes. -
Improve words to page in and page out the Plus D:
plusd-in
,plusd-out
,plusd-in,
,plusd-out,
. -
Improve
default-bank
. -
Improve loading of
see-xt
andsee-body-from
. -
Improve
find-name-from
: 3 bytes less, 5% faster. -
Improve
create
(2 bytes less). -
Improve the word-lists interface. More coherent and less cryptic names and functions: Remove
link>wid
; removewid>name
; rename(wid>name
towordlist>name
; renamewid>link
towordlist>link
; rename.wid
to.wordlist
; renamewid>vocabulary
towordlist>vocabulary
. addwordlist-name@
andwordlist-name!
; renamewid-of
towordlist-of
; renamenamed-wid
tolatest>wordlist
-
Improve
papery
,brighty
,flashy
. -
Improve
permcolor
. -
Rename
pause
to?frames
, anddo-pause
toframes
. The name "pause" was taken from BASIC but the new names are clearer, and consistent withms
andseconds
. Add a newpause
after Sinclair BASIC. Just a convenience to adapt BASIC programs. -
Improve
see
: type strings between quotes. This is clearer when they have leading or trailing spaces. -
Improve needing of
columns
androws
. -
Improve
2avariable
. -
Improve
?repeat
. -
Improve needing of words to print numbers in radix.
-
Improve needing of control flow stack words.
-
Change the behaviour of
window
andset-window
. Now they are more versatile. -
Document how data in headers space affect
>name
. -
Replace
xdepth.
with.depth
;rename.x
to.xs
. -
Rewrite
color!
andcolor-mask!
in Z80. -
Rewrite
set-udg
,get-udg
andget-font
in Z80. -
Improve needing of 128K sound words.
-
Restore default behaviour of
.s
..s
was provisionaly modified some time ago to print unsigned numbers. Nowu.s
does the job. Both words are in the kernel only during the development. -
Improve needing symmetric/floored-division operators.
-
Rename words that store/fetch sys color attributes. Rename "color" prefix to "attr", "permcolor" prefix to "perm-attr".
-
Rewrite
perm-attr!
andperm-attr-mask!
in Z80. -
Rewrite
attr@
andattr-mask@
in Z80. -
Rewrite
perm-attr@
andperm-attr-mask@
in Z80. -
Make all attribute words accessible to
need
. -
Improve the implementation of
xstack
. Renameset-xstack
toxstack
. Makeallot-xstack
andallocate-xstack
more versatile: they don’t parse a name anymore, but simply return the address of the new stack. Removexp@
,xp!
andxp+!
. Fixxfree
. Improve and complete documentation of all words. Make all words individually accessible toneed
. -
Rewrite
odd?
andeven?
in Z80. -
Rename
paper!
/paper@
and family to "set-/get-". The new names are more logical, because the values are not stored or fetched verbatim, but as bits of the temporary attribute. Beside, the new naming convention can be generalized and used also with the printing modes (inverse
andoverprint
). Rewriteset-paper
andset-ink
in Z80. -
Rename/modify
paper
and family topaper.
, etc. These names make clear what these words do. Beside, they don’t change the permanent attribute any more. Movepaper.
,ink.
,bright.
andflash.
to the library. Improvebright.
andflash.
to accept a flag (so far they checked only bit 0 of the parameter; nowe any non-zero value turns them on, what is the usual behaviour in Forth) and color 8 (transparent). -
Make
cls
use the temporary attribute. This behaviour is more logical and practical because the permanent attribute is not modified by other words any more. -
Add decimal prefix to system variables addresses. This avoids problems.
-
Improve needing of color constants.
-
Rename the far-memory routines constants. A clearer convention is used for constants that return addresses of kernel routines.
-
Update needing of
binary
. -
Rename and improve the scroll and pan words.
-
Rewrite
spaces
in Z80. -
Rename the variants of
type
that print on fields. Renametype-left
,type-right
andtype-center
totype-left-field
,type-right-field
andtype-center-field
, because they erase the field with padding spaces, and there will be a parallel set of words that don’t. Improvetype-center-field
andtype-right-field
. -
Improve
mode32-emit
to be configurable. -
Rewrite
bounds
in Z80. -
Convert all UDG words to the 0-index-only convention. All "0udg" words have been renamed after their "udg" counterparts, which have been removed. Other words have become useless too and have been removed.
-
Improve
udg>
,ocr-chars
andocr-first
. Nowocr-chars
andocr-first
are character variables. No need for a whole cell in this case. -
Unify DOS symbols, notation and layout. Especially TR-DOS and +3DOS have some analogous routines, that have been named and arranged the same way.
-
Rename
test-pixel
toget-pixel
; also in mode 176. -
Remove the old "system bank" code. The far-memory system made it unnecessary.
-
Convert
voc-link
tolatest-wordlist
. Now the wid is used as pointer to the previous word list. This method is simpler and clearer, andlatest-wordlist
is a better name than the old fig-Forthvoc-link
, which anyway relates to vocabularies. -
Rename
udg-chars
todefault-udg-chars
. -
Move far-memory string words to their own module.
-
Remove string arrays that don’t leave a count. There were two variants of each string array. It’s simpler to keep only the variant that returns the count of compiled strings, which is useful most of the times.
-
Benchmark and remove alternative
m*
. -
Remove the kernel copy of
where
. -
Remove
exit
after conditional intepretation. The objective ofexit
at the end of conditional comments (?\
and?(
) was to interpret blocks faster, leaving the current block after the needed code had been interpreted. But the space in the block is more important. -
Remove slower versions of
rshift
andlshift
. They are only 3 bytes smaller, but much slower (1.33 and 1.69 the execution time of the faster default versions). -
Move remaining tests to the tests module.
-
Remove
permcolor
and2permcolor
definers. Hardly useful. -
Rename
color
definer toattr-setter
, and2color
tomask+attr-setter
. -
Remove
paper>attr
. No need for this word.papery
can be used instead. -
Move
span
to the library. -
Move
!bank
,c!bank
,@bank
andc@bank
to the library. -
Move
upper
,uppers
,faruppers
andlowers
to the library. -
Modify
digit?
to use thelower
routine. -
Remove old unused implementations of
um*
. -
Move
permanent-colors
to the library and rename it tomask+attr>perm
. This word is not needed in the kernel any more. The new name is consistent with the words that manipulate the current attribute. -
Remove
0udg-at-xy-echo
,at-xy-echo-0udg
. No need for them in the kernel. They are already in the library, with different names, since 2017-01-09. They are still experimental. -
Move
read-block
andwrite-block
to the main file of the kernel, because they are identical in G+DOS, TR-DOS and +3DOS. -
Move TR-DOS
get-drive
andcat
to the library. -
Move
rec/track
to the kernel. -
Remove
lib-order
and family. These words were never used, because the method was not low-level enough:need
had to be modified to use it explicitily. A better, transparent method to use several configurable library disks at the same time will be introduced in v0.14.0. -
Rename the "modules" directories to "addons". The name was confusing because these directories contain code not integrated in the library yet, while in all the documentation the name "module" means a library file.
- Title
-
Alonso Quijano limpia sus armas (Alonso Quixano cleans up his armour).
- Illustrator
-
Doré, Gustave (1832-1883).
- Engraver
-
Pisan, Héliodore Joseph (1822-1890).
- Book
-
El ingenioso hidalgo don Quijote de La Mancha (The Ingenious Gentleman Don Quixote of La Mancha) (1605), by Miguel de Cervantes (1547-1616).
- Edition
-
1863, Paris, L’ingénieux hidalgo Don Quichotte de la Manche (Hachette). Volume 1, chapter 1, page 13.
The ZX Spectrum image was created from image 879 of the QBI image bank.
Released on 2016-12-31.
This version has more new features, bug fixes, improvements and changes than initially planned. The reason is it was heavily tested during the development of two game projects.
-
Port of the
blocked
editor, an alternative to the fig-Forth editor. Not fully tested yet. -
const
,cconst
and2const
, to define constants that compile their values. -
Add
jp,
to the assembler word list in the kernel, factored fromdefer
. -
Add
farlimit
,farunused
; update.unused
. -
Add
list-lines
,list-line
. -
Add
qx
, a quick index tool extracted from the originalblocked
editor and improved to work with any editor and in any screen mode. -
.line#
,/line#
. -
Add
/block#
and.block#
. -
Add
avariable
,2avariable
,cavariable
, 1-dimension arrays that work like variables. -
Add
bit-array
,!bit
,@bit
. -
Start supporting Gforth’s mini-oof.
-
Add
see-xt
,see-body-from
. -
Add
-branch
. -
Add
+if
,+while
,+until
. -
Add
max-order
and?order
. In order to check the search order inset-order
… -
Add
data:
,2data:
,cdata:
. -
Add quotations:
[:
and;]
. -
Add
enumcell
. -
Add
dtimes
. -
Add
?rstack
. -
New word
>printable-ascii-char
, a factor oftype-ascii
andfartype-ascii
. New faster and specific checkprintable-ascii-char?
. -
Add
cenum
. -
Add
#>kk
. -
Add
~~app-info
. This makes~~
easier to extend and customize by the application. -
Add
+perform
. -
Add
-order
,+order
. -
Add
-1|1
. -
Add assembler labels.
-
Add
switch
,>cell-string
. -
Add
c>bstring
,2>bstring
. -
Add
hide-internal
, to complete the oldinternal
module. -
Add VFX-like
module
. An implementation of VFX’smodule
by Ulrich Hoffmann in Forth-94. -
Add SwiftForth’s
package
. -
Add
c!exchange
, newexchange
,cexchange
. -
Add
sconstants
,/sconstants
. -
Add
u>str
. -
Add
uppers1
. -
Add
make-block-characters
. -
Add
block-characters
and0udg>
. -
Add
odd?
. -
Add
set-font
,get-font
,set-udg
,get-udg
,rom-font
. -
Add
even?
. -
Add
case-sensitive
,lower
,lowers
,farlowers
. -
Add
udg-chars
to define the default UDG 'A'..'U'. -
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').
-
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. -
Add
window
, a basic implementation of text windows. -
Add constants for common control keys.
-
Add
plot176
. -
Start the new
rdraw
(not finished yet). -
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
. -
Add
fyi
. -
Add
ifelse
operator.
-
Fix
:noname
with the newcall,
. -
Fix needing
d<>
,trim
,char
,[char]
,word
. -
Fix
+place
. -
Adapt
module
to far memory. -
Make
name<name
compatible with far memory. -
Fix
search
: empty substring caused crash. -
Fix compilation of
s\"
,.\"
: keep search order. -
Fix
bright!
. -
Load
see
(olddecode
) preserving the word lists config. -
Fix conditional definition of
/kk
. -
Fix
privatize
. -
Fix
u.r
. -
Fix
/hold
andfloored
environmental query strings. -
Fix grep expression in
fs2fba.sh
. -
Fix and improve several issues in both assemblers. Main changes, in the
z80-asm,
assembler: Fixjp>jr
to manage also unconditional jumps; fixrelse
,rwhile
andruntil
. -
Fix
jp>jr
. -
Fix names of
im1,
andim2,
. -
Make
inverse-cond
andjp>jr
z80-asm
-safe. There were problems whenz80-asm
was loaded beforez80-asm,
, becausez80-asm
has words homonymous with Forth words. -
Fix: Make
cold
reset the behaviour ofwarn
. -
Fix code typo in
fast-(pixel-addr)
. -
Fix
rstep
.
-
Documentation of many words has been improved. All documentation is still in the sources, though.
-
The needing of many words has been improved, i.e., now they can be accessed individually by
need
. -
Rename
transient[ ]transient -transient
totransient end-transient forget-transient
and improve them. -
Update the Vim syntax file.
-
Add Vim ftdetect file.
-
Make
link@
an alias, for speed. -
Make
words
and family configurable. Sometimes it’s useful to see more information in a listing of words. Nowwords
,wordlist-words
andwords-like
can be configured with a deferred word. -
Add a configurable resume key to
~~control
. -
Rewrite
lengths
in Z80. -
Improve and test
[switch
. -
Improve
does>
withcall,
. -
Use
cell+ cell+
andcell- cell-
. They are a little bit faster than[ 2 cells ] literal +
and[ 2 cells ] literal -
and save one cell. -
Improve
(located)
to detect empty strings. Actually this was a bug: an empty string fromneed
and family was accepted and looked for, and of course it matched the header of the first locatable block of the library. -
Improve G+DOS
transfer-block
withliteral
. -
Rewrite
d-
with Z80 opcodes, to make it independent from the assembler. -
Improve kernel’s first-boot routine.
-
Improve
+field
: Make it a deferred word and add 3 implementations:+field-unopt
,+field-opt-0
and+field-opt-0124
. -
Make
negate
6 T faster and 2 B smaller. -
Improve
~~control
to accept also any resume key. -
Rename
paper>
toattr>paper
. Rename>paper
topaper>attr
. Rewrite them in Z80. -
Increase return stack.
-
Define default
/kk
. -
Improve
switch:
with character and 2-cell clauses. -
Improve
export
withalias
. -
Rewrite
ms
. -
Rewrite
8*
in Z80. -
Make escaped chars configurable in
s\"
and.\"
. Support escaped graphic chars (BASin notation). -
Save one byte in
find-name-from
. -
Improve
~~
with clearer output. -
Improve
du<
. -
Improve
.depth
: 4 bytes smaller.
-
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 new case-sensitive mode is activated.
-
Use
?(
instead of[if]
in the library. Compilation of standard[if]
needs more data space and is slower than the conditional comment?(
, which is enough for all the conditional compilation needs of the library. -
Split the
indexer
module. Part of the code can be shared with an alternative indexer under development. -
Show version-specific background image at startup.
-
Improve the
user
module. Add conditional compilation. -
Reorganize <make/> and <tools/>. Now <make/> contains the programs used by <Makefile>, and <tools/> will contain tools for the Forth programmer.
-
Move
.line
to its proper module. -
Move code and list tools common to both editors to an independent module.
-
Rename Wong’s
array
toavalue
and extend it. -
Rename
c!set-bits
,c!reset-bits
,c!toggle-bits
tocset
,creset
,ctoggle
. -
Rename
c@test-bits
andc@test-bits?
toc@and
andc@and?
. -
Rename
decode
tosee
. The tool is not complete yet, but it fits the description of the standard wordsee
, therefore there’s no need to keep its original name. -
Rename
-branch
to+branch
. The name was not consistent with?branch
and0branch
. -
Move
u.r
to the library. -
Prepare the implementation of
use-fly-index
, an alternative indexer. -
Move
storer
,cstorer
,2storer
to a module. -
Remove old
get-order
andorder@
from library. -
Move
seal
to the library. -
Move
catch
to the library. -
Combine small control structures into one module.
-
Combine small definers into one module.
-
Move
fartype
andfartype-ascii
to the library. -
Move
?leave
to the library. -
Move
warnings
and family to the library. -
Move
search-wordlist
to the library. -
Remove
blocks
, a duplicate ofblk/disk
. -
Move
doer-test
to the tests module. -
Remove old unused
bank-boundary?
. -
Replace
scr
withlastblk
inload
andreload
. -
Rename
~~show
to~~info
. -
Remove mutual needing of
n>r
,nr>
. -
Rename
?jr-range
and?page
to?rel
. The word is common to both assemblers but had different names. -
Rename module of
switch:
, after the usual convention. -
Rename
>cell-string
to>bstring
, which is completed with the new wordsc>bstring
and2>bstring
. -
Rename the
internal
module words to extend it: Old:internal
,external
,module
New:internal
,end-internal
,unlink-internal
-
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
. -
Rename the
environment?
module after the usual convention. -
Remove
(wait)
from the kernel. -
Rename
jpnext
,jppushhl
:jpnext,
,jppushhl,
. The new names are consistent with the rest of similar words also defined in the kernel:jp,
andcall,
. Beside,z80-asm,
, which uses the comma suffix convention, will be the only assembler in a future version. -
Rename
rdraw
,adraw
tordraw176
,adraw176
. These implementations use only 176 pixel rows of the screen, like Sinclair BASIC. They can be useful for conversions from BASIC. -
Convert
rdraw176
to thez80-asm,
assembler. -
Convert
inkey
,get-inkey
to thez80-asm,
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
toneed-from
. This word is seldom needed.from
is a generic, more useful name in application context. -
Change the assembler of pixel graphic words. Convert all of them from the deprecated
z80-asm
toz80-asm,
. -
Rename
wait-for-key
todiscard-key
. -
Move
s'
from its own module to the misc strings module. -
Improve the description of the Forth tools used by GNU make to build the Forth system.
-
Compact the library to fit the 636 KiB available in a TR-DOS disk image.
From version 0.12.0, Solo Forth shows a version-specific background image the first time it boots. The image of this version is the following:
- Title
-
Alonso Quixano reading books of chavalry.
- Author
-
Gustave Doré (1832-1883).
- Book
-
El ingenioso hidalgo don Quijote de La Mancha (The Ingenious Gentleman Don Quixote of La Mancha) (1605), chapter 1, by Miguel de Cervantes (1547-1616).
The ZX Spectrum image was converted from the pictures scanned by Claudio Paganelli from the italian edition Don Chisciotte della Mancia, published by Edoardo Perino (Rome, 1888). Direct link to the image: https://www.h-net.org/~cervantes/doreimag/tav001.gif.
Released on 2016-11-16.
The goal of this version was to implement a virtual 64-KiB continuous space built from 4 configurable memory banks, in order to increase the headers space of the Forth system (so far only one single 16-KiB bank was used for that), and also to provide the programmer an easy method to use all the paged memory. It has been called "far memory".
-
Far memory: A virtual 64-KiB continuous space, built from 4 configurable memory banks. It’s used by the Forth system to store the dictionary headers, and can be used transparently by the programmer.
-
Basic support for the far-memory system in the kernel:
far-banks
,far
,?next-bank
,?previous-bank
,far@
,far!
,farc@
,farc!
,farplace
,fartype
,faruppers
. -
Optional library words to manage the far memory:
far2@
,far2!
,far@`, `farc@
,far2@`, `far!
,farc+!
,move>far
,move<far
,cmove>far
,cmove<far
,fartype-ascii
,fardump
,farwdump
,farallot
. -
Add
u>ud
. -
Add
word-length-mask
. -
Try and document
indexer
. It did not work in previous versions because the old 16-KiB bank used to store the definition headers was not large enough: the index occupied 12 KiB, while the kernel definitions occupied 5 KiB. After implementing the 64-KiB far memory, the indexer works fine. Its usage has been documented in the source and the README.
-
Fix description of the header structure.
-
Fix requiring
gcd
,%
andu%
. -
Fix
\
, which usedspan
instead of#tib
. This bug has been invisible for a long time, because\
is not used in the command line. -
Fix block title of the calculator module: it caused
>=
and other calculator operators be found byneed
instead of the integer ones, because the calculator module is before the integer operators in the library disk. This problem affected the "tt" sample game, which also lackedneed randomize
. -
Fix conditional compilation of
alias!
. -
Fix requiring `<⇒'.
-
Update Vim syntax file.
-
Rewrite
c!bank
,!bank
,@bank
andc@bank
in Z80. -
Simplify
home
. No need for specific versions ofhome
for the screen modes. Onlyat-xy
has to be reconfigured by the screen modes, if needed. -
Improve the address register module. The code still used direct jumps to
pushhl
instead ofjppushhl
, which is faster with no size penalty. -
Improve documentation of the
assert(
tools. -
Document the
~~
debugging tool. -
Compact the assemblers, saving one block each.
-
Make all buffers contiguous. Now the circular string buffer can be configured to use the disk buffer and the terminal input buffer as extra space.
-
Improve documentation of
dump
andwdump
. -
Improve the default
case
withalias
.
-
Remove the old unused code of the old search order.
-
Make Z80 registers and flags uppercase in kernel’s comments.
-
Rename "names pointer" to "headers pointer". The whole header of the definition is stored at the pointed address, not just its name. Therefore the old
np
,np!
andnp@
have been renamed tohp
,hp!
andhp@
. -
Rename
code-field,
tocall,
inassembler
. The oldcode-field,
, needed in the kernel, does exactly the same ascall,
in thez80-asm,
assembler. So it has been renamed, moved to theassembler
word list and removed from the assembler. -
Move
8*
from the assemblers to the operators.
Released on 2016-10-23.
Besides many new features, fixes, improvements and changes, this version includes disk images not only for G+DOS but also for TR-DOS and +3DOS. The support for TR-DOS and +3DOS is not finished: The TR-DOS version can access the library only from drive A, and it has no words to manage disk files; the +3DOS version can not use the library.
-
Add
-1
.-1
is defined with the former code oftrue
, andtrue
is converted to an alias. This saves 8 bytes in the kernel and makes any compiled -1 faster than a literal and one cell smaller. -
Add
''
and>>name
. These words allow to get the execution token pointer of a name, and convert it to its associated name token; this makes it possible to get the actual name of an alias, what is impossible from its shared execution token. -
Add
['']
. -
Add
gcd
operator. -
Add color constants and color modifiers.
-
Add a 128K sound editor. First version. It’s usable but needs improvements.
-
Support for TR-DOS (not finished: the library can be accesed only from drive A).
-
Add
blks
checker. -
Add
lib-order
. So far the library must be one single disk.lib-order
,set-lib-order
andget-lib-order
will make it possible to use several library disks and configure the order in which they are searched, up to the maximum allowed by the DOS. These words are not used byneed
yet, so they are useless at the moment. -
Build disks for +3DOS (the library can not be accesed yet).
-
Add
ref-xdpb
to the +3DOS version. -
Add
first-udg
andudg-row[
. -
Add
exec-bench
. This bench compares the execution time of executing two pieces of code depending on a flag, using three methods. -
Add
fetch-bench
. -
Add
set-pixel-bench
. -
Add
pixels-bench
. -
Add
bitmap>attr-addr
andpixel-attr-addr
. -
Add
store-bench
. -
Add
allot-xstack
. -
Add
rec/track
.
-
Fix
>body
andbody>
. Their codes were exchanged when they were moved to the library. -
Fix
decode
, which showed the usage instructions before checking the word. -
Fix
need-here
. -
Fix
find-name
with?do
. -
Fix needing
c@+
. -
Fix requiring
c1+!
,c1-!
,1+!
and1-!
. -
Fix G+DOS
(cat)
; update the G+DOS module. -
Fix conditional compilation of some library words. The conditional compilation of
]l
,]2l
,exec
,eval
,save-here
andrestore-here
was wrong. -
Fix requisite of "Siderator 2".
-
Fix
load-app
to be compatible withrefill
.
-
Modify the structure of vocabularies. Now vocabularies don’t keep the data of a word list in their body. Instead, they create a wordlist and store only its address. This way,
vocabulary
can be moved to the library, even if there are three vocabularies in the kernel (root
,forth
andassembler
). But the main advantage of this change is conversion can work in both directions: a word list identifier can be get from a vocabulary name, no matter if the vocabulary was created withvocabulary
or out of an existent word list; and a vocabulary can be created from a word list, and its structure will be identical to those created byvocabulary
. -
Improve format of error messages. Now a backslash is printed after the error code, and only when text messages are active. This looks clearer and saves 2 bytes in the kernel.
-
Improve the
decode
tool. Improve the check incolon-cfa?
. Compactdecode-special
. -
Improve compilation of 8-bit literals.
literal
is replaced with the new word1literal
ininterpret-table
. This causes 8-bit literals will be compiled bycliteral
instead ofliteral
, what saves one byte of data space and is faster at run-time.cliteral
was moved from the library to the kernel, andbyte?
was added in order to do the check. These changes add 31 bytes to the kernel, but they will make the programs smaller and faster. -
Improve
0
,1
and2
. These byte constants have been rewritten as code words. This makes them faster. -
Improve
constant
andcconstant
. Now they are faster: their run-time code runs directly into@
andc@
. This saves 8 bytes from the kernel. -
Improve
2constant
. Now its run-time code (instead that of2>r
, less used) runs directly into2@
. This makes double constants a bit faster and saves one byte from the kernel. -
Improve needing of 128K sound effects. Now every sound effect can be required individually.
-
Improve definition of 128K sounds. Now sounds are created with
sound
instead ofsound:
, and when they are executed they just play instead of returning the address of its data. -
Improve
sector-id
for G+DOS. -
Improve needing of
<is>
,[is]
andis
. No<is>
and[is]
can be needed apart. -
Improve
pixels
. -
Improve documentation of
attr
and related words.
-
Move
vocabulary
to library; adaptassembler
. -
Use
wordlist
forparse-escaped-string
. No need to usevocabulary
for a standard tool. -
Move
there
to the library. -
Reuse the code of
noop
to save 2 bytes. -
Reorganize the exception codes; add TR-DOS codes. In order to make calculations easier, all DOS will share the range of exception codes.
-
Start implementing ior to DOS calls. The goal is all Forth words that call any DOS routine return an ior error result.
-
Print DOS name in the greeting message.
-
Organize the disk images in directories.
-
Rename
error-messages-block
toerrors-block
. Also combine blocks of its module to save two of them. -
Compact the library. The code of several modules has been compacted and reorganized in order to save blocks, because of the 636 KiB usable in TR-DOS disk images.
-
Split the tests and benchmarks into several disks, in order to make them fit 636-KiB TR-DOS disks.
-
Rename disk images. All disk image files have been renamed after a shorter and clearer format, easier to use with the SDL file interface of the Fuse emulator. Now disks are numbered the same way in every DOS, with an ordinal number instead the identifier of the drive it’s supposed to be used with.
-
Make G+DOS'
transfer-sector
return an ior. -
Remove G+DOS' old
set-library-disk
.set-library-disk
andget-library-disk
are superseded byset-lib-order
andget-lib-order
, which are implemented but not used bylocate
yet. -
Rename the disk files to fit any DOS. The filename format 4+3 fits G+DOS (10 chars), +3DOS (8+3 chars) and TR-DOS (8 chars). This is simpler than creating different names for every DOS, and makes code compatible.
-
Reuse code of
invert
. Currently, the HL register needs to be inverted from assembler, in two DOS operations. There’s no need to duplicate code. The fastest method is chosen, though the call makesinvert
a bit slower. -
Free RAM page 1 in +3DOS. +3DOS uses RAM pages 1, 3, 4 and 6 as an array of 128 sector buffers (numbered 0…127), each of 512 bytes, thus 32 buffers per RAM page. The cache and RAM disk occupy two separate (contiguous) areas of this array. In order to free RAM page 1 for Solo Forth, the default configuration must be modified, moving everything up and making the RAM disk 32 buffers smaller.
-
Complete the +3DOS exception codes.
-
Compact the source of
located
. -
Improve the output of
exec-bench
. -
Rename
xstack
toallocate-xstack
. -
Make
(pixel-addr)
deferred.
Released on 2016-05-18.
-
Finish
refill
, improve-→
. Nowrefill
supports blocks.-→
has been rewritten after it. -
Fix
[else]
withrefill
: Now[if]
can cross block boundaries. -
Fix
to
,2to
andcto
. -
Add
load-app
. -
Fix
parse-all
(wasparse-line
); finishexecute-parsing
. -
Move
evaluate
andstring>source
to the library: These words are not used in the kernel, andevaluate
can be rewritten afterexecute-parsing
, which is in the library. This saves 28 bytes in the kernel. -
Add
!>
,2!>
andc!>
: Words that change the value of constants, inspired by IsForth’s!>
. -
Improve
value
,to
and their variants: The default versions (standardvalue
andto
, and non-standard2value
,2to
,cvalue
andcto
) have been combined into one single module, rewritten as aliases and documented. The standard alternative versions ofvalue
,2value
andto
have been documented. -
Rename non-parsing
value
/to
toval
/toval
.
-
Fix harmless bug in
locate-reneed
. -
Improve compilation of "memory.misc.fsb": Remove dependency on the assembler. Add conditional compilation. Compact the blocks. Remove unused code.
-
Rename
@cell+
to@`, add `2@
. -
Fix
!a
,!a+
,c@a+
: The module of the address register has been compacted and documented. During the process three bugs, caused by wrong Z80 opcodes, were discovered and fixed. -
Simplify the circular string buffer: So far the internal offset of the buffer was stored before the buffer data. It has been moved to
>csb
, which formerly was a fake variable, a constant that returned the address of the offset, and now is an actual variable. This saves a cell and is more versatile. In total, ten bytes are saved with some related changes. -
Add
2storer
. -
Remove
set-latest-lex
: A factor ofinterpret
andcompile-only
that was not useful, because there are no more flags to set. Removing it saves 5 bytes. -
Improve
hided
. -
Fix requirements of
[cconst]
. -
Add benchmark for `?throw'.
-
Document
fill
,erase
,blank
. -
Shorten
hex
: A branch saves one cell, more important than speed in this case.hex
anddecimal
have been documented. -
Rename
hided
to the correcthidden
. -
Move
>body
andbody>
to the library. -
Improve
up
: Nowup
is a variable, not a constant that returns the address where the value is stored. This change is necessary to implement multitasking, and it saves one cell. -
Improve conditional compilation of word lists tools.
Released on 2016-05-10.
Released on 2016-05-09.
-
Fix
header,
: movecurrent-latest
back to the kernel. -
Fix and improve
search
: 8 times faster code. -
Fix
mode42
. -
Make three library disks instead of one.
-
Rename
s=
tostr=
; addstr<
,str>
. -
Rename
other>
toothercase>
; improve its doc. -
Rename
nextcase
torepeatcase
; improve its doc. -
Rename
set
tostorer
and improve it. -
Rename
chan
tochannel
. -
Improve
compare
: faster code. -
Improve and document
overprint
; move it to the library. -
Improve and document
inverse
; move it to the library. -
Improve
paper
andink
. -
Improve the
indexer
tool: no data space used anymore. -
Add
?(
. -
Add
need-here
. -
Move
warnings
control to the library.
-
Fix
border
and modifydefault-colors
. -
Fix code typos in "printing.cursor.fsb".
-
Fix the error of
?locate
. -
Add
0max
. -
Add
<⇒
. -
Add
?ccase
,ccase0
,ccase
. -
Add
alias!
. -
Add
clshift
, 8-bit version oflshift
. -
Add
color
,2color
and related words. -
Add
cstorer
. -
Add
dup>r
. -
Add
either
andneither
. -
Add
holds
. -
Add
lineload
. -
Add
ruler
. -
Add
split
andjoin
. -
Add
string-parameter
. -
Add
type-left
,type-center
,type-right
. -
Add
warning"
. -
Add
words#
. -
Add color system variables.
-
Factor
.unused
fromgreeting
. -
Factor
permanent-colors
fromink
. -
Improve
0=
and=
. -
Improve
2r>
. -
Improve
default-colors
. -
Improve
leave
. -
Improve
need
. -
Improve
u<
. -
Improve
z80-asm,
, the alternative assembler. -
Improve compilation and documentation of
alias
. -
Improve conditional compilation of printing control.
-
Improve printing of nameless word lists.
-
Improve documentation of
?repeat
. -
Improve documentation of
create:
. -
Improve documentation of
jppushl
. -
Improve documentation of
options[
. -
Improve documentation of
thiscase
. -
Make
chars
an alias ofnoop
, not a deferred word. -
Make
from
andlocate
optional. -
Make pictured output string buffer configurable.
-
Make the faster
<
definitive. -
Move
[compile]
to the library. -
Move
defer@
to the library. -
Move
printer
to library. -
Remove
(i)
. -
Remove
transfer-mode
. -
Remove unnecessary
space
from.wid
. -
Rename and add color words.
-
Replace remaining
[compile]
withpostpone
. -
Simplify
cls
. -
Simplify
default-colors
. -
Simplify
type-right
. -
Test and document
tabulate
. -
Fix description of
ahead
. -
Compact the library.
Released on 2016-04-27.
-
Add
marker
. -
Add modern
latest
(old fig-Forthlatest
is renamed tocurrent-latest
). -
Add
latestxt
andlastxt
. -
Fix
recurse
and:noname
, which used the oldlatest
. -
Add
name>interpret
,name>compile
. -
Add
comp'
and[comp']
. -
Fix
restore-here
. -
Fix and improve compilation of literals.
-
Add
char-position?
andchar-in-string?
. -
Rename
ascii-type
totype-ascii
. -
Improve definition of UDGs.
-
Improve printing of UDGs at graphic coordinates.
-
Add
/!
,!
,2/!
,2
!
. -
Move
char
and[char]
to the library. -
Move
cliteral
to the library. -
Move
;code
to the library. -
Move
2rdrop
to the library. -
Move
pick
to the library. -
Move
nextname
to the library. -
Move
:noname
to the library. -
Move
get-default-bank
andset-default-bank
to the library. -
Improve the error code of
located
. -
Replace
bs
withbackspace
indump
. -
Fix description of
defined
. -
Clearer warning and exception messages.
-
Update the Pong game.
Released on 2016-04-22.
-
Add floating point support.
-
Add ROM calculator support.
-
Fix
>name
. -
Improve
alias
. -
Add
user
. -
Add
j
andk
.
-
Add
realias
. -
Improve
dnegate
. -
Add
wait-for-key
. -
Improve
system-bank
. -
Improve
upper
. -
Renamed the math library files with a common root.
-
Move
recurse
to the library. -
Add
(source-id)
. -
Move
!s
andc!s
to the library. -
Add
-!
. -
Add
times
. -
Fix
(;code)
. -
Improve
associative-list
. -
Fix
dump
. -
Improve
ascii-type
. -
Fix
decode-compile
. -
Rename library files.
-
Documentation: Change the stack notation for flags.
Released on 2016-04-11.
-
Fix and improve the tape support: The message "Start tape, then press any key" does not appear anymore.
-
The tape module is fully documented.
Released on 2016-04-10.
-
Tape support.
-
New words:
nonfull-display
,full-display
,save-display
andrestore-display
.
Released on 2016-04-09.
-
Fix, improve and finish the
arguments
implementation of locals. -
Improve the documentation of some library modules.
Released on 2016-04-09.
-
Split the assembler library module into three files: z80-asm assembler, z80-asm-comma assembler and common tools.
-
Fix the title of two 8-bit pseudo-random number generator benchmarks.
-
Fix the name of the
base-execute
library module.
Released on 2016-04-03.
-
Adapt some library words to DTC.
-
Fix the DTC version of
decode
and remove its ITC version. -
Add
docolon
to the kernel, needed bydecode
. -
Add
cslit
and an alternative definition ofcsliteral
to the library. -
Improve
decode
with support forcsliteral
. -
Change the stack notation "text<c>" to "ccc<char>", after the standard.
-
Fix
number?
: wrong numbers left a double cell on the stack under the TOS flag, andbase
was not restored. -
Add
number-punctuation?
to check for valid punctuation in numbers. -
Improve
number?
to recognize also comma, colon, plus, hyphen and slash as valid punctuation, any number of them, at any position. Formerly only one decimal point was allowed, at any position. -
Add
number
to the library. -
Make
.\"
independent froms\"
. -
Replace Z80 jumps to the
push_hl
entry point of the inner interpreter with apush hl
and the usualjp (ix)
(jump tonext
). This saves 2 CPU cycles and needs no additional bytes. Benchmarks are 1% faster. -
Add
jppushhl
to the assembler wordlist in the kernel and modify the library code words accordingly. -
Make
number?
to reject initial or duplicated point. -
Rename all occurrences of "punctuation" to "point".
-
Make
number-point?
match only the standard period. Add two alternatives to the library, which recognize more points. -
Add
there
, which setsdp
. -
Convert the words
compile,
,begin
,<mark
,<resolve
andthen
to aliases. -
Remove
next2
, which is unnecessary in DTC; updatepause
andexecute-hl
accordingly. -
Update some development benchmarks.
-
Reorganize the source, binary and temporary files into directories.
-
Add the
bank-start
constant. -
Add
save-here
andrestore-here
. -
Add the
code-bank
tool (not tested yet). -
Modify the file words to return a standard ior.
-
Modify
mode42
andmode64
to implement alternative versions that use the code bank. -
Convert
>wid
andwid>
to aliases. -
Add
+under
. -
Update the implementation of
wordlist
andvocabulary
. -
Replace
get-order
. -
Add
set-default-bank
,get-default-bank
anddefault-bank#
. -
Remove parens from names of the printing mode vectors.
-
Comment out the contrast ink calculation in
border
. -
Remove the game Nuclear Invaders, which temporarily had been included in the library.
-
Split the library into files (151) and update the Makefile accordingly. This makes it possible to include only the modules needed by the user application.
-
Rename the interrupt-independent version of
inkey
toget-inkey
. -
Rename the two versions of
key??
, which are interrup-independent, toget-key?
andfast-get-key?
. -
Fix
-suffix
. -
Add
for-i
for thefor step
loop. -
Rename
di
todfor-i
for thedfor dstep
loop. -
Rename the words of Wil Baden’s
case
structure to avoid name clash with the standardcase
. -
Remove old fig-Forth loop indexes from the library.
-
Modify the license.
-
Update and complete all of the source file headers.
-
Add
?repeat
. -
Modify and factor
wid>name
. -
Simplify the storage and printing of the version number, by making release candidates start from 1 instead of 0.
-
Include only the best implementations of pseudo-random number generators. Update the benchmarks of all of them.
-
Improve the documentation of many words.
-
Add
indexer
, a tool that indexes the library and makesneed
,needed
,reneed
andreneeded
much faster. -
Add
cell/
,d10*
andbits
to the library.
Released on 2016-03-14.
Many fixes, changes and improvements. See the development history.
-
The Vim syntax file for Solo Forth is included.
Developed from 2015-06-02 to 2015-12-18.
During this long initial period of the development, Solo Forth grew from a small seed (the code of Abersoft Forth, a fig-Forth 1.1) to a disk-based system, with only some small traces of fig-Forth left, with many features of modern standard Forth systems and a huge library of optional code.
Version branch 0.0 was finished after replacing the fig-Forth do
loop
control structures with the Forth-83 version, adding a method to
nest sources (nest-source
and unnest-source
) and writing
evaluate
.