All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Exception support with CATCH and THROW.
- ABORT and ABORT" throw exceptions -1 and -2.
- S" now works in interpretation mode. It returns a transient buffer.
- 0> to compat.
- V: crash when entering ":w!"
- An improved SEE which should decode most colon words.
- "durexForth vx.x.x" boot message.
- RDERR: read and print error channel of current device.
- ERASE, PARSE, TRUE, FALSE, SPLIT, END-CODE
- S" max string length is reduced to 255 characters.
- S" and .( no longer support multiple lines.
- ( now only supports multiple lines when reading from text file.
- Define MML strings using MML"
- Changed REFILL to Forth standard behavior: Fill the input buffer from the input source, returning true if successful.
- Do not print "ok" while compiling. Makes it easier to re-enter multi-line word definitions in interpreter.
- Moved tests to a separate disk (tests.d64).
- gfx: Renamed ERASE to PEN.
- #> (the pictured numeric output string buffer) now uses its own buffer chopped from the end of PAD.
- CHAR no longer does REFILL on missing text.
- EVALUATE now accepts multi-line strings.
- ( refills to accept multi-line comments when parsing EVALUATE strings.
- Defining words based on HEADER now abort with an error on missing text.
- GETC, 100/, INTERPRET, ;CODE (replace with: RTS, END-CODE)
- DOWORDS incorrectly quit for some non-false xt return values.
- POSTPONE error handling.
- Documented DEFCODE, #S, D+
- LOADB/SAVEB/DOS hang on device not present.
- LOADB changed current file.
- REQUIRE(D) stopped working after 16 INCLUDE(D) files.
- Undefined behaviour after loading base.fs. broke in 1.5.1.
- V: allow entering control characters inside quotes only.
- V: visual bug when saving.
- SAVEB did not restore input stream.
- turtle: BACK did not go back.
- QUIT could fail to reinitialize graphics.
- Various maintenance patches.
- OPEN/CHKIN/CHKOUT no longer return a file number.
- IOABORT no longer accepts a file number.
- INCLUDED now prints error message on failed OPEN.
- REQUIRED now aborts with "too many" if 16 files are already INCLUDED.
- V: Moved text buffer to $a000-$cbff.
- Moved and shrunk PAD area.
- Optimized * / EXIT C! C@ 0=
- Data stack effects of :/;/:NONAME/DEFINE. Starting with 2.0.0, :/:NONAME/DEFINE would put a value on the data stack, to be later consumed by ;. This is no longer the case.
- BYE, SEE, XT>
- HIDDEN word header flag.
- LOADB/SAVEB could change active device.
- IOABORT did not print all error messages.
- REFILL would not properly switch back to keyboard after EOF.
- Cartridge initialization for Ultimate64.
- Press RESTORE to QUIT. (v3.0.0 inadvertedly changed this to RUN/STOP+RESTORE.)
- V: Abort when loading a text file bigger than 44 blocks = 11,176 bytes.
- V: Inserting SHIFT+RETURN would make things weird.
- V: Improved I/O error handling.
- sid-demo broke in 2.0.0.
- :NONAME did not work with RECURSE.
- Rewrote UD/MOD in assembly
- Dictionary restructured, now header and code data are split.
- Header data is not a linked list, and grows downward from $9fff. Record structure:
len_flags | str | xt
- LATEST changed from VARIABLE to VALUE
- V internal words hidden, BUFSTART no longer variable, fixed at $7000.
- Restore key is clean NMI, Run/Stop Restore to QUIT
- FIND-NAME now returns a name token per the standard proposal
- LS abort on LOADB error, PAGE upon success.
- LS now accepts wildcards, drive #'s or not.
- RDIR improve placement of MORE.
- Prompt displays
ful
when there is less than 256 bytes of dictionary space left.
- RDIR will display directory formatted data anywhere in memory.
- PAD Scratch pad memory set to cassette buffer. Untouched by DurexForth
- DOWORDS, which allows executing an xt for every word in the wordlist
- Turn-key operation utilities in TURNKEY:
- SAVE-PACK packs the dictionary together before saving, which unpacks at runtime.
- SAVE-PRG removes the dictionary and saves the program
- TOP returns the address of the last byte of the header structure. The value at this address will always be 0.
- TOP! can be used to specify the position of header data.
- HIDE removes a word from the word list, while leaving its definition in place.
- DEFINE assigns HERE to a word in the word list and begins compilation.
- DEFCODE does the same as DEFINE, but begins a CODE: segment instead.
- V commands: A, R, +, -, HOME, e, C, D, s, S, H, L, M, ^w, f, F
- Words for file and device IO in OPEN: and IO:
- Utility for drive status and DOS commands in DOS:
- BRK vector was redirected to QUIT
- RS232: NMI vector was redirected to QUIT
- SP-X! had bug in most significant bit
- GFX: PEEK fetched bitmap pixels from ROM instead of RAM
- V did not compile in DECIMAL mode.
- Documented SEE concatenating subsequent :NONAME
- Made QUIT do CLRCHN instead of CHKIN
- Made QUIT close all open files.
- Removed undocumented >DFA, OPENW and CLOSEW words.
- Startup BASE is now DECIMAL instead of HEX.
- S" now only works when compiling.
- Renamed VI to V, to avoid confusion with vi.
- Renamed >CFA to >XT.
- :NONAME, BYE, /STRING, PARSE-NAME, FIND-NAME
- VICE label dumper. 'include viceutil' and DUMP-LABELS to generate a label file for VICE debugging.
- V: * and n commands
- Evaluating an INCLUDE would corrupt the evaluated string. Broke in 1.6.7.
- Code stripping tutorial did not work.
- WORD did not work while interpreting.
- REQUIRED marked a file as included even if it was not found.
- MARKER did not reset REQUIRED state.
- V: / was broken when searching for a single character.
- V: q: switched in BASIC rom.
- V: error when clearing buffer with dd.
- V: cancelling :w! changed the active filename.
- when parsing, treat shift+space like space. it used to be like this but accidentally (?) changed in 1.6.0.
- include, included would clobber the text input buffer.
- sprite: sp-data now use . instead of bl to set 0 bits
- forth: accept now reads keyboard only
- sprite: sp-on, sp-off had inverted sprite number
- gfx: text now supports upper/lower case
- editor: fixed dd crash at end of buffer
- editor: slower key repeat settings
- editor: made f7 work in insert mode
- forth: INCLUDED now interprets the file
- forth: added ?DO
- forth: added DEFER DEFER! IS to compat
- forth: made loadb return address after last written byte
- debug: made see show branch
- bring back float module
- forth: various see improvements
- forth: moved >body to compat
- forth: evaluate failed for strings that ended at page boundary
- forth: print error in case include fails
- forth: space optimize of
- forth: moved 2over, 2swap to compat
- cart: made cartridge boot faster
- cart: use Simons' Basic cart type to make $a000-$bfff RAM
- editor: starting without filename now doesn't read from disk
- editor: :w on unnamed buffer now prints "no filename"
- forth: now available as a 16 kB cartridge image. the cartridge has the same functionality as the disk version, but boots faster.
- forth: removed gfx from standard modules
- forth: dropped all usage of BASIC (including float module)
- forth: moved rarely used words to compat module
- asm: renamed zptmp zptmp2 zptmp3 => w w2 w3
- asm: renamed sp0 sp1 => lsb msb
- gfx: moved bitmap graphics area from $8c00-$8fff, $a000-$bfff to $cc00-$cfff, $e000-$ffff
- doc: expanded assembler documentation
- editor: removed fg
- bugfix: vi :w didn't work with filenames longer than 6 characters
- bugfix: vi :w! captured control characters in filename
- bugfix: changed vi :w to avoid 1541 bugs
- editor: improved feedback when saving
- editor: stop using backup files
- forth: added require, required
- doc: documented assembler, sid
- bugfix: various fixes for evaluate/vi F7
- bugfix: find now handles the empty string correctly
- bugfix: editor didn't work correctly with big files (over $1000 bytes)
- forth: the interpreter now prints "ok" after interpreting
- forth: abort" now inverts the text
- editor: open files with 'vi file' instead of 's" file" vi'
- editor: no longer possible to join lines by shift+backspace in insert mode
- bugfix: evaluate and vi F7 didn't work for multi-line buffers
- bugfix: see did not work on the latest word
- bugfix: e.g. 'A' was parsed as 'a'
- bugfix: case insensitivity did not work for z/Z
- editor: use fg to bring back editor instead of RESTORE
- disk: added include (e.g. "include gfx" loads gfx module)
- disk: added device ( device# -- ) to switch active device
- disk: renamed load => included
- forth: added marker
- forth: made dump work in decimal mode
- forth: made .( immediate
- forth: removed no-tce
- forth: bring back modules
- forth: made +loop work according to standard
- forth: added support for #, $, %, char parsing. e.g. #123, $d020, %1001001, 'z'
- forth: ' now aborts if it does not find a word
- forth: made "type" disable c64 quote mode (fixes "words")
- forth: state ( -- flag ) changed to state ( -- addr )
- forth: added count, >body, <#, #>, hold, sign, #, #s, >number, move, accept
- forth: removed hide, hide-to, hidden, forget, scratch, cmove, cmove>
- forth: fixed yet another tail call elimination crash
- forth: made while/repeat implementation conform to standard
- forth: made word conform to standard
- forth: made "immediate", "no-tce" non-immediate
- forth: made sure immediate does not toggle
Thanks to polluks for suggestions!
- bugfix: disabled tail call elimination for literal ['] [char] to avoid some crashes
- bugfix: <, rshift, u. did not support negative numbers
- forth: made word finding + numbers case insensitive
- forth: renamed char to getc, and added a new char that works according to the Forth 2012 standard.
- forth: added abort, abort", 2@, 2!, char+, chars, align, aligned
- forth: key, key? now work only with keyboard
- forth: made quit reset input and fall back to keyboard
- forth: fill ( ch addr len ) changed to fill ( addr len ch )
- forth: allot ( -- n ) changed to allot ( -- )
- forth: made base a variable instead of a value
- forth: changed variable; data field is now after code field
Thanks to Christian Johansson for suggestions!
- forth: / now uses floored signed division
- forth: bugfix for negative number parsing (2- was interpreted as -20)
- forth: made 2/ sign-extend negative numbers
- forth: added spaces source >in 2over 2swap m+ m* sm/rem fm/mod dabs dnegate s>d
- forth: changed word order of double-cell integers
- editor: backspace on start of line now doesn't join lines
- doc: mention in tutorial that default is hexadecimal
Thanks to Christian Johansson and polluks for suggestions!
- forth: added u. unloop leave cell+ cells page key?
- forth: allow input of negative numbers
- forth: optimized cmove, cmove>
- forth: made . print signed numbers
- forth: various bugfixes
- doc: simplified & improved intro + tutorial
- editor: bugfix, exiting editor disabled key repeat
Thanks to Christian Johansson and polluks for bug reports!
- forth: made +loop work like it should
- forth: removed <=, >=
- forth: renamed <, > to u<, u>
- forth: renamed s<, s> to <, >
- forth: renamed d* to um*
- forth: optimized loop, r>, >r, r@, i
- forth: disabled tail call elimination for (
- editor: faster key delay+repeat
- editor: hid fg
- editor: various bugfixes
- doc: documented min, max, within
- renamed EOL comment # to \ (PC) or £ (C64)
- renamed :asm => code
- renamed ;asm => ;code
- renamed tell => type
- disabled tail call elimination for s" : ]
- minor optimizations
- forth: added tail call elimination, i.e., the practice of replacing jsr/rts with jmp. words that should not be subject to tail call elimination must be tagged with "no-tce".
- forth: renamed jsr => sys
- forth: renamed immed => immediate
- forth: added postpone
- forth: removed [compile]
- forth: inline drop, 2drop
- forth: durexForth is now subroutine threaded instead of direct threaded. This gives a huge speed improvement, at the cost of increased RAM usage.
- forth: added "compile," word.
- disk: improved EOF handling.
- editor: bugfixed CTRL+u/d.
- editor: bugfix: "fg" was by mistake hidden.
- doc: added inline assembly example.
- doc: bugfixed turtle graphics demo.
- editor: changed half-page scrolling from U/D to CTRL+u/d
- editor: many bugfixes and optimizations
- forth: many small optimizations
- forth: made cmove> ANS Forth compliant
- doc: updated memory map documentation
- switched to dual parameter stack that is split up in MSB/LSB sections. this is a nice optimization!
- optimized "branch"
- renamed "var" to "variable"
- added "depth" (gives depth of parameter stack)
- added "sp0" (bottom address of LSB parameter stack)
- added "sp1" (bottom address of MSB parameter stack)
- removed "sp@"
- bugfixed & optimized "ls"
- moved zptmp, zptmp2, zptmp3 and ip to new locations
- changed ' ['] to be according to standard
- re-add sid.fs, which contains SID manipulation words
- bugfix . in mml player
- Music Macro Language (MML) support!
- Renamed some assembly mnemonics. asla, lsra, rora, rola, => asl,a lsr,a ror,a rol,a
- Allow strings longer than 256 bytes.
- Optimized jsr. (Thanks to Kevin Lee Reno!)
- Improved documentation, describe demos and fix some error in tutorial.
- Bugfixed some demos.
- "forget" did not handle missing word
- factor "more" to separate word
- improve seeing of do..loop
- Improved line buffering, removed "linebuf"
- Added assembler labels
- Added "base", "hex", "decimal"
- Renamed "exec" => "execute"
- Added "[char]"
- Added some support for floating point values (float.fs)
- Removed "?immed"
- Made "words" pause when screen is full
- Added "lshift", "rshift"
- Added demo how to modify character ROM
- Optimizations, bugfixes, more documentation
- math: added um/mod, */, */mod
- loops: added do, loop, +loop, i, j
- interpreter: make key up recall previous line entered
- bugfixed r@
- dropped "not" word - replaced by 0=
- rearranged zeropage usage so that parameter stack is a bit bigger
- documented layout of forth words
- bugfixed docs: invert, not "not", flips all bits
- added "bl" word (for space)
- Added create/does>
- Removed fg word - just use vi
- Renamed dec to decimal
- Make c. add trailing space
- Split up ." in ." (compile-time) and .( (run-time)
- Various small improvements
- Some pretty good speed and size optimizations.
- Removed rdrop.
- Bugfixed erase, see
- Removed 2swap, number
- Moved editor buffer from 5000 to 6000, giving more space for code
- Make "fg" fail if editor buffer has been overwritten by code
- Improved border flashing + cursor blinking during compile
- Improved error handling further
- Minor optimizations
- Handle failed compiles better. Now it will not be necessary to reboot computer that often.
- Editor:
- After pressing F7 to compile & run, Restore brings you back to editor.
- "vi" with empty stack now starts editor with empty buffer.
- Added yy command.
- Various bugfixes.
- Bugfix text, ldx,
- Rename jsr-wrap to jsr
- Added 100/.
- Change blkcol to take column, row instead of x, y.
- Updated documentation.
- Added hi-res graphics module.
- Added sinus/cosinus module.
- Added 2*, 2/, s<, s>, abs, negate, 0<, d*.
- Assembler: Added :+, :-, +branch
- Bugfix s" - now it behaves the same in compile and immediate mode.
- Removed cells, 0>, write, char.
- Updated documentation.
- Made "load" load byte-by-byte again.
- Added hexdec, ls modules by Kevin Reno.
- Various bugfixes and optimizations.
- Added experimental sid module.
- Added hide.
- Removed land.
- Bugfixed not, invert, c@.
- Assembler: Added lbl, -branch, :asmsub, ;asmsub
- Editor
- Renamed edit => vi.
- Renamed 0: => g
- Speed-ups, bug-fixes
- Initial version uploaded to CSDB.