MPE VFX Forth 64 for Windows, Linux, Mac & DOS - Release Notes ============================================================= Copyright (c) 2020, 2021, 2022, 2023 MicroProcessor Engineering Ltd. 133 Hill Lane Southampton SO15 5AF England tel: +44 (0)23 8063 1441 +44 (0)78 0390 3612 net: mpe@mpeforth tech-support@mpeforth.com web: www.mpeforth.com ****************************************************** PLEASE READ THIS FILE, YOU MAY REGRET IT IF YOU DO NOT ****************************************************** This file can be found in the installation under the name Release.VFX64.txt within the DOCS directory. It provides a reverse chronological list of changes made between released builds of the VFX Forth 64 bit system from release 5.11 in May 2020 onwards. Release notes for earlier 32 bit versions are in Release.VFX.txt, Release.VFX4.txt and RELHIST.VFX.TX These notes are common for all versions - Windows, Linux, and Mac OS X. The build numbers refer to the Mac OS X. Executable file names ===================== Binary file names are of the form: VfxForth__. e.g. VfxForthK_x64_win.exe Where: = null for main binary = K for kernel = KH for high kernel (for shared library builds) = B for base version (Windows only) = x86 for 32 bit Intel/AMD i32 = x64 for 64 bit AMD/Intel = arm for 32 bit ARM CPUs = arm64 for 64 bit ARM/Cortex CPUs = win for Windows = mac for macOS = lin for Linux = exe for Windows PE files = elf for Unix/Linux ELF files = mo for Mach-O files The installer script should produce a short cut: vfx64, vfxforth or VfxForth for Windows; vfx64, vfxlin or vfxforth for Linux; and vfx64, vfxosx or vfxforth for macOS. The Windows installer adds the relevant path to the system path. Under Linux and MacOS, the executables are placed in /usr/local/bin. v5.4 changes ============ From v5.40 onwards, there have been major changes to the floating point packs and the way they are used with the operating system. These changes have been made because several customers depend on the addition precision provided by the NDP 80-bit floats. By default, all the major operating sytems for x64 CPUs use the SSE instructions internally for floating point. The choice of Floating point pack is up to the programmer, so the base VFX64 does not include an FP pack. Choose from include %lib%/x64/FPSSE64.fth \ SSE2 include %lib%/x64/Hfpx64.fth \ 8087, external stack include %lib%/x64/Ndpx64.fth \ 8087, internal stack The value FPSYSTEM is defined in Kernel/Common/kernel64.fth and is set to one of the following 0 constant NoFPSystem 1 constant HFP387System \ 80 bit floats, R13 float stack pointer 2 constant NDP387System \ 80 bit floats, internal stack 3 constant OpenGL32System \ obsolete 4 constant SSE64System \ 64 bit floats, R13 float stack pointer The EXTERN mechanism converts from the FP pack to SSE instructions on entry and from SSE to FP pack instruction on exit from the EXTERN. Do not use floating point packs from earlier versions of VFX64. 5.43 Windows build 4240, Linux build 196, MacOS build 554 ========================================================== 22 December 2023 KERNEL ------ Corrected CALLDEF: and CALLDEFPROC: for float parameters in VFXBase/CallDefWin64.fth. Corrected return of two double floats in VFXBase/ExternSysVx64.fth. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.42 Windows build 4234, Linux build 196, MacOS build 551 ========================================================== 5 October 2023 KERNEL ------ Rewrote REQUIRED to use the operating system path normalisation functions. Overhauled and corrected selectable FP pack code in externs, callbacks and locals. Added DEFCALLPROC which behaves as CALLDEF: , but the child returns the entrypoint address. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.41 Windows build 4206, Linux build 150, MacOS build 498 ========================================================== 26 May 2023 KERNEL ------ Lin64/Osx64: Corrected register fault in callback interface. Win64: Added updated call back interface that handles floats and uses a C prototype interface. See VFXBase\Win64\CallDefWin64.fth. Lin64/Osx64: Added updated call back interface that handles floats and uses a C prototype interface. See VFXBase\Win64\CallDefSysVx64.fth. Win64: Corrected use of R/ECX and R/EDX in EXTERNs. Added: HELD \ -- caddr len ; string in pictured number output (PNO) buffer. >HOLD \ caddr1 len -- caddr2 len ; put new string in PNO buffer. Protected pictured number output buffer in system prompt. Corrected some uses of POSTPONE. LIB and STUDIO -------------- Updated FP packs to check for only a single FP pack. Lin/Mac: Corrected VFXBase/ExternSysVx64.fth to pass tests in Lib/x64/fpext.fth. Win: Corrected VFXBase/ExternWin64.fth to pass tests in Lib/x64/fpext.fth. Incorporated Ed's improvements to NAN/INF display functions. Mac: Incorporated Roelf's latest Cocoa build. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- Ensured that a rebuild script is supplied. 5.40 Windows build 4081, Linux build 143, MacOS build 429 ========================================================== 24 December 2022 KERNEL ------ U/ is now inlined. Added ENDBR64 to disassembler - helps when disassembling shared libraries. LIB and STUDIO -------------- Lin/Mac: Corrected VFXBase/ExternSysVx64.fth for SSE float returns. Finalised code for choice of float packs that convert to and from SSE floats in Externs. Because the choice of Floating point pack is up to the programmer, the base VFX64 does not include an FP pack. Choose from include %lib%/x64/FPSSE64.fth \ SSE2 include %lib%/x64/Hfpx64.fth \ 8087, external stack include %lib%/x64/Ndpx64.fth \ 8087, internal stack EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.20 Windows build 4086, Linux build 129, MacOS build 399 ======= 5 September 2022 KERNEL ------ Corrected CREATE-DIR in Wintools.fth to cope with the 32 bit return value. This fixes a failure to create the application ini file directory. Forth calls beyond +/-2Gb are now supported. LIB and STUDIO -------------- Lib/x64/Ndpx64.fth; Fixed NAN? and INFINITY? EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.20 Windows Alpha 1 build 4067, Linux build 115, MacOS build 38 ========================================================== 23 April 2022 KERNEL ------ LIB and STUDIO -------------- Lib/OSX64/GenIo/Socketio.fth and Lib/Lin64/GenIo/Socketio.fth HOSTENT structures corrected. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.20 Windows Alpha 1 build 4067, Linux build 114, MacOS build 383 ================================================================== KERNEL ------ WIN: Added MICROSLEEP ( us -- ) which delays for us microseconds. See WinTools.fth. For other operating systems use the NANOSLEEP function. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.20 Windows build 4054, Linux build 114, MacOS build 383 ================================================================== 31 January 2022 The Windows 64 release is an Alpha release. The Win32, Linux and MacOS releases are production releases. Win64: The Kernel, VFXbase and Studio extensions should be complete. Very few extensions beyond these have been throughly tested. In the Examples directory, there is a Win directory for code that can be compiled on the Windows 64 and 32 bit compilers. KERNEL ------ Added a few 64/32 bit compatibility helpers. LIB and STUDIO -------------- EXAMPLES -------- Win: Started conversion of Examples\Win32 to run under the 64 bit version. Conversions that work on both are in Examples\WinU. DOC --- Manual rebuilt by release script. TOOLS ----- 5.20 Linux build 114 MacOS build 384 - 2 Sept 2021 ====================================== KERNEL ------ Enhanced performance of CMOVE CMOVE> and MOVE under some conditions. Corrected COMPILE, for NDCS words. Added anonymous nested definitions using [: ... ;] Corrected bug which prevents stack items calculated during command line evaluation being passed to the system. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 RC2 Linux build 113 MacOS build 375 - 11 May 2021 ========================================== KERNEL ------ Added NDCS support to DIS and friends. Lin/Osx - Added type PTHREAD_T which is 8 bytes. Corrected bug which prevents stack items calculated during command line evaluation being passed to the system. Corrected the primitive for RAMDOM number generation. It now uses a Marsaglia method. LIB and STUDIO -------------- Added Lib/terminal which includes an experimental set of terminal extensions for Linux and Mac users. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 RC1 Linux build 106 MacOS build 353 - 23 Feb 2021 ========================================== KERNEL ------ Added opcodes NOP2 to NOP10 which generate single instruction NOPs of that many bytes. These are used during loop alignment. Added these to the disassembler. Corrected and overhauled the VFCACHE mechanism after extensive use by Ward. Thanks. Exposed CATCH-SAVE and CATCH-RESTORE. LIB and STUDIO -------------- EXAMPLES -------- Updated (and used) Gerry Jackson test suite in Examples/tests DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Beta 4 Linux build 105 MacOS build 337 - 23 Dec 2020 ============================================= KERNEL ------ Fixed 64 bit random numbers. Thanks, Ward McFarland. Fixed use of long literals with many words. Thanks, Chris Ramsay. Corrected REX bytes for JMP and CALL opcodes. Sanitised some small helper words. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Beta 3 Linux build 98 MacOS build 329 - 20 Nov 2020 ============================================ KERNEL ------ OSX64: Big Sur (x64) does not promote 32 bit int returns to 64 bits. Hence checking for small negative return values, e.g. -1, may not be right. You have to check for $FFFF:FFFF or promote ints as makes sense. We're still thinking about the best solution. Currently, the file returns of ints are left as 32 bit items zero terminated in a 64 bit result. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Beta 3 Linux build 98 MacOS build 326 - 22 Oct 2020 ============================================ KERNEL ------ Fixed kernel C@S and W@S. OSX64: Fixed stack depths at callback-entry. Fixed callback entry code for n>6. Updated EXTERN displays to use 64 bit addresses. LIB and STUDIO -------------- OSX64: Added Cocoa interface. Fixed F~ in Lib/x64/FPSSE64S.fth. Lin64: Fixed Lib/Lin64/MultiLin64.fth to use pthread_attr as an opaque type - basically don't use it. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Beta 2 Linux build 95 MacOS build 310 - 27 Sept 2020 ============================================ KERNEL ------ Lin64/Osx64: Updated VFXBase/ExternSysV64.fth to handle macOS return of pairs of ints and pairs of doubles. Lin64: Fixed CALLBACK-ENTRY for multitasker and callbacks. LIB and STUDIO -------------- Added FVALUE, F+! and F-! to Lib/x64/FPSSE64S. Fixed 1/F. Lin64: Fixed Lib/Lin64/MultiLin64.fth to use pthread_attr as an opaque type - basically don't use it. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Beta 1 MacOS build 289 28 August 2020 =========================================== KERNEL ------ Ensured that 8+, 8-, 8*, u8/ and 8/ exist in all kernels. In practice, please use the CELLx words for preference unless you really mean 8x. LIB and STUDIO -------------- Added Roelf's Cocoa interface see: Lib/Osx64/cocoa/ EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- Updated VFX Forth 64 for Linux release script. 5.11 Alpha 8 MacOS build 285 21 August 2020 ============================================ KERNEL ------ Updated subosx64.mo, binder64.fth and SaveOSX64.fth so that suitable minimum versions of MacOS and the SDK are supported. Fixed PUSH instruction data size in locals entry code. Initialised SSE float stack in system and task entry code. FINIT is no longer required in task startup code. Moved EITHER= into kernel64.fth. Overhauled the Floating point interface in EXTERN: to preserve XMM8 across calls and to simplify the code in the handling of Objective C and returned structures. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Alpha 7 MacOS build 254 11 August 2020 ============================================ KERNEL ------ Added CR to BYE before exit to O/S. It makes command line use a bit tidier. Fixed x64 tokeniser for SSE FP literals (again). Corrected x64 disassembler for FIADD and FICOM. Fixed EXTERN typos for more than 6 integer arguments, aargh! Sorry, Roelf. Fixed WITHIN generator. LIB and STUDIO -------------- Fixed F>R and FR> in Lib/x64/FPSSE64S.fth EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Alpha 6 MacOS build 206 xx July 2020 ========================================== KERNEL ------ Corrected fault in the tokeniser which did not handle explicit unoptimised calls. The fault affected some POSTPONE operations in particular. Initialised argument data structures in the EXTERN: interface. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Alpha 5 MacOS build 206 29 June 2020 ========================================== KERNEL ------ The kernel is now built by the x64 cross-compiler hosted on the 64 bit Forth it builds. We are now self-contained. Words containing RIP-relative addressing (mostly for absolute addresses) cannot be binary inlined. This should fix Bruno's major problem. Corrected some ENVIRONMENT values. Checked more structures for 64 bit changes. LIB and STUDIO -------------- EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Alpha 4 MacOS build 191 23 June 2020 ========================================== KERNEL ------ Corrected code generation, especially multiply and divide, that did not use the correct data size. This affected both the cross cmpiler and the target code generators. Corrected FP locals entry code. Revamped the time functions in VFXBase/Osx64/MiscOSX.fth and corrected some time structures. Mac/Lin: Corrected FUNCTION: and friends which were using 32 bit rather than 64 bit data defaults. Made EXTERN: untyped data default to 64 bits. Overhauled USER variable layout. SYSPAD, PAD and the HOLD buffer now have guaranteed sizes. Doubled USER area size to 16 kb. Note that this includes the exception stack, SYSPAD, PAD and so on. Because the maximum path size is 1 kb on MacOS and 4kb on Linux, and these are often used in local buffers, the default return stack allocation is now 128 kb. Note that with a 64 bit system, uncommited memeory is not necessarily physically allocated. LIB and STUDIO -------------- Note that F.P. constants now start F%, e.g. F%PI. This prevents some name conflicts and avoids confusion with binary numbers - it has happened, e.g. F%10 rather than %10. Corrected SFLOATS in Lib/x64/FPSSE64S.fth. In Lib/x64/FPSSE64S.fth we have taken the liberty in >FLOAT of treating null strings as not FP numbers. Otherwise, they would be treated as an all-blank string of value 0e0, which violates the principle of least surprise. Mac: Retested multitasker HALT and RESTART. Changed TERMINATE mechanics to avoid pthread functions not suited to GCD. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Alpha 4 MacOS build 148 15 June 2020 ========================================== KERNEL ------ Added CELLBITS ( -- u ) which calculates the number of bits in a cell. It's useful when porting code between 16/32/64 bit Forth systems. See Kernel.fth/Kernel64.fth. Reverted some hard-core NDCS changes in Kernel64.fth until we have better NDCS mechanics. Assembler fixes to addressing using R12. I hope I never have to do another x64 assembler and disassembler! After over 40 years, the x86/386/x64 code is getting really crufty. Alignment fixes in CacheOpt.fth. LIB and STUDIO -------------- Mac: Added OSX64 bit multi-tasker Lib/Osx64/MultiOsx64.fth. Replaced deprecated funtions and simulated an unnamed semaphore with SEM_UNNAMED. Mac: Added MS@ ( -- ms ) and NS@ ( -- ns ) for better timing. EXAMPLES -------- Examples/benchmrk/benchmrk.fth has been updated for 64 bit Forths. The x64 version is about 3% slower than the x86 version which is not a bad result given the increased size of the code. DOC --- Manual rebuilt by release script. TOOLS ----- 5.11 Alpha 4 June 2020 ======================= KERNEL ------ Added DLSHIFT and DRSHIFT ( d -- d' u ) to the kernel with coded versions in reqdcode.fth. The system should be better behaved when exiting after an exception. A return code of signal number + 128 is used. Removed BEHAVIOR. Use ACTION-OF instead. Converted nearly all remaining state-smart words to use the NDCS mechanism. The x64 optimiser is preliminary - there's much more to do. Most of the base x64 instructions have been added to the assembler and disassembler Also added are the SSE and SSE2 instructions. LIB and STUDIO -------------- Added Lib/x64/FPSSE64S.fth which contains a float point pack using 64 bit floats on a separate stack. Updated and tested the FP Extern: interface by disassembly. Enhanced the code generation. The old NDP387 code has been coverted to Lib/x64/Ndpx64.fth. EXAMPLES -------- DOC --- Manual rebuilt by release script. TOOLS ----- 5.11.3787 8 April 2020 ======================= KERNEL ------ Switched to the simple version of recognisers in which all recognisers handle their own POSTPONE actions. Removed the DEFERred words CEXECUTE and CUNDEFINED LIB and STUDIO -------------- Fixed the POSTPONE action of the floating point packs. EXAMPLES -------- Win: Reconfigured Examples\Win32\FCOM to use recognisers. DOC --- Manual rebuilt by release script. TOOLS ----- Previous release notes are in Release.VFX.txt (for 32 bit systems), Release.VFX4.txt and relhist.txt.