Skip to content

VolksForth 6502-C64 3.9.6

Latest
Compare
Choose a tag to compare
@pzembrod pzembrod released this 04 Oct 21:21
· 80 commits to master since this release
f8dd7b3

Main topic of this release is the removal of all usages of Kernal variable
uses esp. in the X16 VolksForth kernel. Because the addresses of Kernal
variables can change between different X16 Kernal releases, their use was in
the past the main reason why VolksForth broke after new X16 ROM releases.

With Kernal variable access replaced by Kernal API calls or by emitting
control characters, the VolksForth kernel should now be much more robust
when the X16 Kernal changes.

A secondary topic if this release is more bundled Forth sources, which are
now also better described (see Release content above).

And a third topic is the beginning of an English translation of the
original German VolksForth/UltraForth manual for C64 and C16.
Since this release affects some multitasking behaviour, the translation
was started with the chapter about the multitasker.

Changes affecting only the X16 VolksForth kernel:

  • Clearing the IOStatus is now possible through the ExtApi call ($FEAB, thanks
    to mooinglemur for implementing this), so the dependency on the address of
    IOStatus could be removed.
  • The implementation of line input in EXPECT was changed from switching cursor
    on and off and using GETIN to using BASIN - which automatically handles the
    cursor and also makes use of the CBM screen editor. The Kernal var dependency
    that came with switching the cursor on and off is now removed.
    The downside is that the
    cooperative multitasker now can't run tasks during line input. The old
    tasker-compatible EXPECT is now available as separtate source
    x16input-tsk.fth. For details on this see tasker.md.
  • The clearing of the Kernal variables QtSw and Insrt after each
    char written to the console via CHROUT most likely has no real purpose.
    It was therefore removed from the X16 variant.
  • Up to version 3.9.5, the VolksForth kernel used BkgPenCol (X16: $0376)
    to set both background and pen color during initialization. It would be
    great ot have e.g. an ExtApi function to set BkgPenCol, similar to the
    X16 BASIC command COLOR. I'm planning to suggest this,
    but for the time being setting the background and pen color is
    instead done via PETSCII control codes instead. To reflect this change,
    the CBM VolksForth word INK-POT has been renamed to X16-INK-POT,
    and it contains only 3 values (border color code, background color PETSCII
    control charcter, pen color PETSCII control character. This removes the
    dependency on BkgPenCol and thereby on the last remaining Kernal variable
    that was used by VolksForth.

Changes affecting all VolksForth kernels (C64, C16, X16):

  • The direct clearing of MsgFlg (X16: $028d) at the beginning of
    (busin and (busout was removed; it shouldn't have had any real purpose.

The cooperative multitasker was extracted from the original disk 3 (see
disks/vforth4_3.fth)
into the files tasker.fth, multitask.fth and taskdemo.fth. The latter was
ported to the X16 as taskdemo-x16.fth.

rom-ram-sys.fth was split up into a C64 and a C16 flavour. There is no X16
equivalent; X16 bank switching poses challenges and opportunities completely
different from those on C16 and C64.

New sources added: lists,fth, tasker.fth, multitask.fth, taskdemo.fth, taskdemo-x16.fth, x16input-tsk.fth, tmp6502asm.fth, x16tmpheap.fth, rom-ram-c16.fth, rom-ram-c64.fth