- 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-bytesfrom +3DOS. -
Move TR-DOS
.drives,.step-ratesand.fdato 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-styleto improvegigatype. Move thegigatypestyle 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-drivesand4-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-userandset-user. -
Add
clocal,2local. -
Add +3DOS
flush-drive. -
Add +3DOS
drive-unused. -
Add G+DOS
tracks/disk,tracks/cat. -
Add +3DOS
write-lineandread-line. -
Add
0leave. -
Add +3DOS
write-byteandread-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-strmsand.os-chans. -
Add
dfcaandcurrent-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-fileand friends. -
Add +3DOS
bank-write-fileandwrite-file. -
Factor +3DOS
default-1346fromcold. -
Factor
default-displayfromcold. -
Add
no-exit. -
Factor
d>strfromd.r. -
New words common to all display modes:
form>xy,>form,form. -
Add
.2x1-udg. -
Add
csprite. -
Add
display>tape-fileandtape-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
acatandwacat. -
Add +3DOS
full-catflag. -
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,timeranddtimer. -
Add
expiredanddexpired. -
Add
n>str. -
Add
?depth. -
Add
cs-dup,cs-mark,cs-test. -
Add
0repeat. -
Add
coffandc?. -
Add
ms>ticks. -
Add
>name/order. -
Add
>oldest-name/order. -
Add
>oldest-nameand>oldest-name/fast. -
Add
empty-stack, a useful factor of(abort). -
Add
c@1+andc@1-. -
Add
attr-wcls,wcolor. -
Add
x>gxandy>gy. -
Add
c@2+andc@2-. -
Add
andifandorif. -
Add
?c1-!. -
Add
3*. -
Add
manual-seecontrol 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-fileandbank-read-file. -
Add G+DOS
-uifaand 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>capacityandmax-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-drivescan 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-modetocold. This fixes an evident but subtle bug. -
Fix needing of
cs-rollandcs-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
catchandthrow: make them save and restore the source specification. -
Fix
marker. -
Make
nest-sourcesave the contents ofinput-bufferinstead 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/remtest.
-
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>sourcewas unnecessary, because it’s included inquery. -
Improve needing of G+DOS directory descriptions.
-
Improve the
{ifcontrol structure. -
Simplify
where. -
Improve the width of table columns in the manual.
-
Improve
s,andfars,. -
Simplify
retry. -
Improve
extendandturnkey. Still under development, though. -
Improve
in-block-header?. -
Make G+DOS
get-drivereturn 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-filewith?fam,/w/o,/r/o. -
Make G+DOS
set-ot-filechoose an unused stream. -
Improve
.os-chans. -
Improve the 128K sound editor.
-
Make
[needed]optional. It’s almost useless. No need to load it with theneedtool. -
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_hldefrom the kernel. Thenextcode (the inner interpreter) has been moved afterexitand 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.rand0d.rin Z80. Faster and smaller. 10 bytes are saved in total. -
Rewrite
cexchangeandc!exchangein Z80. -
Improve
versionand.version. One byte was too small for the prerelease counter. The improvements in.versionsave 12 bytes. -
Update the Vim syntax highlighting.
-
Improve the text
windowimplementation. -
Improve transition between 32/64 CPL display modes. Now the cursor position is preserved across
mode-32,mode-32-isoandmode-64o. Beside,mode-32-fontandmode-32iso-fontpreserve the fonts of their corresponding modes. -
Improve
mode-32iso; addmode-32iso-output_. -
Improve
ocr-charsandocr-first. -
Improve and extend the
windowmodule. 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
lastblkin(load)instead ofload. This is more useful, since(load)is used byload,continuedandload-program. -
Improve
ltype. -
Make
dticks>msandset-timefaster. -
Rewrite +3DOS
headedin Z80. -
Use
mode-64-fontfor both 64-cpl modes. -
Adapt to the library all 64-cpl fonts from disk 0.
-
Init far-memory config in
cold. -
Make
colda 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-timeand.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
>nameand move it to the library. -
Make
;codestandard. 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-stripesand friends independent. -
Improve
seeto 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-udgwithlast-font-char. -
Restore default value of
#block-drivesincold. -
Improve
xstack. -
Make
hook,andprt,optional. -
Improve
defined?. -
Make
lwidtha 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/sectorto the library. -
Move
name>str,name>stringsand.nameto the library. -
Move
depthto the library. -
Move
+loopto the library. -
Move
.unusedand.wordsto the library. -
Move
2variableto the library. -
Replace
r> dropwithrdrop, except in benchmarks that would be affected. -
Make `
chars>string,>bstringand2>bstringto use thestringerinstead ofpad. -
Make +3DOS
cat-buffer(used bycatandacat) use thestringerinstead ofpad. -
Add a new
?stringerto throw an error if a string is longer than the total capacity of thestringer. The oldstringerwas renamed tofit-stringer. -
Make
order,,@order,wordlists,and@wordlistsindependent frommarker. -
Move
0exitto the kernel; no data/code space needed, because of the space saved by using this word instead of0= ?exitandif. -
Make paren comments multiline in the Vim syntax file.
-
Make
do_createanddo_variableZ80 entries 8 T States faster, by moving them from thenoopword to thenextentry. -
The sources searcher searches also the document sources. It’s renamed to <tools/seek>.
-
Remove
get-default-bankandset-default-bank. -
Move
bank-startand/bankto the library. -
Rename
displaytoterminal. Following the standard, "display" is used in the documentation as a generic term, valid for both the terminal and the printer. -
Rename
printtoltype. This word is a variant oftype, likegigatypeand others. Beside, "print" is used for words related to the printer. -
Rename
load-apptoload-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
?locateconsume its argument. -
Remove +3DOS old
set-drive&transfer-sector. -
Make
newline>a counted string; remove/newline. -
Make
/tabulatea byte variable. -
Move
fardumpandfarwdumpto <tool.dump.fs>. -
Rename
printable-ascii-chartographic-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
>kkkk>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-64withmode-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-programinto(load-program. -
Replace "frames" names with "ticks". The OS variable used is called FRAMES, but
ticksis the common name in Forth. All related words have been renamed. -
Rename
pausetobasic-pause.pauseis a common usage name in the Forth multitasker, which will be implemented. -
Move
cs-swapto the kernel. -
Don’t make a +3DOS 180 KiB boot disk. Supporting only one disk format makes some things simpler on +3DOS.
-
Replace
random-rangewithrandom-betweenandrandom-within. -
Rename
d/expiredtod/past?. -
Replace
>namewith>oldest-nameinsee. -
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 hlandjp (ix). But thepushhlconstant is useful to make conditional exits in code words. -
Rename
ocr-charsettoocr-font. -
Rename
1literaltoxliteral,]1lto]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-lineto the library. -
Move
>in/land→in/lto the kernel.→in/lis a factor of\. -
Rename disk 2 to "programs".
-
Rename
astacktoestack, 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
?stringertofit-stringer. -
Move
?to the library. -
Rename
latest-wordlisttolast-wordlist. -
Delete <memory.bank.fs> and move its contents to <memory.far.fs>.
-
Rename
warn.throwtoerror-code-warn,warn-throwtoerror-warnandwarn.messagetomessage-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-drivesand related words. -
Add
get-block-drives. -
Add G+DOS
ufia1andufia2. -
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
]1land[1const]. -
Add
ram. -
Add
ldd,andldi,to the assembler. -
Add
outlet-autochars. -
Add
set-mixerandget-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
>fileandfile>. -
Add TR-DOS
delete-file. -
Add +3DOS
delete-file. -
Add TR-DOS
dos-hl_entry. -
Add TR-DOS
cat,undelete-fileand 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
seclusionandisolate. -
Remove the
save-displaytool. -
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-headerand its fields. -
Add
l!, fix assembler’saagain. -
Add
gigatype. -
Add
orthodrawandortholine. -
Add
xy>gxyandxy>gxy176. -
Add
menu. -
Add deferred
sqrtto support its two variants. -
Add
cvalandctoval. -
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),-filenameandfile-status. -
Fix
relseandaelse. -
Fix graphic block character 128.
-
Fix
crnd. -
Fix +3DOS
set-drive. -
Configure the memory banks for +3DOS.
-
Fix G+DOS
catandacat. -
Clear previous error at
dos.cTR-DOS entry. -
Fix prerequisites to build the BASIC loaders.
-
Fix needing of
/nameandfirst-name. -
Fix
?rel. -
Fix
ascii-char?andprintable-ascii-char?. -
Fix
execute-hl. -
Fix init of
last-font-char. -
Fix needing of
[char].
-
Rewrite
read-modeandwrite-modein Z80. -
Improve: Use
cconstantfor 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-drivereturn an error result. -
Make G+DOS
transfer-sectoruse 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
coldset the first drive as current. -
Improve the conversion of TR-DOS error results.
-
Use
cconstantin the assembler. -
Improve
get-order. -
Make words that init the
needtool optional. -
Make
unresolvedoptional and?relindependent. -
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
@pand!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-drivestool. -
Add Makefile rule to build only 128k TR-DOS disks.
-
Improve/fix
listwith a check. -
Rename/change tape words after disk equivalents.
-
Improve G+DOS
cat. -
Improve +3DOS
close-file. -
Set the lowest
originfor TR-DOScat. -
Improve the way TR-DOS calls return an error code.
-
Make assembler absolute control structures optional.
-
Halve the
stringerand rename its main words. -
Rewrite G+DOS
rename-filein Z80 opcodes. -
Improve the
~~debug tool. -
Support
(abort")insee. -
Improve
case; remove all its alternative codings. -
Improve
local,argumentsandanon. -
Rewrite the implemetation of assembler labels.
-
Make
coldset the default action ofinit-asm. -
Improve
environment?. -
Make
/holda constant. -
Improve
toand remove the non-standard version. -
Rewrite
call-xtwith Z80 opcodes. -
Improve/fix needing of some memory and time words.
-
Convert
mode32-max-chartolast-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 withdataandend-data. -
Move
doto 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-fontandrom-fontto 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-fileto the library. -
Move +3DOS
file-positionandreposition-fileto 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(cin the assembler. -
Rename the graphic address conversion words.
-
Rename
>deferto>action. -
Rename screen filter words and module.
-
Rename and reorganize printing/display modules.
-
Move
mode-32iso-emitto 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
emitis 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,
circleis 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,substituteandunescape. -
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-addrand(cursor-addr). -
Add basic words to store and compile strings in far memory:
far,,fars,,farsconstant,farsconstants,,far,",/farsconstantsandfarsconstants-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 withemitor.". -
Add
-1..1. -
Add
view. -
Add
?seconds. -
Add
faravariable,far2avariable,farcavariable. -
Add
name>str, a factor ofname>string. -
Add
name>name, an alternative>nameand>name-bench. The current Z80 version of>nameis not needed in the kernel. An alternative version in Forth is being tested. -
Add
#words. -
Add
/counted-stringconstant. -
Add
replaces. -
Add
substituteandunescape. -
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-dosand+3dos. -
Add
beep,dhz>bleep,middle-octave,/octave,octave-changer,beep>dhz,beep, and a newbeep>bleep. The support of Sinclar BASIC’sBEEPis complete. The conversion of parameters frombeeptobleepis fully factored and reusable. -
Add
?shift. -
Add
u.s. -
Add
inverse-onandinverse-off. -
Add
overprint-onandoverprint-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
]cland]1l. -
Add
contrast. -
Add
attr>ink. -
Add
default-bank-routineande-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>sconstantandfarsconstants>. -
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-driveand related code. Finally, the library can be used on any TR-DOS disk drive.
-
Fix storage of unresolved assembler references.
-
Fix
runtil,auntilandragain. -
Fix sound effects
laser-gun,ambulanceandwhite-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: Whenhpcrossed 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-fontforcold.colddidn’t set the default font. That was a subtle bug. In order to reuse code,set-fonthas 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-columnandlast-row. -
Fix needing of
??. -
Fix needing of
16hex.. -
Fix
error>ordinal, which was not updated. -
Fix and update
fyi. -
Fix
fzx-emit. -
Rename
beep>bleeptohz>bleep. The word does not convert the parameters of BASIC’sbeep, but hertzs. -
Fix requirement of
printable-ascii-char?. -
Fix and improve
whereandlist-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 theassemblervocabulary to the library, in order to useneed assemblerto load the new assembler when needed. Convert all words to the new assembler. -
Rewrite
ndropand2ndropwith 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-xtandsee-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>nametowordlist>name; renamewid>linktowordlist>link; rename.widto.wordlist; renamewid>vocabularytowordlist>vocabulary. addwordlist-name@andwordlist-name!; renamewid-oftowordlist-of; renamenamed-widtolatest>wordlist -
Improve
papery,brighty,flashy. -
Improve
permcolor. -
Rename
pauseto?frames, anddo-pausetoframes. The name "pause" was taken from BASIC but the new names are clearer, and consistent withmsandseconds. Add a newpauseafter 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
columnsandrows. -
Improve
2avariable. -
Improve
?repeat. -
Improve needing of words to print numbers in radix.
-
Improve needing of control flow stack words.
-
Change the behaviour of
windowandset-window. Now they are more versatile. -
Document how data in headers space affect
>name. -
Replace
xdepth.with.depth;rename.xto.xs. -
Rewrite
color!andcolor-mask!in Z80. -
Rewrite
set-udg,get-udgandget-fontin Z80. -
Improve needing of 128K sound words.
-
Restore default behaviour of
.s..swas provisionaly modified some time ago to print unsigned numbers. Nowu.sdoes 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-xstacktoxstack. Makeallot-xstackandallocate-xstackmore 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 (inverseandoverprint). Rewriteset-paperandset-inkin Z80. -
Rename/modify
paperand 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
clsuse 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
spacesin Z80. -
Rename the variants of
typethat print on fields. Renametype-left,type-rightandtype-centertotype-left-field,type-right-fieldandtype-center-field, because they erase the field with padding spaces, and there will be a parallel set of words that don’t. Improvetype-center-fieldandtype-right-field. -
Improve
mode32-emitto be configurable. -
Rewrite
boundsin 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-charsandocr-first. Nowocr-charsandocr-firstare 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-pixeltoget-pixel; also in mode 176. -
Remove the old "system bank" code. The far-memory system made it unnecessary.
-
Convert
voc-linktolatest-wordlist. Now the wid is used as pointer to the previous word list. This method is simpler and clearer, andlatest-wordlistis a better name than the old fig-Forthvoc-link, which anyway relates to vocabularies. -
Rename
udg-charstodefault-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
exitafter conditional intepretation. The objective ofexitat 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
rshiftandlshift. 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
permcolorand2permcolordefiners. Hardly useful. -
Rename
colordefiner toattr-setter, and2colortomask+attr-setter. -
Remove
paper>attr. No need for this word.paperycan be used instead. -
Move
spanto the library. -
Move
!bank,c!bank,@bankandc@bankto the library. -
Move
upper,uppers,faruppersandlowersto the library. -
Modify
digit?to use thelowerroutine. -
Remove old unused implementations of
um*. -
Move
permanent-colorsto 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-blockandwrite-blockto the main file of the kernel, because they are identical in G+DOS, TR-DOS and +3DOS. -
Move TR-DOS
get-driveandcatto the library. -
Move
rec/trackto the kernel. -
Remove
lib-orderand family. These words were never used, because the method was not low-level enough:needhad 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
blockededitor, an alternative to the fig-Forth editor. Not fully tested yet. -
const,cconstand2const, 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 originalblockededitor 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-orderand?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-asciiandfartype-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 oldinternalmodule. -
Add VFX-like
module. An implementation of VFX’smoduleby 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-charactersand0udg>. -
Add
odd?. -
Add
set-font,get-font,set-udg,get-udg,rom-font. -
Add
even?. -
Add
case-sensitive,lower,lowers,farlowers. -
Add
udg-charsto 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
ifelseoperator.
-
Fix
:nonamewith the newcall,. -
Fix needing
d<>,trim,char,[char],word. -
Fix
+place. -
Adapt
moduleto far memory. -
Make
name<namecompatible 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
/holdandflooredenvironmental query strings. -
Fix grep expression in
fs2fba.sh. -
Fix and improve several issues in both assemblers. Main changes, in the
z80-asm,assembler: Fixjp>jrto manage also unconditional jumps; fixrelse,rwhileandruntil. -
Fix
jp>jr. -
Fix names of
im1,andim2,. -
Make
inverse-condandjp>jrz80-asm-safe. There were problems whenz80-asmwas loaded beforez80-asm,, becausez80-asmhas words homonymous with Forth words. -
Fix: Make
coldreset 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 -transienttotransient end-transient forget-transientand improve them. -
Update the Vim syntax file.
-
Add Vim ftdetect file.
-
Make
link@an alias, for speed. -
Make
wordsand family configurable. Sometimes it’s useful to see more information in a listing of words. Nowwords,wordlist-wordsandwords-likecan be configured with a deferred word. -
Add a configurable resume key to
~~control. -
Rewrite
lengthsin 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 fromneedand 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-blockwithliteral. -
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-0and+field-opt-0124. -
Make
negate6 T faster and 2 B smaller. -
Improve
~~controlto accept also any resume key. -
Rename
paper>toattr>paper. Rename>papertopaper>attr. Rewrite them in Z80. -
Increase return stack.
-
Define default
/kk. -
Improve
switch:with character and 2-cell clauses. -
Improve
exportwithalias. -
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
indexermodule. Part of the code can be shared with an alternative indexer under development. -
Show version-specific background image at startup.
-
Improve the
usermodule. 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
.lineto its proper module. -
Move code and list tools common to both editors to an independent module.
-
Rename Wong’s
arraytoavalueand extend it. -
Rename
c!set-bits,c!reset-bits,c!toggle-bitstocset,creset,ctoggle. -
Rename
c@test-bitsandc@test-bits?toc@andandc@and?. -
Rename
decodetosee. 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
-branchto+branch. The name was not consistent with?branchand0branch. -
Move
u.rto the library. -
Prepare the implementation of
use-fly-index, an alternative indexer. -
Move
storer,cstorer,2storerto a module. -
Remove old
get-orderandorder@from library. -
Move
sealto the library. -
Move
catchto the library. -
Combine small control structures into one module.
-
Combine small definers into one module.
-
Move
fartypeandfartype-asciito the library. -
Move
?leaveto the library. -
Move
warningsand family to the library. -
Move
search-wordlistto the library. -
Remove
blocks, a duplicate ofblk/disk. -
Move
doer-testto the tests module. -
Remove old unused
bank-boundary?. -
Replace
scrwithlastblkinloadandreload. -
Rename
~~showto~~info. -
Remove mutual needing of
n>r,nr>. -
Rename
?jr-rangeand?pageto?rel. The word is common to both assemblers but had different names. -
Rename module of
switch:, after the usual convention. -
Rename
>cell-stringto>bstring, which is completed with the new wordsc>bstringand2>bstring. -
Rename the
internalmodule words to extend it: Old:internal,external,moduleNew: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
exchangeto!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,adrawtordraw176,adraw176. These implementations use only 176 pixel rows of the screen, like Sinclair BASIC. They can be useful for conversions from BASIC. -
Convert
rdraw176to thez80-asm,assembler. -
Convert
inkey,get-inkeyto thez80-asm,assembler. -
Move kernel aliases after the words they point to. This change makes the output of
seeclearer in certain cases, because>namesearches the dictionary from oldest to newest definition. Anyway, this is the order aliases are defined outside the kernel. -
Rename
fromtoneed-from. This word is seldom needed.fromis a generic, more useful name in application context. -
Change the assembler of pixel graphic words. Convert all of them from the deprecated
z80-asmtoz80-asm,. -
Rename
wait-for-keytodiscard-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 usedspaninstead 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 byneedinstead 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,@bankandc@bankin Z80. -
Simplify
home. No need for specific versions ofhomefor the screen modes. Onlyat-xyhas to be reconfigured by the screen modes, if needed. -
Improve the address register module. The code still used direct jumps to
pushhlinstead 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
dumpandwdump. -
Improve the default
casewithalias.
-
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 theassemblerword 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.-1is defined with the former code oftrue, andtrueis 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
gcdoperator. -
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
blkschecker. -
Add
lib-order. So far the library must be one single disk.lib-order,set-lib-orderandget-lib-orderwill 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 byneedyet, so they are useless at the moment. -
Build disks for +3DOS (the library can not be accesed yet).
-
Add
ref-xdpbto the +3DOS version. -
Add
first-udgandudg-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-addrandpixel-attr-addr. -
Add
store-bench. -
Add
allot-xstack. -
Add
rec/track.
-
Fix
>bodyandbody>. 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-namewith?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-hereandrestore-herewas wrong. -
Fix requisite of "Siderator 2".
-
Fix
load-appto 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,
vocabularycan be moved to the library, even if there are three vocabularies in the kernel (root,forthandassembler). 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 withvocabularyor 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
decodetool. Improve the check incolon-cfa?. Compactdecode-special. -
Improve compilation of 8-bit literals.
literalis replaced with the new word1literalininterpret-table. This causes 8-bit literals will be compiled bycliteralinstead ofliteral, what saves one byte of data space and is faster at run-time.cliteralwas 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,1and2. These byte constants have been rewritten as code words. This makes them faster. -
Improve
constantandcconstant. 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
soundinstead ofsound:, and when they are executed they just play instead of returning the address of its data. -
Improve
sector-idfor G+DOS. -
Improve needing of
<is>,[is]andis. No<is>and[is]can be needed apart. -
Improve
pixels. -
Improve documentation of
attrand related words.
-
Move
vocabularyto library; adaptassembler. -
Use
wordlistforparse-escaped-string. No need to usevocabularyfor a standard tool. -
Move
thereto the library. -
Reuse the code of
noopto 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-blocktoerrors-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-sectorreturn an ior. -
Remove G+DOS' old
set-library-disk.set-library-diskandget-library-diskare superseded byset-lib-orderandget-lib-order, which are implemented but not used bylocateyet. -
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 makesinverta 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
xstacktoallocate-xstack. -
Make
(pixel-addr)deferred.
Released on 2016-05-18.
-
Finish
refill, improve-→. Nowrefillsupports blocks.-→has been rewritten after it. -
Fix
[else]withrefill: Now[if]can cross block boundaries. -
Fix
to,2toandcto. -
Add
load-app. -
Fix
parse-all(wasparse-line); finishexecute-parsing. -
Move
evaluateandstring>sourceto the library: These words are not used in the kernel, andevaluatecan 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,toand their variants: The default versions (standardvalueandto, and non-standard2value,2to,cvalueandcto) have been combined into one single module, rewritten as aliases and documented. The standard alternative versions ofvalue,2valueandtohave been documented. -
Rename non-parsing
value/totoval/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 ofinterpretandcompile-onlythat 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.hexanddecimalhave been documented. -
Rename
hidedto the correcthidden. -
Move
>bodyandbody>to the library. -
Improve
up: Nowupis 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-latestback 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
nextcasetorepeatcase; improve its doc. -
Rename
settostorerand improve it. -
Rename
chantochannel. -
Improve
compare: faster code. -
Improve and document
overprint; move it to the library. -
Improve and document
inverse; move it to the library. -
Improve
paperandink. -
Improve the
indexertool: no data space used anymore. -
Add
?(. -
Add
need-here. -
Move
warningscontrol to the library.
-
Fix
borderand 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,2colorand related words. -
Add
cstorer. -
Add
dup>r. -
Add
eitherandneither. -
Add
holds. -
Add
lineload. -
Add
ruler. -
Add
splitandjoin. -
Add
string-parameter. -
Add
type-left,type-center,type-right. -
Add
warning". -
Add
words#. -
Add color system variables.
-
Factor
.unusedfromgreeting. -
Factor
permanent-colorsfromink. -
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
charsan alias ofnoop, not a deferred word. -
Make
fromandlocateoptional. -
Make pictured output string buffer configurable.
-
Make the faster
<definitive. -
Move
[compile]to the library. -
Move
defer@to the library. -
Move
printerto library. -
Remove
(i). -
Remove
transfer-mode. -
Remove unnecessary
spacefrom.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-Forthlatestis renamed tocurrent-latest). -
Add
latestxtandlastxt. -
Fix
recurseand: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-typetotype-ascii. -
Improve definition of UDGs.
-
Improve printing of UDGs at graphic coordinates.
-
Add
/!,!,2/!,2!. -
Move
charand[char]to the library. -
Move
cliteralto the library. -
Move
;codeto the library. -
Move
2rdropto the library. -
Move
pickto the library. -
Move
nextnameto the library. -
Move
:nonameto the library. -
Move
get-default-bankandset-default-bankto the library. -
Improve the error code of
located. -
Replace
bswithbackspaceindump. -
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
jandk.
-
Add
realias. -
Improve
dnegate. -
Add
wait-for-key. -
Improve
system-bank. -
Improve
upper. -
Renamed the math library files with a common root.
-
Move
recurseto the library. -
Add
(source-id). -
Move
!sandc!sto 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-displayandrestore-display.
Released on 2016-04-09.
-
Fix, improve and finish the
argumentsimplementation 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-executelibrary module.
Released on 2016-04-03.
-
Adapt some library words to DTC.
-
Fix the DTC version of
decodeand remove its ITC version. -
Add
docolonto the kernel, needed bydecode. -
Add
cslitand an alternative definition ofcsliteralto the library. -
Improve
decodewith 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, andbasewas 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
numberto the library. -
Make
.\"independent froms\". -
Replace Z80 jumps to the
push_hlentry point of the inner interpreter with apush hland the usualjp (ix)(jump tonext). This saves 2 CPU cycles and needs no additional bytes. Benchmarks are 1% faster. -
Add
jppushhlto 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,<resolveandthento aliases. -
Remove
next2, which is unnecessary in DTC; updatepauseandexecute-hlaccordingly. -
Update some development benchmarks.
-
Reorganize the source, binary and temporary files into directories.
-
Add the
bank-startconstant. -
Add
save-hereandrestore-here. -
Add the
code-banktool (not tested yet). -
Modify the file words to return a standard ior.
-
Modify
mode42andmode64to implement alternative versions that use the code bank. -
Convert
>widandwid>to aliases. -
Add
+under. -
Update the implementation of
wordlistandvocabulary. -
Replace
get-order. -
Add
set-default-bank,get-default-bankanddefault-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
inkeytoget-inkey. -
Rename the two versions of
key??, which are interrup-independent, toget-key?andfast-get-key?. -
Fix
-suffix. -
Add
for-ifor thefor steploop. -
Rename
ditodfor-ifor thedfor dsteploop. -
Rename the words of Wil Baden’s
casestructure 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,reneedandreneededmuch faster. -
Add
cell/,d10*andbitsto 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.