diff --git a/6502/C64/COPYING b/6502/C64/COPYING index 7949c26..9b2d58b 100644 --- a/6502/C64/COPYING +++ b/6502/C64/COPYING @@ -1,4 +1,4 @@ -Copyright (c) 1985-2006, Forthgesellschaft e.V. (www.forth-ev.de) All rights +Copyright (c) 1985-2023, Forthgesellschaft e.V. (www.forth-ev.de) All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/6502/C64/Makefile b/6502/C64/Makefile index a795e13..42b230b 100644 --- a/6502/C64/Makefile +++ b/6502/C64/Makefile @@ -9,14 +9,20 @@ vf_fth_files = $(wildcard src/vf-*.fth src/v4th*.fth) vf_fth_files_petscii = $(patsubst src/%, cbmfiles/%, $(vf_fth_files)) vf_flavours = \ v4thblk-c64 v4thblk-c16+ v4thblk-c16- \ - v4th-c64 v4th-c16+ v4th-c16- v4th-x16 + v4th-c64 v4th-c16+ v4th-c16- v4th-x16 v4th-x16e vf_binaries = $(patsubst %, cbmfiles/%, $(vf_flavours)) +all_src_files = $(wildcard src/*.fth) +all_src_files_petscii = $(patsubst src/%, cbmfiles/%, $(all_src_files)) + test_files = $(wildcard tests/*.f*) test_files_petscii = $(patsubst tests/%, cbmfiles/%, $(test_files)) test_logs = $(patsubst %, test-%.log, $(vf_flavours)) test_resuls = $(patsubst %, test-%.result, $(vf_flavours)) +release_zipfile = volksforth-6502-c64-release.zip + + # Target to convert all .d64 images into .fth files for easier reading, # and to update all PETSCII files in cbmfiles to the latest state of # the corresponding ASCII files in src. @@ -24,7 +30,8 @@ update: $(vf_blk_fth_files) $(vf_fth_files_petscii) clean: - rm -f cbmfiles/*.fr cbmfiles/*.fth cbmfiles/*.log tmp/* + rm -f cbmfiles/*.fr cbmfiles/*.fth cbmfiles/*.log + rm -rf tmp/* release rm -f *.log *.result *.golden rm -f cbmfiles/c??-testbase rm -f disks/scratch.d64 emulator/sdcard.img @@ -56,16 +63,37 @@ run-testbase16: emulator/testbase16.T64 VICE=xplus4 emulator/run-in-vice.sh testbase16 +release: release/$(release_zipfile) + +release/$(release_zipfile): $(vf_binaries) \ + $(all_src_files) $(all_src_files_petscii) \ + $(test_files) $(test_files_petscii) COPYING RELEASE_NOTES.md + rm -rf release + mkdir release + rm -rf tmp + mkdir tmp + mkdir tmp/binaries + mkdir tmp/src + mkdir tmp/src_petscii + mkdir tmp/tests + mkdir tmp/tests_petscii + cp -p COPYING RELEASE_NOTES.md tmp/ + cp -p $(vf_binaries) tmp/binaries/ + cp -p $(all_src_files) tmp/src/ + cp -p $(all_src_files_petscii) tmp/src_petscii/ + cp -p $(test_files) tmp/tests/ + cp -p $(test_files_petscii) tmp/tests_petscii/ + (cd tmp && zip -r ../release/$(release_zipfile) *) + + # Targetcompiler targets cbmfiles/tcbase: emulator/v4th-c64-4tc.T64 emulator/build-tcbase.sh \ disks/tc38q.d64 disks/file-words.d64 cbmfiles/tc-base.fth emulator/build-tcbase.sh -$(vf_binaries): emulator/tcbase.T64 emulator/build-vf.sh \ - disks/tc38q.d64 $(vf_fth_files_petscii) - -$(vf_binaries): cbmfiles/logtofile.fth +$(vf_binaries): $(vf_fth_files_petscii) emulator/build-vf.sh \ + emulator/tcbase.T64 disks/tc38q.d64 cbmfiles/logtofile.fth cbmfiles/v4thblk-c64: emulator/build-vf.sh v4thblk-c64 @@ -88,6 +116,9 @@ cbmfiles/v4th-c16-: cbmfiles/v4th-x16: emulator/build-vf.sh v4th-x16 +cbmfiles/v4th-x16e: + emulator/build-vf.sh v4th-x16e + # Core test targets @@ -138,30 +169,13 @@ test-v4th-x16.log: cbmfiles/v4th-x16 emulator/sdcard.img mcopy -i emulator/sdcard.img ::TEST.LOG cbmfiles/test.log petscii2ascii cbmfiles/test.log $@ -test-v4th-x16-39.log: $(test_files_petscii) emulator/run-in-vice.sh - -test-v4th-x16-39.log: cbmfiles/v4th-x16 emulator/sdcard.img +test-v4th-x16e.log: cbmfiles/v4th-x16e emulator/sdcard.img rm -f cbmfiles/test.log - emulator/run-in-x16-39.sh v4th-x16 \ + emulator/run-in-x16emu.sh v4th-x16e \ "include run-std-tests.fth\n1234567890" mcopy -i emulator/sdcard.img ::TEST.LOG cbmfiles/test.log petscii2ascii cbmfiles/test.log $@ -test-v4th-x16-39.golden: test-v4th-x16.golden - cp $< $@ - -test-v4th-x16-41.log: $(test_files_petscii) emulator/run-in-vice.sh - -test-v4th-x16-41.log: cbmfiles/v4th-x16 emulator/sdcard.img - rm -f cbmfiles/test.log - emulator/run-in-x16-41.sh v4th-x16 \ - "include run-std-tests.fth\n1234567890" - mcopy -i emulator/sdcard.img ::TEST.LOG cbmfiles/test.log - petscii2ascii cbmfiles/test.log $@ - -test-v4th-x16-41.golden: test-v4th-x16.golden - cp $< $@ - test-%.result: test-%.log test-%.golden tests/evaluate-test.sh rm -f $@ tests/evaluate-test.sh $(basename $@) @@ -201,6 +215,10 @@ test-v4th-x16.golden: $(patsubst %, tests/golden/%.golden, \ prelim core coreext double report-noblk) cat $^ > $@ +test-v4th-x16e.golden: $(patsubst %, tests/golden/%.golden, \ + prelim core coreext double report-noblk) + cat $^ > $@ + # Rules for building Forth binaries on top of the plain vanilla # c64-volksforth83. @@ -214,18 +232,22 @@ cbmfiles/devenv: emulator/run-in-vice.sh emulator/build-devenv.sh \ emulator/%.T64: cbmfiles/% bin2t64 $< $@ + touch -m -r $< $@ # Generic rule for populating cbmfiles/ with PETSCII text files cbmfiles/%.fth: src/%.fth ascii2petscii $< $@ + touch -m -r $< $@ cbmfiles/%.fth: tests/%.fth ascii2petscii $< $@ + touch -m -r $< $@ cbmfiles/%.fr: tests/%.fr ascii2petscii $< $@ + touch -m -r $< $@ # Generic rule for converting .d64 blk sources into .fth files. diff --git a/6502/C64/RELEASE_NOTES.md b/6502/C64/RELEASE_NOTES.md new file mode 100644 index 0000000..1361cb0 --- /dev/null +++ b/6502/C64/RELEASE_NOTES.md @@ -0,0 +1,45 @@ +# VolksForth 6502 C64 Releases + +Release notes of VolksForth for 6502 on CBM-like machines (C64/C16/X16) + +## Release content + +The latest release zip file `volksforth-6502-c64-release.zip` contains + +* `binaries/` - the compiled VolksForth binaries, namely: + * `v4th-c64` - minimal C64 kernel + * `v4thblk-c64` - C64 kernel with added block words + * `v4th-c16-` - minmal C16 kernel using 32k RAM + * `v4thblk-c16-` - C16 kernel using 32k RAM with added block words + * `v4th-c16+` - minmal C16 kernel using 63k RAM + (with bank switching) + * `v4thblk-c16+` - C16 kernel using 63k RAM with added block words + * `v4th-x16` - minmal Commander X16 kernel + * `v4th-x16e` - Commander X16 kernel with added X16Edit and + DOS commands + +* `src/` - sources + * `v4th*.fth` - the binaries' main files + * `vf-*.fth` - sources from which VolksForth + kernels are compiled + * further Forth sources + +* `src_petscii/` - the files from `src/` converted to PETSCII + +* `tests/` - the test files used to validate VolksForth builds + +* `tests_petscii/` - the files from `tests/` converted to PETSCII + +## Versions +The following version descriptions areonly valid for VolksForth 6502 +C64 Releases. As of now (Dec 2023), the different VolksForth platforms +(6502, 68k, 8080, 8086) don't have shared code or shared versioning. + +### VF 6502-C64 3.9.5 + +This release adapts the X16 VolksForth to the R46 ROM. +It also adds an X16 binary with added words to invoke the +ROM-based X16Edit (XED), to list directories and files (DIR and CAT) +and to issue DOS commands and read the error channel (DOS). + +For C64 and C16 this release should be a no-op. diff --git a/6502/C64/cbmfiles/v4th-x16e b/6502/C64/cbmfiles/v4th-x16e new file mode 100644 index 0000000..98dcaeb Binary files /dev/null and b/6502/C64/cbmfiles/v4th-x16e differ diff --git a/6502/C64/emulator/run-in-x16-39.sh b/6502/C64/emulator/run-in-x16-39.sh deleted file mode 100755 index 6713240..0000000 --- a/6502/C64/emulator/run-in-x16-39.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -set -e - -emulatordir="$(realpath --relative-to="$PWD" "$(dirname "${BASH_SOURCE[0]}")")" - -export PATH="${HOME}/x16-r39:${PATH}" -echo "PATH = ${PATH}" -"${emulatordir}/run-in-x16emu.sh" "$@" diff --git a/6502/C64/emulator/run-in-x16-41.sh b/6502/C64/emulator/run-in-x16-41.sh deleted file mode 100755 index 89487d4..0000000 --- a/6502/C64/emulator/run-in-x16-41.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -set -e - -emulatordir="$(realpath --relative-to="$PWD" "$(dirname "${BASH_SOURCE[0]}")")" - -export PATH="${HOME}/x16-r41:${PATH}" -echo "PATH = ${PATH}" -"${emulatordir}/run-in-x16emu.sh" "$@" diff --git a/6502/C64/src/v4th-x16e.fth b/6502/C64/src/v4th-x16e.fth new file mode 100644 index 0000000..907f686 --- /dev/null +++ b/6502/C64/src/v4th-x16e.fth @@ -0,0 +1,31 @@ + +\ with build log: +' noop alias \log +\ without build log: +\ ' \ alias \log + +\log include logtofile.fth + +include vf-tc-prep.fth + +\log logopen" v4th-x16e.log" + +include vf-trg-x16.fth + +\ The actual volksForth sources + +include vf-head-x16.fth +include vf-cbm-core.fth +include vf-sys-x16.fth +include vf-cbm-file.fth +include vf-cbm-dos.fth +include vf-x16edit.fth +include vf-finalize.fth + 9f00 ' limit >body ! 9b00 s0 ! 9f00 r0 ! +include vf-memsetup.fth + +include vf-pr-target.fth +.( target compile complete) cr +\log logclose + +quit diff --git a/6502/C64/src/vf-sys-x16.fth b/6502/C64/src/vf-sys-x16.fth index 1ec73e1..802617b 100644 --- a/6502/C64/src/vf-sys-x16.fth +++ b/6502/C64/src/vf-sys-x16.fth @@ -7,10 +7,10 @@ include vf-lbls-cbm.fth 0ffd2 >label ConOut 0febd >label KbdbufPeek - 0287 >label IOStatus + 0287 >label IOStatus \ aka status 028d >label MsgFlg 09f2c >label BrdCol - 0376 >label BkgPenCol + 0376 >label BkgPenCol \ aka color 0381 >label CurFlg \ aka qtsw 0385 >label InsCnt \ aka insrt diff --git a/6502/C64/src/vf-x16edit.fth b/6502/C64/src/vf-x16edit.fth new file mode 100644 index 0000000..987d90a --- /dev/null +++ b/6502/C64/src/vf-x16edit.fth @@ -0,0 +1,15 @@ + +$0001 | constant RomBank +create xed-banks 1 c, $ff c, \ first and last RAM bank xed uses. + +| Code (xed? ( -- f ) + $4c # lda $c000 cmp 0= ?[ $c003 cmp 0= ?[ $c006 cmp 0= ?[ + Push0A jmp ]? ]? ]? txa Push0A jmp end-code + +| Code (xed ( -- ) + xed-banks ldx xed-banks 1+ ldy $c003 jsr + xyNext jmp end-code + + : xed ( -- ) + bl word count $4 ! $2 ! RomBank c@ $d RomBank c! + (xed? IF (xed RomBank c! ELSE RomBank c! ." no x16edit" THEN ;