From 6812352db308806b6b240785a6cda18be5ab3cf5 Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Wed, 6 Jul 2022 01:36:15 +0200 Subject: [PATCH 01/10] Detect and message file-not-found condition in INCLUDE --- 6502/C64/src/vf-cbm-file.fth | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/6502/C64/src/vf-cbm-file.fth b/6502/C64/src/vf-cbm-file.fth index 5e0d647..210db63 100644 --- a/6502/C64/src/vf-cbm-file.fth +++ b/6502/C64/src/vf-cbm-file.fth @@ -18,10 +18,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 eol? under + DO bus@ i/o-status?abort dup eol? under IF I c! ELSE drop THEN dup 0< IF drop ELSE I + tib - #tib ! UNLOOP @@ -35,9 +39,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 @ From cae5f7c94daa4ca039391f07a799340f744ad73c Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Sun, 31 Jul 2022 21:56:33 +0200 Subject: [PATCH 02/10] 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. --- 6502/C64/Makefile | 31 +++++++++++++++++++-------- 6502/C64/emulator/run-in-x16-41.sh | 9 ++++++++ 6502/C64/emulator/run-in-x16emu.sh | 18 ++++++++++++---- 6502/C64/src/vf-lbls-cbm.fth | 1 + 6502/C64/src/vf-sys-x16.fth | 34 ++++++------------------------ 5 files changed, 53 insertions(+), 40 deletions(-) create mode 100755 6502/C64/emulator/run-in-x16-41.sh diff --git a/6502/C64/Makefile b/6502/C64/Makefile index 3b76b96..c874703 100644 --- a/6502/C64/Makefile +++ b/6502/C64/Makefile @@ -34,7 +34,7 @@ clean: binaries: $(vf_binaries) -test: $(test_resuls) test-v4th-x16-39.result +test: $(test_resuls) test64: std64 blk64 @@ -93,8 +93,9 @@ 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" petscii2ascii cbmfiles/test.log $@ @@ -105,9 +106,10 @@ test-v4th-c64.log: emulator/v4th-c64.T64 "include run-std-tests.fth\n1234567890\n" 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+ \ +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\n" petscii2ascii cbmfiles/test.log $@ @@ -136,6 +138,8 @@ 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 rm -f cbmfiles/test.log emulator/run-in-x16-39.sh v4th-x16 \ @@ -146,13 +150,22 @@ test-v4th-x16-39.log: cbmfiles/v4th-x16 emulator/sdcard.img 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\n" + 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 diff --git a/6502/C64/emulator/run-in-x16-41.sh b/6502/C64/emulator/run-in-x16-41.sh new file mode 100755 index 0000000..89487d4 --- /dev/null +++ b/6502/C64/emulator/run-in-x16-41.sh @@ -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" "$@" diff --git a/6502/C64/emulator/run-in-x16emu.sh b/6502/C64/emulator/run-in-x16emu.sh index ab94f63..ea7f15d 100755 --- a/6502/C64/emulator/run-in-x16emu.sh +++ b/6502/C64/emulator/run-in-x16emu.sh @@ -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="" diff --git a/6502/C64/src/vf-lbls-cbm.fth b/6502/C64/src/vf-lbls-cbm.fth index d1a5480..1a2b77d 100644 --- a/6502/C64/src/vf-lbls-cbm.fth +++ b/6502/C64/src/vf-lbls-cbm.fth @@ -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 diff --git a/6502/C64/src/vf-sys-x16.fth b/6502/C64/src/vf-sys-x16.fth index 084887c..18cbc7e 100644 --- a/6502/C64/src/vf-sys-x16.fth +++ b/6502/C64/src/vf-sys-x16.fth @@ -6,10 +6,11 @@ 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 + 028e >label OutDev + 028d >label InDev 09f2c >label BrdCol 0266 >label BkgCol 0284 >label PenCol @@ -46,33 +47,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 From 2c86e4809f5e9169a8630d614c06c1d44ba9ba71 Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Sun, 31 Jul 2022 23:54:37 +0200 Subject: [PATCH 03/10] 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. --- 6502/C64/src/vf-sys-c16.fth | 2 -- 6502/C64/src/vf-sys-c64.fth | 2 -- 6502/C64/src/vf-sys-cbm.fth | 14 +++++++++----- 6502/C64/src/vf-sys-x16.fth | 2 -- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/6502/C64/src/vf-sys-c16.fth b/6502/C64/src/vf-sys-c16.fth index 3dd8d44..4c74e42 100644 --- a/6502/C64/src/vf-sys-c16.fth +++ b/6502/C64/src/vf-sys-c16.fth @@ -9,8 +9,6 @@ include vf-lbls-cbm.fth 0ff4c >label ConOut 090 >label IOStatus 09a >label MsgFlg - 099 >label OutDev - 098 >label InDev 0ff19 >label BrdCol 0ff15 >label BkgCol 053b >label PenCol diff --git a/6502/C64/src/vf-sys-c64.fth b/6502/C64/src/vf-sys-c64.fth index 9eb05de..10e0082 100644 --- a/6502/C64/src/vf-sys-c64.fth +++ b/6502/C64/src/vf-sys-c64.fth @@ -9,8 +9,6 @@ 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 diff --git a/6502/C64/src/vf-sys-cbm.fth b/6502/C64/src/vf-sys-cbm.fth index 260a63e..44a9d28 100644 --- a/6502/C64/src/vf-sys-cbm.fth +++ b/6502/C64/src/vf-sys-cbm.fth @@ -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 ; @@ -164,7 +169,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 +193,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 -- ) diff --git a/6502/C64/src/vf-sys-x16.fth b/6502/C64/src/vf-sys-x16.fth index 18cbc7e..b472e7d 100644 --- a/6502/C64/src/vf-sys-x16.fth +++ b/6502/C64/src/vf-sys-x16.fth @@ -9,8 +9,6 @@ include vf-lbls-cbm.fth 0febd >label KbdbufPeek 0289 >label IOStatus 028c >label MsgFlg - 028e >label OutDev - 028d >label InDev 09f2c >label BrdCol 0266 >label BkgCol 0284 >label PenCol From 3a4eff97c41884d9232b2ee5bee899b42efc66e1 Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Sun, 7 Aug 2022 22:42:40 +0200 Subject: [PATCH 04/10] 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. --- 6502/C64/src/vf-sys-c16.fth | 3 +-- 6502/C64/src/vf-sys-c64.fth | 2 -- 6502/C64/src/vf-sys-cbm.fth | 7 ++++--- 6502/C64/src/vf-sys-x16.fth | 10 ---------- 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/6502/C64/src/vf-sys-c16.fth b/6502/C64/src/vf-sys-c16.fth index 4c74e42..31c6b44 100644 --- a/6502/C64/src/vf-sys-c16.fth +++ b/6502/C64/src/vf-sys-c16.fth @@ -9,11 +9,10 @@ include vf-lbls-cbm.fth 0ff4c >label ConOut 090 >label IOStatus 09a >label MsgFlg + 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 diff --git a/6502/C64/src/vf-sys-c64.fth b/6502/C64/src/vf-sys-c64.fth index 10e0082..707573a 100644 --- a/6502/C64/src/vf-sys-c64.fth +++ b/6502/C64/src/vf-sys-c64.fth @@ -12,8 +12,6 @@ include vf-lbls-cbm.fth 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 diff --git a/6502/C64/src/vf-sys-cbm.fth b/6502/C64/src/vf-sys-cbm.fth index 44a9d28..9b900eb 100644 --- a/6502/C64/src/vf-sys-cbm.fth +++ b/6502/C64/src/vf-sys-cbm.fth @@ -151,10 +151,11 @@ 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 + (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 --) diff --git a/6502/C64/src/vf-sys-x16.fth b/6502/C64/src/vf-sys-x16.fth index b472e7d..e6d9244 100644 --- a/6502/C64/src/vf-sys-x16.fth +++ b/6502/C64/src/vf-sys-x16.fth @@ -12,20 +12,12 @@ include vf-lbls-cbm.fth 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 @@ -102,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 From 992fcfe751ceeab4741ecd0f695ecb00d8f393bb Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Sun, 7 Aug 2022 22:43:31 +0200 Subject: [PATCH 05/10] Introduce the KEEPEMU environment variable into run-in-vice.sh that facilitated debugging. --- 6502/C64/Makefile | 18 +++++++++--------- 6502/C64/emulator/build-devenv.sh | 2 +- 6502/C64/emulator/build-tcbase.sh | 2 +- 6502/C64/emulator/build-testbase.sh | 2 +- 6502/C64/emulator/build-vf.sh | 2 +- 6502/C64/emulator/run-in-vice.sh | 16 +++++++++++----- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/6502/C64/Makefile b/6502/C64/Makefile index c874703..67fb8e2 100644 --- a/6502/C64/Makefile +++ b/6502/C64/Makefile @@ -97,44 +97,44 @@ 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/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\n" + "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 $@ @@ -143,7 +143,7 @@ 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 $@ @@ -155,7 +155,7 @@ 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\n" + "include run-std-tests.fth\n1234567890" mcopy -i emulator/sdcard.img ::TEST.LOG cbmfiles/test.log petscii2ascii cbmfiles/test.log $@ diff --git a/6502/C64/emulator/build-devenv.sh b/6502/C64/emulator/build-devenv.sh index cd034ab..8ef1831 100755 --- a/6502/C64/emulator/build-devenv.sh +++ b/6502/C64/emulator/build-devenv.sh @@ -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}" diff --git a/6502/C64/emulator/build-tcbase.sh b/6502/C64/emulator/build-tcbase.sh index 3e65753..3e4814b 100755 --- a/6502/C64/emulator/build-tcbase.sh +++ b/6502/C64/emulator/build-tcbase.sh @@ -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}" diff --git a/6502/C64/emulator/build-testbase.sh b/6502/C64/emulator/build-testbase.sh index 7e5c59e..002318a 100755 --- a/6502/C64/emulator/build-testbase.sh +++ b/6502/C64/emulator/build-testbase.sh @@ -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}" diff --git a/6502/C64/emulator/build-vf.sh b/6502/C64/emulator/build-vf.sh index f7fed6c..3f29a5f 100755 --- a/6502/C64/emulator/build-vf.sh +++ b/6502/C64/emulator/build-vf.sh @@ -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" \ diff --git a/6502/C64/emulator/run-in-vice.sh b/6502/C64/emulator/run-in-vice.sh index 683ce36..77febe7 100755 --- a/6502/C64/emulator/run-in-vice.sh +++ b/6502/C64/emulator/run-in-vice.sh @@ -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" \ From 14f3eaf3ad727973bf4fe8254f0026036b4a313c Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Mon, 8 Aug 2022 00:37:00 +0200 Subject: [PATCH 06/10] Add comment about C16 OS bug workaround --- 6502/C64/src/vf-sys-cbm.fth | 3 +++ 1 file changed, 3 insertions(+) diff --git a/6502/C64/src/vf-sys-cbm.fth b/6502/C64/src/vf-sys-cbm.fth index 9b900eb..0b21057 100644 --- a/6502/C64/src/vf-sys-cbm.fth +++ b/6502/C64/src/vf-sys-cbm.fth @@ -152,6 +152,9 @@ Label nodevice 0 # ldx 1 # ldy Label (?dev 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 From b670672a829b316addf2b4290ceabf338757c8b7 Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Mon, 8 Aug 2022 00:37:44 +0200 Subject: [PATCH 07/10] Update version in logo string from 3.9.3 to 3.9.4 --- 6502/C64/src/vf-head-c16.fth | 4 ++-- 6502/C64/src/vf-head-c64.fth | 2 +- 6502/C64/src/vf-head-x16.fth | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/6502/C64/src/vf-head-c16.fth b/6502/C64/src/vf-head-c16.fth index 2a0927b..012ecb2 100644 --- a/6502/C64/src/vf-head-c16.fth +++ b/6502/C64/src/vf-head-c16.fth @@ -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- " ) diff --git a/6502/C64/src/vf-head-c64.fth b/6502/C64/src/vf-head-c64.fth index 83b23d9..7e4d7f0 100644 --- a/6502/C64/src/vf-head-c64.fth +++ b/6502/C64/src/vf-head-c64.fth @@ -28,4 +28,4 @@ here dup origin! $100 allot Create logo - ," volksFORTH-83 3.9.3-C64 " + ," volksFORTH-83 3.9.4-C64 " diff --git a/6502/C64/src/vf-head-x16.fth b/6502/C64/src/vf-head-x16.fth index 4d411d6..4671b87 100644 --- a/6502/C64/src/vf-head-x16.fth +++ b/6502/C64/src/vf-head-x16.fth @@ -27,4 +27,4 @@ here dup origin! $100 allot Create logo - ," volksFORTH-83 3.9.3-X16 " + ," volksFORTH-83 3.9.4-X16 " From 2ff06c912acbeaed70c292e55d2a6af604c2d92c Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Wed, 17 Aug 2022 23:04:25 +0200 Subject: [PATCH 08/10] Add initial VERSIONS.ORG file with C64/C16/X16 versions --- VERSIONS.ORG | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 VERSIONS.ORG diff --git a/VERSIONS.ORG b/VERSIONS.ORG new file mode 100644 index 0000000..8e59731 --- /dev/null +++ b/VERSIONS.ORG @@ -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 From c6716dced5a73e09b2bb363d6ad69dbb2b277fdf Mon Sep 17 00:00:00 2001 From: Philip Zembrod Date: Sun, 28 Aug 2022 23:06:41 +0200 Subject: [PATCH 09/10] Update all binaries to 3.9.4 --- 6502/C64/cbmfiles/v4th-c16+ | Bin 13979 -> 14029 bytes 6502/C64/cbmfiles/v4th-c16- | Bin 13835 -> 13868 bytes 6502/C64/cbmfiles/v4th-c64 | Bin 13909 -> 13942 bytes 6502/C64/cbmfiles/v4th-x16 | Bin 13876 -> 13823 bytes 6502/C64/cbmfiles/v4thblk-c16+ | Bin 16152 -> 16202 bytes 6502/C64/cbmfiles/v4thblk-c16- | Bin 16008 -> 16042 bytes 6502/C64/cbmfiles/v4thblk-c64 | Bin 16084 -> 16115 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/6502/C64/cbmfiles/v4th-c16+ b/6502/C64/cbmfiles/v4th-c16+ index 899c1999c32b4b52342168032e9abe11ac870edf..1bfb30e2077b25e650bbd1556c3c9e17e6b86589 100644 GIT binary patch delta 1640 zcmYjR4Qx|Y6uz%(*H$KDYuA>xj&Aa^&D(9PThTFg-%tAWEmj~iU}Z_ zDRHu2HaFfA4d8@f1576-jWN+Iq}^Vj(zUgH8;l4cWYI*8SRU2rewi&72f#ISrb=2Ph zw)pHam5~d~m*=afdGU{Dc2g(Cm!YF%KYL|ki{S{^+@MX$DJ7Ux`Wi;lryM6)M_z+t zs9=BKBlwldH_(`Ne4QRZ>1MaR8#EwIs45h_EoWQancij9`Gy54b7zD;jo4tUqlOegNukL z_<|@HUn0O#2KbBsXQ@$umEK1q?iRx+I7?wChgNSGar@1swfZg3J3L}}b=mI!cCesn zZEdclclCk?NLPlYXOQF+vH#C*eZTrZQFxqZ9db`2PWu@h8Zl85U*llA6TNbgqM(G z0<>EeicNqaa2}(>@MJWe!n?Iw?h-sFLwK6WC7mL%&CKJCD%L;c!#l_{+Qeuw8QDHO zF4zwaGir>Le88O364@6skN$jNKRC{i0hGA}ZZu&%Y0U%3rWizK-kP%R!u#t7{tT5) zFofuTbTj?nYG%YpEI|Yj=8ilNW037P!~fJfjCM*+CgVvYz)obh=C!P>gt-%J@ZD>h%FE7Xncc%#tQBmSBpV_#C{k5k1}IiQ)zq2gtgO3<7JO= zA!C<###N=tp~Y#J;EOR`T&0<8vk7IpALMlLm^0Ju^!jeE01tZpt@gG#gsXauCgw8p zaJ3q4huh9MF5@#B;~sAsGFF;NS|z?C3GDOe!of)ezw`K!l9{mPpDZNuttWqPR#oO~ zoxx~SfML&wtrXxKlGTd&PIYxB@z-~ zh`UvIrDjd3-V&|;t8m1&kS4hXuehSFY{L=HI`4T;Pl?__5=a1f^_AgBRE`Cw@j3rq zbf~_wzQxcE+Pz%adba?HEsFc=+`dn|ua`~U^n2UEte2fE&xY=Lb>VnYx#oPQR8E#x0ubW2S9ahJk|r^ex)zimw0D3)K9_ja*mYyq!K;ZY!RN43#jBDD z393K`Xy8>d*i>Uv;8llG*w$iu8?TCBb2&D5@>EQMtFhHeYACp1E_M#^)C~#RvE}16 zDOn*^ZkswlFRzZtHx&u$ap*%n_vT#IJ=4$uKE*S|6UvRa1Rr7<0X_%261-6O52TEf A>i_@% delta 1639 zcmZWpZA?>V6n<}Mxvd{VxP{iXVZ|u{doIiA0 zhl?Kwq#Ld`#-Ss8tlKbQndz2gX2ejq#7b$q-V1`6n=@?7=3-pp+$7Gs_bs|C*^ir^ z=bZDL^PKaZbh71qOV_HLZV`Y*pbUMp@z<(vy^b^7cW1UN4LwU0QdN;UYO9%gIdUfd zGb42^!WZ@~*8Rdq=1OyP)XmWS)vr>`p&ig!B=A=@G%<%keJ!1q6?G)7cGUK3-Ogs- zxun+Fl`BNf!7p^J;V!@1(FSUfAzBfQPe>5x+rTzNW4mH3JuShDpba!4eF+BhWdQi# zAq341tC1>bV%ordWEe}wrez;&MlTi4<$BG;+ljL4{^Ou_U`rPu?_9ucVsLcQ z5%5v*srUUCYCC|$wr0dm;Ymoj9$c;iOtLhomXZ@b=&;@^ESS!?Z?i`19*rjzyh4Zd z7V*y`LU_n#lm4+pA@~3GpFeGXa)<~x`$WLGi~y#UGh~)iD&7Ut934wcxKc@VzU;w+EN~Zp1$(g2U?cy|ZhnxjAKX)ac{q!z9|ZltA9;kwW)I=`ARpAUL4WYE<~*S}JG7w^ zKDb;PD&>Ru+E5uE++Y|y7Gw=WjAqgY88YHmx{PG;BL=s{>@6yF$0CDs=ev znRUL_0dAM4+(H(*36ZKkNIEP52Wto&crI6wPJWLunQ&#goL{ru>w|*uwECNtDDL7l z|Hhu+9ziN}3V5_;?_08Sy9$8F01sfz4+E^NuSE4EC4{FO*xK*)_HR5_hW%c^TS zHsVraQ6D_!xsi8e?Wz?fYrOJdUXT5rMsj};=vYXoE@tY5KZO0l=^~Srq>#|k(9vqk z(igm*k~MB0Y+{ap#!z3iyS2r;yJU3cfcFUa(94gOE`&by8po4q^{VUnD&h!$ue_!a zMUf|?aXDRD4nUWpWy%i diff --git a/6502/C64/cbmfiles/v4th-c16- b/6502/C64/cbmfiles/v4th-c16- index 3f1e3324e941012e8186e95c5995d10095c3e4d6..a2a959f8428b70d842f3e644f0df263187caa34b 100644 GIT binary patch delta 1604 zcmZ8hZEO=|9DlCwbyL{dt)*?oZ5d>Pr`up#)iL(mU3)8#g&6Pyh8U(MO+_#fV-Ojs zX1wghA=q!?^#fTDhw_2*d0LFbCYSzx|M%bX z{O|g=oZ50=(Y&SY06YeY(ZtH%8@KX~gY4yl&paMnNL5fxqixhWGu1YFuJp!+2YiLpiTX6@2|y1RN4jWEO2^|@P&kWbb^Ei3{#*%51WJhhOc|nv0hW?N zA(ziI42CF7W`g(Xs{>fotk&=E&@i37U=kT>(3m)xh>2^Mqk6iM8PQu`R_)OrP+d24 z+(W%!C8K{B;Dsslifa|)GxdT^jJ}2pkdxnG_8vN+qA!(?EGF5D>C?(cwXu^9D#sV& zsXC6d_JKE;{Iof&CKbRn0=PyWIL7EniHw-?LWgy>qWo0e{0(Ek=2$W<;bU}IeMgZrJa4cdwUvdgAM_Nq;?b>h?O2Z$v}%x0DzQ94|Xe((ZIW=y0qL{cHg&m#M6 z(|yIF^>2d9mci@=7nS zEGQu=1h9+KCDZlei8e0`2A5k+L!2?5Oh?9?c=hftF#rL?g5NK1ZieVr%Zl=ly%?-* zOLNfN%YEDEGkGDwSMWo#M)#Vkot0;7-8KgJF^ih71&bT&shMDF6A0y?C`Sd9xu$f|1Gw|62(P%bCg-lKB(5f^>E!$dNn(PjP6H!M$L5=5;lz& zNC4;DhIk|<<98h2D;WvvyTVaw6)5mG0@%v&$D%8Li2Nze_{*S%t)I3kI5M zpPX{<^{6~Ol}0P^6MM*Gtcxd-Vk&YT@A4mI+grL@e5RdX+T*TS=JG;T!9Ck zmug}cHT+J{%yY5Yf(!A6cseVOJD+MKhAyy%H%25$JRePp+1fe)D%;oBb>Z)iHj|Ua zBLakuF7O(!Bdh^a7p4JTL#P0s#$-RQ%4P(p0$t!RugYPl!SFb*+Ad+N$M`g_N?`Z| zhTrj2N`TcE{YYxaxS$S`pLptm038@z=CzV2lPZ_WyTDCelM*k=0yJXR9Iv}LRiH;& byMVe~mq};j3uys9z%okP)tCzKlhS_xW*Lbr delta 1543 zcmZ8gZA?>F7(TbQy{+O9T1sgfECdPYDHN*RhRC`1w%4+y20#AHB{O6n#BGvn*$+3Z z=?{iLJ2PBw%%+YYrf!mvxS;#Wh-u+g?ksKXy~U4!nbT~ESqyW_HvQqk0CXqwLM2+gHcdQq`1avV+=brnXETtvF|( z+9tW`(N$FUFaUf=+knBt^#BCm ziwK$>Rs&_}F%5uSNH>$0=EVTqhIUuqDdWu~+l%xa|4CDpJ7v)PPH~_QX)zNDK$4;? z&uv48){>DCMB}`ak(2-&FY7T4f(vMc)SM-ngWwXg@!;q zLqBc^z&Z4$w}t634S`OEZXjX>|u(F74X)WA?)3YDIy@s(1al;W&+S*U8=SS#q=m+!0G99R>tS$u>MH$3y2JS&FG1y zlv(({+1_P^E1%8-2x=xys_mvL`f+)zm@eh5Ob#g?iK zNp=;vW0!ngR>Zkq*|EQlV@vNk-&dUxbt1zasZuAh?2!s}A{VP^tq3o$^t5*)8EN3~ z+r_;AP>(53*fiHvNsb00A`^f_vIOjJ zBhznj-+74i_naY{aTP^Qw21xyJnwr#{$6Dgi}2=g#?3ye)52YF=P9R~T|hA(VSCb+ zG&fa}wj_QG0yyh4q!QDLG#?i6rI8)6<6o?#^uSlTY^L}OU5Ru$0JZ)Rdo92%q_fYq z1`t+cPcre!3cGA87RVo4049H#lu^WdE-xysc`4yiq+|dtaW~2@wyvu+TGQ?aqf@xA81m1^FQ%I1|>*E1fH2!Tf4n2=?0E}0hdjZFZ6 zt-G2+_(zv3$g>FnLPrQ}=k)}+G4x`%hu0D)z-KY&44)B@+4z)P!=QaCf z9Md=+<~0%ypTgk@p2`TY4o7DQhk^<97@Xs&s{(Z3Xo}a#qC!{}Eg^7;*Ji|PiU5tc jRN(d3t}nxr?IG|J-YJ_?u4V=J2;2CLUxA?jKP&$S+NwKE=XpzH_0N%w)xvVD4s(tBu&x@cdpxq_TMZT) zUsHEnhb6~n8jT99D9ks#f$bGuv6J;(+{Lz_?mZB2;f1s$#|!e1>tyK@axX^`F7lAJ zYy7DFYeg@4zSQZi=?87JD$$b2Ohzf7><8;<9O9N#VJb?U0sUYTt+YY1U2GQ6#NKki$Fve=YWGvfguSlc zM!)|g3OPsP&@N_0*-xF(26Y2ql3paXKXP86lw#Kb*%>^428{_r+Uep4Eo zMR1lTzbYNaP6F813_aQ$)SU#!F-YbGqScCeoKtPz-dW3R9R$D88e4lRJtZd7TbL6# z>1Ja1(jAHe_#wrwnofcl1RELr9|u1*L+@;Ul?mzw!5#*;p#q9>lsWj>X$5&*A8SC- z4dmHUjM8o;h0>`8SXJjS*AN(B%GDNOGc&y~$6=Ub2zsNwqPHm3 zKgYsWzbtirUNsDO7F8i%%|o>drXwZ-w3}t!TK1MnGHr!-Hw-qysG`)-!;&$y9m8M` ziz*bedDKuPCd9Uz|Iqyx)5qeebfJ(dz|p=#Ta1R4Y=}+3MQIK8Egm)3fFUBp4iT&A zQS<%MxFKvdg5Ay#Tj9H%F$3!OBXEkv#q6XbpOY7?YV{(ZhadU_5ExT&2e9oO`$v@A zX)bVD9ng#^xxi51Xds4-s5n9Itiyg698QZu&k5_DWc7V^gv^gUU`OinV++E5XFa!; z!;@|oTCxiqd%`K{>^$A=d0aC=G#ilHUASWrP~+81#FH|7sc=51B-rL{BRYB0Yv`?XRo*~H zJd^QLZ+S<}RsemFYoEyoka)ZKE)z2>F-xZM0eb2Y@PT)+n3dCod?776ro^~I788DI zr{`ML#b;J5(;73j2UVlyxf1gI(F=#0%oI~_^Hwgi6IQ!(8?{oG!gSs9-@z2`aEkfA=E>t_F>s5MM1RK z2Xn|Up&F8>eAtyJWr4`%Q%PwVWx1{o1E)`!O;5{FN(+xVeCp||6?)7S1~2;5`CMMU Tl8aK0U>mRb7C{=NzNq>e6;@q} delta 1529 zcmZ8geQXnD7=N$pdhJ@;qa84y8Mo#b8*4Xg%kJK`*HI8#m&F(`Q81cjnq?})82&(A z$r2|Fwk)o>hRgvApp}n^AE}86hG4tihLX`J5bp$%?& zR0k7d_77G4@zJjK+CkuAt5a>M%-1mns0TqOOQN_fU6_tBC&3_ihE+EqaNh<%ka?B0 z8?2O;F!tyNK`&dKE=bd2km+W(ES}MAG~n!8tj7PJG+~_4*$q3&4P&etF?9qPoFa^m zceA^e;FbhSqP&!qlpu3b*Q4JH&a+igTMldP1>droR8h`NP2FbcOzALj6rc&NvlFd7 z`lH}5fxx_ATVq4h%vJaHc2#lVec)GC+tiU3r=>~pG42RS(_Eaadr7sM998|S?YhhE z1CS&CDF`yx*;iU0<$Cn{z_T3LgvE-=E^g1E6DsW#(@m>B&q^M)zf6+ENRK3}HBA2(S~DKT8Qy#6p4X&M>Ut?asIf5Bv@o z5pF%Qy#6NKP4upNedGo_0YfKdL)ud}U}z{b7K#%iH=(e~S-(Ptdb|`4`Le8t7lKTH zT35nyU*201p#Ffui%xpM_i%*HpSlJ|8uF)p5TecoPm70~YTk(c{MZrhHO{cB)8;@=(lS`%@XnpS6v>*!Zcm$ivy%c!u1~dBV zVCS;FrDx0oWBQZqJ*Qi+kjAUc zWgTUe1I;Er$UN{qB!9z{LLwUtXSe`-U{%{U+czDl3&45ysu#08EK3<$O}MOxHXsUa zd$m)^Nky9O7tzaLk7&MMD15ZRXR1t7-aJP#lL<0U_$DkifJ$)XfSCfAwZl^6;-*Cw z*<3!r|8f*O=UXUc6|s;nh>BxcN;(uN6=Xc#D>Y|VuUw|1GEMhtCMAIIqSq#y|u<=T(J#j8TCINb{;93e_mg@v5CNib)h-;Z+g} zjVSzyC$ceyLD3xMP!OR8f%`mhF~(R?MEa{`QNb)%jS;ZWug;2>lo+E!M=SiAOP4F~ cpgRKWeoa1?S1#sa%mXxr*I$KTj5${GH%QP?YybcN diff --git a/6502/C64/cbmfiles/v4th-x16 b/6502/C64/cbmfiles/v4th-x16 index ee12471576b80d246bff84597d4853810f038bd5..9e36648444590131a2a9a6f6d34cf06885328f1c 100644 GIT binary patch delta 2120 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 K)CBb_{eJ-+`ByCf diff --git a/6502/C64/cbmfiles/v4thblk-c16+ b/6502/C64/cbmfiles/v4thblk-c16+ index 9502879cbc19974f373bb5136341fade51488cee..a8e27c46684897f3123b55e6c01d7710086c3348 100644 GIT binary patch delta 3188 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 diff --git a/6502/C64/cbmfiles/v4thblk-c16- b/6502/C64/cbmfiles/v4thblk-c16- index e1eab284751ee8fb8e4615389ee894a23fac2322..1c3fd426e917c24255d3b39d35b879f0a9552cf7 100644 GIT binary patch delta 3114 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 XbBaV0*CHPBF)U-okpWo`c}DtQjxm2f delta 3084 zcmZuzdu&tZ75}bd$FFN&Ck}Z~H#p&v*!V>r%%gH%gcPWTxw!Ca(=2cGNXOqt7OVI%57vKmB>Fao(;9v ze;^_bhW=sHh=@EtZCXJr=YMY2*RYNgO@8HXQFpU68_VUx+5GnAeKYUsmpk-ivwnx1 z4ed66A_|P}=xHh2f|?jf#1=`O8KseU3tGfTv22TG&yCUt(H8U^BQ{{=`&xv2^m@ij z>NGM!?N@F=s~Jf&n>ZKq(JPo`mhVj||XzbDn}?c>tQUy25$J4DxHJ@=Sx zh_y=}1^DPIOux0u?pJO@zpzUUkZdx)$^QBu4v6%Z)Z=x4uG1f$8K>oadVc1^y4T@sYgNTzf6ymXqcz&GeoTuAvgqLpNpQZl3~eX-*zIHo6V%?H2~h)D4O-jS#}@Rp zjpGzF{1zJKZ#6ts{Vh94taklo_#5^B+kN0>x9re2Z1?u=-QDBF@V6{q-&j2-$0~)1 z&rRj>v9mt9L*tr(bSEEFbZGv~@+%wlsxR4Ledf?t>~Kxy&}Dw4vBqI?NGDpF0r-If zPdq-iEB_fmyB+dqI%g5ehX)|kesf`=HmGX^eae5^SX=gmLmp42!%+(!pYLmBXar3= z_}ZrCD%5HwOYyIgT{L@R)v?merR@mXFXxAvY{YH;uT9;7KDNBoN@iZDkAB$tnEX{Lf|Gd2WA+aAp-yaGYF_eQWe0nkxzq}5 zkHaFQm4dKIJOLxl$#m+o(b}!sJ=P$)u0&Z3}8^5e|XK z&7~RytWNEueVm%5&6Nrcc$Y`e^KB)GR6dr?WMg^DxkT8KPegpQqxGWV#Qb@)<(j17 zfg-5=ZU$oav`G{E&E`6jsO^t!rnaqBat(xl>r|WE8c!r+sqk4mk9SqCG;VJ6EB&a5 zZ(mp!c#4yl;J|%!!)#a!wH)|5IdT4UcG5>%shzk;1s>p94n`52&tb@qy^H?meVKDx zEbTrzMK#P`MM4oL<^zi7#85@aJe?nX%!zSRu+_ZCkN(2J2AqtK(lYUw=&)g`7G)%- zPZnpU`z~{1MTe#D&}ggX{+PP*uy|G7VBKl_S3g*P=p;92I27gvjrt64Y;hPeT;|Gq zhS%ng5r+*U^RfFiaE}ru3?K~a9F#iLr?E{!H~XYfSsF>c^5wRnlo zc$%pr%K2xR1**^52eeZ&4;1j!kMmoZImA)^BgPmw&Y8&w8Puv#gnW@QlRGs*?JfKO zaFpONlOJQty_tf~uY3`G+Af($XJInFP(zx*YD=-*c$OTxtOY#V6bX5tKXZe7= zDzMbGgy~f-n!UBkjOS_{dfrt$nTdw;!Yce76#gP*rEV#~x5cG0{P6Pg(PCS_^^o&A zZd!(p;$xYf5!+z<`{)pLob!;^tkYHxiQIsG-=&J3&E%&Z-;x6Qr&dS-1PXj=<+#;5 zk0{om%PvVgIhi}{qvzRfmp2D&i&9fCQyq)Ay*Dh)owxOhlq=$qv1BSj%MLZje{gB|AHOXyI zmz4yyRs^u4?Z>$YX%;9psG%=2$$#%q>ysQX<57AE?Gp-la^Qel$Je($y}Zl~Ome(x zX7yL}Dz8w4Izm9zI&n z2U`t+JDrMbEF8_nCh}=K#=?!X-~Lc1`&omdp~<|!44ZS%4coKNx{KYUga}n7JLY~F zo8UzlMjyJB=d+1?>@mq))f1Xd%VL42uz&^de*2if2TFh{By0SC$^6PU(bsMnyx@gT z0Reu@uG7pl;pDqm2=H{tA>h$Rfe9!9cB4-BA6y z3+~?6x+IBIGQxrD zvaNvT-{4e5xCVYNSE+?O8_^<<+tAYNqd|U`KgG2KKJ>g`n7HtXXCu1g>6|bYT-QCa zcsiRuZLv3jVF2Cn$iul@>}(_%%NpwtN_dyn4IqRh8T^ihM`?4}0IKp9gSG&xEm*Dh zia{NvS*)~pMcK?KEkXmx?G;U8QH;f2ujrK=mZex;<`pHdsK(+-FOeFhX)LV=jyxtT z#>%T+;`}JB!_w Date: Sun, 28 Aug 2022 23:12:05 +0200 Subject: [PATCH 10/10] Update x16tmpheap.fth to prototype #2 board's bank switching address --- 6502/C64/src/x16tmpheap.fth | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/6502/C64/src/x16tmpheap.fth b/6502/C64/src/x16tmpheap.fth index ac650f7..07b9a90 100644 --- a/6502/C64/src/x16tmpheap.fth +++ b/6502/C64/src/x16tmpheap.fth @@ -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 -