Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 (Tek) 9/28/84 based on 9/17/84; site tekchips.UUCP Path: utzoo!watmath!clyde!cbosgd!cbdkc1!desoto!packard!hoxna!houxm!vax135!cornell!uw-beaver!tektronix!tekcrl!tekchips!toma From: toma@tekchips.UUCP (Tom Almy) Newsgroups: net.lang.forth Subject: Re: Multi-user and files Message-ID: <505@tekchips.UUCP> Date: Mon, 13-May-85 12:26:59 EDT Article-I.D.: tekchips.505 Posted: Mon May 13 12:26:59 1985 Date-Received: Wed, 15-May-85 00:38:57 EDT References: <161@vger.UUCP> Reply-To: toma@tekchips.UUCP (Tom Almy) Organization: Tektronix, Beaverton OR Lines: 27 Keywords: multitasking In article <161@vger.UUCP> valencia@vger.UUCP writes: > > I've just finished writing a multi-tasking FORTH for the Z-80. >Like so many before, I held off on the disk drivers until the system >was more or less debugged. Then I came across what ends up being an >interesting question in FORTH philosophy: exactly how DOES one do the >FORTH memory buffering scheme? [...] > Andy Valencia I have a Z80 multiuser Forth, based on NVSS F83 Forth. This and every other multitasking Forth I have seen (including polyFORTH) will only change tasks when a word PAUSE is executed. All I/O and disk accessing words contain PAUSE, especially in any ready-wait loops. Essentually this means that the address returned by the BLOCK word is valid until the next I/O word. It is the task's responsibility to move any data to a private storage area if it needs to do I/O without possibly loosing the data. The word ">TYPE" is used in the words LIST INDEX, and within the editor to make sure an entire line of a screen gets printed before the buffer gets swapped out. It is defined: : >TYPE SWAP OVER PAD SWAP CMOVE PAD SWAP TYPE ; (it moves the data to PAD before typing). Two block buffers are adequate. If operating under a DOS, such that the block buffers are associated with files, there are additional complications is different tasks can refer to different files. Tom Almy