Compare commits

...

12 Commits

Author SHA1 Message Date
Carsten Strotmann bda78c41f9
Merge pull request #44 from pzembrod/x16-r41
X16 r41
2022-09-05 12:20:11 +00:00
Philip Zembrod d6d38e13a4 Merge branch 'master' into x16-r41
# Conflicts:
#	6502/C64/src/vf-cbm-file.fth
2022-08-29 22:21:27 +02:00
Philip Zembrod 313b87d58d Update x16tmpheap.fth to prototype #2 board's bank switching address 2022-08-28 23:12:05 +02:00
Philip Zembrod c6716dced5 Update all binaries to 3.9.4 2022-08-28 23:06:41 +02:00
Philip Zembrod 2ff06c912a Add initial VERSIONS.ORG file with C64/C16/X16 versions 2022-08-17 23:04:25 +02:00
Philip Zembrod b670672a82 Update version in logo string from 3.9.3 to 3.9.4 2022-08-08 00:37:44 +02:00
Philip Zembrod 14f3eaf3ad Add comment about C16 OS bug workaround 2022-08-08 00:37:00 +02:00
Philip Zembrod 992fcfe751 Introduce the KEEPEMU environment variable into run-in-vice.sh that facilitated debugging. 2022-08-07 22:43:31 +02:00
Philip Zembrod 3a4eff97c4 Reduce the direct use of the Kernal variable IOStatus by using the Kernal API routine READST.
Also remove the code referencing the old R38 RAM/ROM bank switching registers.
Finally remove some unused Kernal variable labels.
2022-08-07 22:42:40 +02:00
Philip Zembrod 2c86e4809f Remove references to the Kernal variables InDev and OutDev which
are needed to implement BUSOFF via CLRCHN and which moved on X16
between r38 and r41 and will likely change again, and replace with
own variables and calls to UNLSN and UNTLK.
2022-07-31 23:54:37 +02:00
Philip Zembrod cae5f7c94d Get v4th-x16 to work with r41 of x16emu and x16 ROM.
Main change is that c64key? and getkey are implemented through new
Kernal API calls instead of direct reading the keyboard buffer.
A separate intermediate test target for r41 is introduced.
But also the main x16 target is switched to r41 now.
Also, the KEEPEMU env var is introduced to run-in-x16emu.sh
for debugging that has proved its usefulness in cc64 emulator scripts.
2022-07-31 21:56:33 +02:00
Philip Zembrod 6812352db3 Detect and message file-not-found condition in INCLUDE 2022-07-06 01:36:15 +02:00
26 changed files with 139 additions and 94 deletions

View File

@ -34,7 +34,7 @@ clean:
binaries: $(vf_binaries)
test: $(test_resuls) test-v4th-x16-39.result
test: $(test_resuls)
test64: std64 blk64
@ -93,66 +93,79 @@ cbmfiles/v4th-x16:
$(test_logs): $(test_files_petscii) emulator/run-in-vice.sh
test-v4thblk-c64.log: emulator/v4thblk-c64.T64 disks/scratch.d64
rm -f cbmfiles/test.log
test-v4thblk-c64.log: emulator/v4thblk-c64.T64 disks/empty.d64
rm -f cbmfiles/test.log disks/scratch.d64
cp disks/empty.d64 disks/scratch.d64
DISK9=scratch emulator/run-in-vice.sh v4thblk-c64 \
"include run-blk-tests.fth\n1234567890\n"
"include run-blk-tests.fth\n1234567890"
petscii2ascii cbmfiles/test.log $@
test-v4th-c64.log: emulator/v4th-c64.T64
rm -f cbmfiles/test.log
emulator/run-in-vice.sh v4th-c64 \
"include run-std-tests.fth\n1234567890\n"
"include run-std-tests.fth\n1234567890"
petscii2ascii cbmfiles/test.log $@
test-v4thblk-c16+.log: emulator/v4thblk-c16+.T64 disks/scratch.d64
rm -f cbmfiles/test.log
VICE=xplus4 emulator/run-in-vice.sh v4thblk-c16+ \
"include run-blk-tests.fth\n1234567890\n"
test-v4thblk-c16+.log: emulator/v4thblk-c16+.T64 disks/empty.d64
rm -f cbmfiles/test.log disks/scratch.d64
cp disks/empty.d64 disks/scratch.d64
VICE=xplus4 DISK9=scratch emulator/run-in-vice.sh v4thblk-c16+ \
"include run-blk-tests.fth\n1234567890"
petscii2ascii cbmfiles/test.log $@
test-v4th-c16+.log: emulator/v4th-c16+.T64
rm -f cbmfiles/test.log
VICE=xplus4 emulator/run-in-vice.sh v4th-c16+ \
"include run-std-tests.fth\n1234567890\n"
"include run-std-tests.fth\n1234567890"
petscii2ascii cbmfiles/test.log $@
test-v4thblk-c16-.log: emulator/v4thblk-c16-.T64
rm -f cbmfiles/test.log
VICE=xplus4 emulator/run-in-vice.sh v4thblk-c16- \
"include run-min-tests.fth\n1234567890\n"
"include run-min-tests.fth\n1234567890"
petscii2ascii cbmfiles/test.log $@
test-v4th-c16-.log: emulator/v4th-c16-.T64
rm -f cbmfiles/test.log
VICE=xplus4 emulator/run-in-vice.sh v4th-c16- \
"include run-std-tests.fth\n1234567890\n"
"include run-std-tests.fth\n1234567890"
petscii2ascii cbmfiles/test.log $@
test-v4th-x16.log: cbmfiles/v4th-x16 emulator/sdcard.img
rm -f cbmfiles/test.log
emulator/run-in-x16emu.sh v4th-x16 \
"include run-std-tests.fth\n1234567890\n"
"include run-std-tests.fth\n1234567890"
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
rm -f cbmfiles/test.log
emulator/run-in-x16-39.sh v4th-x16 \
"include run-std-tests.fth\n1234567890\n"
"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 $@)
disks/scratch.d64: disks/empty.d64
cp $< $@
emulator/sdcard.img: emulator/sdcard.sfdisk
rm -f $@ $@.tmp
dd if=/dev/zero of=$@.tmp count=64 bs=1M

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -11,7 +11,7 @@ rm -f "${basedir}/cbmfiles/devenv"
# load include and dos from file-words.d64 block 10 in drive 11.
# savesystem and then scratch file notdone to exit emulator.
keybuf="2 drive 19 load\n47 load\n1 drive 26 load\n3 drive 10 load\n\
savesystem devenv\ndos s0:notdone\n"
savesystem devenv\ndos s0:notdone"
DISK9=vforth4_1 DISK10=vforth4_3 DISK11=file-words \
"${emulatordir}/run-in-vice.sh" "c64-volksforth83" "${keybuf}"

View File

@ -11,7 +11,7 @@ rm -f "${basedir}/cbmfiles/tcbase"
keybuf="3 drive 20 load\n3 drive 10 load\nsave\n\
2 drive 4 load\ninclude tc-base.fth\n\
savesystem tcbase\ndos s0:notdone\n"
savesystem tcbase\ndos s0:notdone"
DISK10=tc38q DISK11=file-words "${emulatordir}/run-in-vice.sh" \
"v4th-c64-4tc" "${keybuf}"

View File

@ -15,7 +15,7 @@ rm -f "${basedir}/cbmfiles/${target}"
# load include and dos from file-words.d64 block 10.
# savesystem and then scratch file notdone to exit emulator.
keybuf="3 drive 20 load\n3 drive 10 load\n\
savesystem ${target}\ndos s0:notdone\n"
savesystem ${target}\ndos s0:notdone"
DISK11=file-words "${emulatordir}/run-in-vice.sh" \
"${source}" "${keybuf}"

View File

@ -18,7 +18,7 @@ nosave="${2}"
test -z "${nosave}" && rm -f "${basedir}/cbmfiles/${target}"
rm -f "${basedir}/cbmfiles/${logfile}"
keybuf="include ${source}\nsave-target ${target}\ndos s0:notdone\n"
keybuf="include ${source}\nsave-target ${target}\ndos s0:notdone"
test -n "${nosave}" && keybuf="include ${source}\n"
DISK10=tc38q "${emulatordir}/run-in-vice.sh" \

View File

@ -8,20 +8,26 @@ test -n "$DISK11" || DISK11=empty
emulatordir="$(realpath --relative-to="$PWD" "$(dirname "${BASH_SOURCE[0]}")")"
basedir="$(realpath --relative-to="$PWD" "${emulatordir}/..")"
executable="${1}"
keybuf="${2}"
autostart=""
if [ -n "$1" ]
if [ -n "${executable}" ]
then
autostart="-autostart ${emulatordir}/${1}.T64"
autostart="-autostart ${emulatordir}/${executable}.T64"
fi
keybuf=""
warp=""
if [ -n "$2" ]
if [ -n "${keybuf}" ]
then
keybuf="${2}"
# keybuf="${2}"
# The following could also just be a cp.
ascii2petscii "${emulatordir}/notdone" "${basedir}/cbmfiles/notdone"
warp="-warp"
# Magic env variable KEEPEMU: Only if not set, send in the final CR.
if [ -z "${KEEPEMU}" ]; then
keybuf="${keybuf}\n"
fi
fi
"$VICE" \

View File

@ -0,0 +1,9 @@
#!/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" "$@"

View File

@ -1,6 +1,9 @@
#!/bin/bash
set -e
executable="${1}"
keybuf="${2}"
emulatordir="$(realpath --relative-to="$PWD" "$(dirname "${BASH_SOURCE[0]}")")"
basedir="$(realpath --relative-to="$PWD" "${emulatordir}/..")"
cbmfilesdir="${basedir}/cbmfiles"
@ -16,20 +19,27 @@ do
done
autostart=""
if [ -n "$1" ]
if [ -n "${executable}" ]
then
autostart="-prg ${cbmfilesdir}/${1} -run"
autostart="-prg ${cbmfilesdir}/${executable} -run"
fi
script=""
warp=""
scale=""
debug=""
if [ -n "$2" ]
if [ -n "${keybuf}" ]
then
test -d tmp || mkdir tmp
rm -f "${x16script}".*
echo "load\"${1}\"\nrun\n${2}" | sed 's/\\n/\n/g' > "${x16script}".ascii
# Magic env variable KEEPEMU: If set, remove the final CR.
if [ -n "${KEEPEMU}" ]; then
tr_remove='\n'
else
tr_remove=''
fi
echo "load\"${executable}\"\nrun\n${keybuf}" | tr -d "${tr_remove}" \
| sed 's/\\n/\n/g' > "${x16script}".ascii
ascii2petscii "${x16script}.ascii" "${x16script}.petscii"
script="-bas ${x16script}.petscii"
autostart=""

View File

@ -21,10 +21,14 @@
dup 0= swap #cr = or IF 0 exit THEN
i/o-status? IF 1 exit THEN -1 ;
| : i/o-status?abort i/o-status? 3 and IF c64cr
fload-dev @ dos-error abort THEN ;
| : freadline ( -- eof )
fload-dev @ fload-2nd @ busin
i/o-status?abort
tib /tib bounds
DO bus@ dup eolf? under
DO bus@ i/o-status?abort dup eolf? under
IF I c! ELSE drop THEN
dup 0<
IF drop ELSE I + tib - #tib ! UNLOOP
@ -38,9 +42,6 @@
\ fload-open fload-close 30jun20pz
| : i/o-status?abort i/o-status? IF cr
fload-dev @ dos-error abort THEN ;
defer on-fload ' noop is on-fload
| : fload-open ( addr c -- )
on-fload fload-dev @

View File

@ -28,5 +28,5 @@ here dup origin!
$100 allot
Create logo
(C16+ ," volksFORTH-83 3.9.3-C16+ " )
(C16- ," volksFORTH-83 3.9.3-C16- " )
(C16+ ," volksFORTH-83 3.9.4-C16+ " )
(C16- ," volksFORTH-83 3.9.4-C16- " )

View File

@ -28,4 +28,4 @@ here dup origin!
$100 allot
Create logo
," volksFORTH-83 3.9.3-C64 "
," volksFORTH-83 3.9.4-C64 "

View File

@ -27,4 +27,4 @@ here dup origin!
$100 allot
Create logo
," volksFORTH-83 3.9.3-X16 "
," volksFORTH-83 3.9.4-X16 "

View File

@ -18,6 +18,7 @@ $FF84 >label IOINIT
$FFB1 >label LISTEN
$FFC0 >label OPEN
$FFF0 >label PLOT
$FFB7 >label READST
$FF8A >label RESTOR
$FF93 >label SECOND
$FFE1 >label STOP

View File

@ -9,13 +9,10 @@ include vf-lbls-cbm.fth
0ff4c >label ConOut
090 >label IOStatus
09a >label MsgFlg
099 >label OutDev
098 >label InDev
0ae >label CurDev
0ff19 >label BrdCol
0ff15 >label BkgCol
053b >label PenCol
09d >label PrgEnd \ aka eal; seems unused
0b2 >label IOBeg \ aka stal; seems unused
0cb >label CurFlg
0cf >label InsCnt
0540 >label KeyRep

View File

@ -9,13 +9,9 @@ include vf-lbls-cbm.fth
0E716 >label ConOut
090 >label IOStatus
09d >label MsgFlg
09a >label OutDev
099 >label InDev
0d020 >label BrdCol
0d021 >label BkgCol
0286 >label PenCol
0ae >label PrgEnd \ aka eal; seems unused
0c1 >label IOBeg \ aka stal; seems unused
0d4 >label CurFlg
0d8 >label InsCnt
028a >label KeyRep

View File

@ -100,7 +100,7 @@ Output: display [ here output ! ]
87 fthpage
Code i/o-status? ( -- n )
IOStatus lda Push0A jmp end-code
READST jsr Push0A jmp end-code
\ b/blk drive >drive drvinit clv14:2x87
@ -131,7 +131,12 @@ Variable (drv 0 (drv !
Variable i/o 0 i/o ! \ Semaphore
Code busoff ( --) CLRCHN jsr
Label LsnDev 0 c,
Label TlkDev 0 c,
Code busoff ( --)
LsnDev lda 0<> ?[ LsnDev stx UNLSN jsr ]?
TlkDev lda 0<> ?[ TlkDev stx UNTLK jsr ]?
Label unlocki/o 1 # ldy 0 # ldx
;c: i/o unlock ;
@ -146,10 +151,14 @@ Label nodevice 0 # ldx 1 # ldy
\ ?device clv12jul87
Label (?dev
IOStatus stx (C16 $ae sta ( ) LISTEN jsr
\ because of error in OS
IOStatus stx \ because IOStatus isn't cleared by LISTEN or TALK
\ It's unclear in which situation or use case the following
\ workaround for a C16 OS error is needed. The v4th tests pass
\ even with the following line removed.
(C16 CurDev sta ( ) \ current device number - because of error in OS
LISTEN jsr
60 # lda SECOND jsr UNLSN jsr
IOStatus lda 0<> ?[ pla pla nodevice jmp ]?
READST jsr 0<> ?[ pla pla nodevice jmp ]?
rts end-code
Code (?device ( dev --)
@ -164,7 +173,7 @@ Label (?dev
N 2+ lda (?dev jsr
N 2+ lda LISTEN jsr
N lda 60 # ora SECOND jsr
N 2+ ldx OutDev stx
N 2+ ldx LsnDev stx
xyNext jmp end-code
@ -188,8 +197,7 @@ Label (?dev
N 2+ lda TALK jsr
N lda 60 # ora (C16 $ad sta ( )
TKSA jsr
\ because of error in old C16 OS
N 2+ ldx InDev stx
N 2+ ldx TlkDev stx
xyNext jmp end-code
: busin ( dev 2nd -- )

View File

@ -6,27 +6,18 @@ include vf-lbls-cbm.fth
\ X16 labels
0ffd2 >label ConOut
0286 >label IOStatus
0febd >label KbdbufPeek
0289 >label IOStatus
028c >label MsgFlg
028b >label OutDev
028a >label InDev
09f2c >label BrdCol
0266 >label BkgCol
0284 >label PenCol
8a >label PrgEnd \ aka eal; seems unused
0292 >label IOBeg \ aka stal; seems unused
0381 >label CurFlg \ aka qtsw
0385 >label InsCnt \ aka insrt
\ TODO(issues/33): Remove the R?mBank38 labels.
09f60 >label RomBank38
09f61 >label RamBank38
1 >label RomBank
0 >label RamBank
0a000 >label KeyD \ keyboard buffer
0a00a >label Ndx \ #keys in keyboard buffer
037B >label blnsw \ C64: $cc
\ 037C >label blnct \ C64: $cd
\ 037D >label gdbln \ C64: $ce
@ -46,33 +37,12 @@ include vf-lbls-cbm.fth
\ X16 c64key? getkey
Code c64key? ( -- flag)
RamBank ldx
\ TODO(issues/33): Remove the lines accessing RamBank38.
RamBank38 ldy
0 # lda RamBank sta
RamBank38 sta
Ndx lda
0<> ?[ 0FF # lda ]? pha
RamBank stx
RamBank38 sty
KbdbufPeek jsr
txa pha
Push jmp end-code
Code getkey ( -- 8b)
RamBank lda N sta
\ TODO(issues/33): Remove the lines accessing RamBank38.
RamBank38 lda N 1+ sta
0 # lda RamBank sta
RamBank38 sta
Ndx lda 0<>
?[ sei KeyD ldy
[[ KeyD 1+ ,X lda KeyD ,X sta inx
Ndx cpx 0= ?]
Ndx dec
N lda RamBank sta
N 1+ lda RamBank38 sta
tya cli 0A0 # cmp
0= ?[ bl # lda ]?
]?
GETIN jsr
Push0A jmp end-code
@ -124,8 +94,6 @@ Label restore pha txa pha tya pha cld
Label first-init
sei cld
RomBank lda $f8 # and RomBank sta \ map in KERNAL ROM
\ TODO(issues/33): Remove this line accessing RomBank38.
RomBank38 lda $f8 # and RomBank38 sta \ map in KERNAL ROM for R38
IOINIT jsr CINT jsr RESTOR jsr \ init. and set I/O-Vectors
ink-pot lda BrdCol sta \ border
ink-pot 1+ lda BkgCol sta \ backgrnd

View File

@ -13,11 +13,10 @@ User tmpheap[
User tmpheap>
User ]tmpheap
\ $9f61 is the X16 RAM bank select register. This will change to $0001
\ in the next X16 board version.
\ $0000 is the X16 RAM bank select register.
\ 1 is the RAM bank selected for the tmpheap. RAM bank 0 is used by the
\ X16 KERNAL. The banked RAM lives from $a000 to $bfff.
1 $9f61 c! $a000 tmpheap[ ! $c000 dup ]tmpheap ! tmpheap> !
1 $0000 c! $a000 tmpheap[ ! $c000 dup ]tmpheap ! tmpheap> !
: tmp-hallot ( size -- addr )
tmpheap> @ swap -

37
VERSIONS.ORG Normal file
View File

@ -0,0 +1,37 @@
#+Title: VolksForth versions
* C64/C16/Plus4/CommanderX16
*3.9.4*
* X16 version adapted to Kernal/Emulator version R41
* Some reduction in use of and dependence on Kernal variables in RAM
*3.9.3*
* X16 version adapted to work with both versions R38 and R39 of
Kernal and Emulator, and thus with prototype boards #1 and #2
* Some code cleanup around moving word headers to the heap
and related tmpheap cleanup
* load, thru, +load, +thru were removed from the v4th versions
like the x16 version that don't have block/buffer disk access.
*3.9.2*
* X16: Zero page area used by v4th moved from $30-$5b to $50-$7b,
inclusive, so that it now doesn't collide with the ROM version of X16Edit
* Initial prepartion for and implementation of tmpheap
* Some minor cleanups and bug fixes.
*3.91*
* X16: Initial version
*3.90*
* Built-in INCLUDE stream file interface
* Separate versions with and without BLOCK words
* C16-32k version resurrected and fixed
* An adapted subset of the ANS test suite is made to pass
* Makefile setup for build and test
* Build sources moved from BLOCK disk images to stream sources