EDOS revision history Greg Cook Version Date Release character 1.39 2024-03-20 T - Restoring the previous *SPOOL enabled state after printing EDOS messages is fixed following the optimisation in v1.00. 1.38 2024-02-22 S - The 'save AXY' routine is sped up. - Minor optimisation to the decimal printing routine. 1.37 2024-02-11 R - Termination of *SPOOL output on a "Can't extend" error is fixed following its introduction in v1.00. - *TITLE writes a NUL-padded title to the current volume. 1.36 2023-08-06 Q - Monitor messages for OSBGET and OSBPUT are controlled separately from other API monitoring messages in *OPT 1. Bit 4 of the *OPT 1 parameter enables OSBGET monitoring; bit 5 enables OSBPUT monitoring. The old effect of *OPT 1,4 is obtained with *OPT 1,52. 1.35 2023-05-14 P - Hazel builds pass unrecognised *commands to the library filing system, and avoid recursion when invoked as the LIBFS. 1.34 2023-04-08 N - OSFILE calls &23 to &29 added to write various file attributes or raise an error if the file is not found. - *HELP returns information according to each matching keyword on the command line. 1.33 2022-10-29 M - Minor code optimisations in OSWORD &7F. 1.32 2022-10-01 L - OSFILE call 0 returns the catalogue information of the saved file to the control block. Calls 1 to 4 return A=0 if the file is not found. - EDOS passes Tom Seddon's filing system tests. 1.31 2022-09-27 K - Paged ROM service call &15 is not monitored. - All sideways RAM builds can optionally be assembled to avoid use of page &BF. 1.30 2022-09-21 J - OSWORD &7F commands &4F (write deleted data) and &57 (read data and deleted data) are fixed by setting the accept/scrub semaphore correctly, following the optimisation of v1.00. - Paged ROM service calls &00, &05 and &0E are not monitored. - Standard sideways RAM builds can optionally be assembled to avoid use of page &BF. 1.22 2022-09-12 H - OSFILE &21 writes a file's load and execution addresses, preserving its attributes. OSFILE &22 loads a file and writes its load and execution addresses. (The low byte of the execution address on entry controls the load destination, as with OSFILE &FF.) 1.21 2022-09-09 G - Utilities and OSWORD &7F acknowledge an escape condition and raise the Escape error. - Filing system messages are printed via OSASCI, affecting the display of non-standard filenames and disc titles. - Various code optimisations. All _SWRAM and _NOMON builds come in under 14 KiB. 1.20 2022-09-06 F - OSGBPB 8 returns XY+9..12 = &FFFFFFFF if the user runs out of filenames in the current directory. XY+5..8 remains non-zero and the carry flag is set. See the RISC OS PRM, p. 2-72. (NB. Acorn documentation does not define the returned pointer value except as above, and only in RISC OS.) - Calling OSGBPB 8 with XY+9..12 = &FFFFFFFF preserves XY+5..8 and returns no filenames. - Sideways RAM builds avoid installing duplicate copies in RAM. The installer is compatible with sideways RAM boards featuring write-through. 1.13 2022-06-28 E - OSWORD &7F command &63 (format track) is fixed by keeping the workspace paged in during the disc operation, following the sideways RAM enhancement of v1.00. - The paged ROM service call monitor is fixed for calls 7 and 8 by preserving the stored OSBYTE/OSWORD register values, following the internal adoption of OSBYTE in v1.00. 1.12 2022-06-14 D - Track stepping auto-detection looks specifically for sectors 0..1 on track 2, to support 'slipper' multi-volume discs which do not have sectors 16..17 on that track. 1.11 2022-05-31 C - Hangup eliminated while raising a "Channel ..." error. - Memory swap routine, used in OSGBPB 1 and 3 and OSARGS 3,Y, fixed following the source reconstruction of v1.00. 1.10 2022-05-27 B - The disc operation loop is insensitive to completed plain Seek commands and previous handling of deleted data. - Only OSWORD &7F command &30 does Force Interrupt. - Symbol _EMU removed; builds are emulator-friendly by default. 1.00 2022-04-29 A - Code reassembled into one block. - Workspace resident in main memory, Hazel, sideways RAM or a BooBip.com OS RAM module. Sideways RAM builds use "E00 DFS" boards or copy themselves to RAM on startup. EDOS cooperates with an OS running in RAM. - Command *EX added, and Master computers can call *INFO. - *HELP E is renamed *HELP EDOS, and displays authorship information and the type of workspace memory EDOS uses. - The *UNLOCK command is removed. Replace with *ACCESS . - *RENAME supports changing the case of a filename in-place. - *DUMP leaves the *SPOOL enabled state (in *FX 3) unchanged. - A new *OPT 10 setting controls OSWORD &7F gatekeeping and the track stepping speed. Bit 7 (adding 128) allows EDOS to accept OSWORD &7F calls even when it does not own the shared workspace. Bits 1 and 0 (adding 0 to 3) control the speed of track seeks: 0 is the slowest setting, 3 is the fastest. The options are set from keyboard links 1, 3 and 4 on startup. - A file's leaf name may contain ":" from the second character onwards, "." from the third onwards, and trailing spaces. - Stricter ambiguous volume spec parsing; e.g. *CAT 0+ barred. - Eight OSFILE calls added: &19 reads a file's catalogue information or raises an error if the file is not found; &1A deletes a file or raises an error if not found; &1B loads and then deletes a file; &1C loads a file and rewrites its catalogue information from the OSFILE control block; &1D, &1E and &1F load a file and rewrite its load address, execution address or attributes, respectively. &20 loads a file and increments the cycle number of the catalogue. Note that in all file load calls, the LSB of the execution address controls the load destination of the file even if it is then written to the catalogue; see OSFILE &FF documentation for details. - OSFILE avoids causing dummy read cycles in user memory while transferring the contents of the last sector of a file. - OSFILE always transfers whole sectors from and to the paged ROM address space, to permit loading truncated images into sideways RAM. - OSGBPB with A=8 returns no filenames if XY+5..8 is zero. - OSGBPB with A=6 or A=7 omits the volume letter if the drive in question contains a single-volume disc. - *SPOOL output terminates if it raises a "Can't extend" error. - A call is provided to examine the workspace wherever located: the user calls OSARGS with A=6, Y=0 and X pointing to four bytes of which the first is the offset into main workspace. Three bytes of the workspace are returned at X, and X?3 = 0. - The filing system has the option of issuing only standard OSWORD &7F commands and passing the control blocks to other ROMs via shared memory. - Assembly of the system call monitors is optional. - The extension commands in OSWORD &7F have been renumbered: Force Interrupt = &30 (was &36), Write Track = &65 (was &64), Read Track = &71 (was &65). - OSWORD &7F command &53 (read data) correctly backspaces over deleted-data sectors read into a large coprocessor. - OSFIND, OSBPUT, OSBGET and OSFILE join OSARGS in returning D=0 in accordance with Acorn documentation. OSGBPB likewise clears the CPU's decimal flag. --- EDOS 1.00 merged both branches of EDOSPAT on 2022-04-24 --- 7.06 2021-06-03 7 - OSFILE calls that delete a file or read its catalogue information return A=0 if the file is not found. - *RUN and */ enter an executable loaded into the I/O processor with the same register contents as Acorn DFS: C=1, A=1, X=&FF and in Y the offset of the command line tail from the GSINIT pointer at &F2..3 (such that a call to GSINIT will select the command's first argument.) Note that C=1 distinguishes these entries from a *LINE call which has C=0, A=1 and the argument pointer in XY. - WD 1770 and 1772 controllers perform a spin-up sequence during Restore and Seek unless the drive motor is already on. - OSBGET returns N and Z set according to the value in A. Note that Acorn documentation does not define these flags on exit and so code intercepting the OSBGET vector may alter them. 7.05 2021-04-02 5 - OSFILE 0 immediately raises a "Disc/Volume .. full" error if the file to be saved is 512 KiB or larger. - OSFILE 6 returns the file's catalogue information to the control block before deleting the file. - OSGBPB returns only the 13 bytes of the control block to user memory; the byte at offset 13 is preserved. - Minor improvements to ROM service, memory copy, OSARGS 1Y/3Y, fragmented free space detection and multiple-sector OSGBPB. 7.04 2020-12-03 3 - The Force Interrupt command issued when EDOS initialises has no parameters; the result is returned to a defined location. - OSWORD &7F ignores NMIs from when it gains control of the NMI area until it installs the proper NMI service routine. - Minor improvements to OSFILE final sector handling. 7.03 2020-11-12 1 - System call monitors take less CPU time when inactive. - System call monitors do not print messages while EDOS is preparing an error message. - The 'save AXY' routine places three fewer bytes on the stack per call. 7.02 2020-11-04 u - All new changes are made directly to the disassembly listing. - OSWORD &7F preserves the Econet reserved memory area, and only uses the NMI reserved areas while claiming them. - OSWORD &7F command &6C (read drive status) releases the NMI resource after claiming it. - OSWORD &7F commands &7A (write special registers) and &7D (read special registers) always claim the call; the WD2791's sector register is moved from register &05 to register &06. (This register returns the sector number where a command terminated. On error the 8271 and 2791 both return the number of the offending sector; but on success the 8271's command self-terminates whereas a multiple read/write on the 2791 is interrupted while waiting for a sector numbered one higher than the last one encountered.) - OSBGET returns A=&FE at end of file. 7.01 2020-09-05 t - New target: the Opus 2793 controller. - *ADDRESS returns error &FC, "Bad address" on an incorrectly formed address argument. - The memory copy routine uses locations &B2..7; locations &B0 and &B1 are vacant. - Minor code optimisations. - Assembly program does not change MODE if sufficient workspace is already available. 7.00 2020-06-09 s - OSARGS with A=1, Y>0 (set PTR) and OSGBPB with A=1 or 3 also set EXT if the new pointer is beyond end of file. - OSARGS with A=3, Y>0 (set EXT) also sets PTR if the pointer is beyond the new end of file. The extent now always equals or exceeds PTR. - OSARGS and OSGBPB clear all bytes from the old to the new end of file when the setting of PTR or EXT causes an open file to be extended. OSARGS with A=1 or 3, Y>0 returns A=0 when it extends the file, A=&FF otherwise. - OSARGS with A=6, Y>0 (set allocated length) discards the sector buffer if its sector address is beyond the new allocation. NB: To ensure recovery through file handling calls of data appended to an existing file within its starting allocation, call OSARGS &FF or &FF,Y regularly and call OSARGS 6,Y once. The latter writes an excess file length to the catalogue in case of a crash. EDOS may cover appended data automatically at a later date. - The memory copy routine has been sped up and extended. EDOS no longer uses locations &B6 or &B7. 6.20 2020-06-01 F - OSFILE transfers only the bytes in the file to or from user memory. Unused bytes in the last sector of the file are cleared before writing to disc. - OSARGS with A=6, Y>0 (set allocated length) ensures that the file is up to date on the disc after rewriting the catalogue entry; this empties the sector buffer and keeps it from overwriting a sector that may later be reallocated. 6.11 2020-04-29 r - In *FORMAT and the OSWORD &7F Format command, Gap 4 extends from the last sector to the end of the track buffer. 6.10 2020-04-23 q - Supports 160/320 KB double density format as well as existing DDOS and DFS. Auto-detects all formats or use *OPT 6 settings 16, 18 or 10 respectively. - OSWORD with A=&71 returns the free space on the current volume, in bytes. (Duplicates function of OSARGS 5.) - The *OPT 7 volumes setting selects a single volume disc if it would otherwise place the disc catalogue beyond the end of track 0. Previously such a setting would cause *CAT to fail with 'Seek error.' NB: accessing a multi-volume disc as a single volume disc can cause data corruption; values of 8 or less are safe with DDOS discs, 7 or less with the new format. - All *HELP calls are passed to lower ROMs after service. - Internal 'save AXY' routine sped up. As it is used extensively, performance should noticeably improve. - Minor changes to OSARGS wrapper and OSWORD gatekeeping code. 6.03 2019-09-22 p - OSARGS with A=1, Y>0 (set PTR) and OSGBPB with A=1 or A=3 set PTR to &FFFFFF if the given pointer exceeds this value. - OSGBPB with A=1..4 return PTR in the range 0 to &FFFFFF (that is, the MSB is cleared.) - Faster response to paged ROM service calls, especially &0E (ROMFS get byte). - The version number and date are not printed in the startup banner; they are still available from *HELP. 6.02 2019-09-05 n - Patch blocks rearranged. - OSARGS with A=6, Y>0 (set allocated length) allocates the minimum length to cover the request or the file's extent, whichever is larger. This allows a program to dispose of an open file's excess allocation, so as to open more files for instance. Passing an argument of zero reduces the allocated length to only the sectors currently containing data. - The unused parts of the catalogue are cleared after deleting a file. - *HELP E is not passed to lower ROMs after service. - Faster response to paged ROM service calls when the service call monitor is inactive. Performance of the ROM Filing System will be improved. 6.01 2019-03-07 m - Improved *HELP E and *HELP DFS listings. - Integrated OVL into build chain. 6.00 2019-02-12 l - Added command *ADDRESS to change the load and execution addresses of files. To make room for the command, *HELP E replaces *HELP EDOS. - The tabulation routine prints a newline instead of spaces to reach the start of the next line. The output of *CAT is now compatible with XFer. Error message printing, and *CAT and *HELP while the VDU is disabled, are reliable regardless of the cursor position. - Optimized code implementing *HELP . --- Version numbers 5.xx are reserved for the High Density branch --- 4.93 2019-01-17 k - Code layout improvements. 4.92 2019-01-12 j - *ACCESS now works following the GSINIT fix of v4.70. - OSARGS with A=6, Y>0 extends files opened for writing and does not extend files opened read-only, even if more than one file has been opened. - Code efficiency improvements. 4.91 2018-12-30 h - OSARGS with A=3 or 6, Y>0 behave correctly when the desired extent or allocation is &01000000 or greater. A=6, Y>0 always returns an allocation at least as large as the request, or else raises a "Can't extend" error. - Minor code efficiency and entry condition improvements. - The forward reference in the assembler is checked against the actual target during assembly. 4.90 2014-02-15 g - OSFILE with A=7 creates a file with undefined contents. A=8 is ignored. A=9 raises an error if the file is not found, otherwise it increments the catalogue cycle count. A=19 raises a "File not found" error. A=24 returns &00000100 in XY+2..5. Other calls up to A=23 are aliased to one of these or the existing calls. See the RISC OS PRM, pp. 2-32 and 2-33. - OSARGS with A=4, Y=0 returns the used space on the current volume, in bytes. A=5, Y=0 returns the free space on the current volume, in bytes. A=3, Y>0 sets an open file's extent, and extends the file on disc if necessary. A=4, Y>0 returns an open file's allocated length. A=5, Y>0 returns an open file's EOF status. A=6, Y>0 ensures that an open file's allocated length is at least the specified number of bytes. See the RISC OS PRM pp. 2-54 to 2-57. - OSARGS with A=1, Y>0 (set PTR), A=3, Y>0 (set EXT), and OSGBPB with A=1..4 always clear the EOF warning flag. See the RISC OS PRM, pp. 2-52, 2-68 and 2-69. - OSFIND considers only bits 7, 6 and 3 of A. If bits 6 and 3 are both set and the requested file is not found, OSFIND raises an error. See the RISC OS PRM pp. 2-78 and 2-79. 4.85 2010-04-20 f - If an OSGBPB call results in a "Cant extend" (sic) error, the file length would still be set equal to the pointer, causing the file to overlap the next file or the end of the disc; the incorrect length would be written to the catalogue when the file is closed. OSGBPB now only extends the file via the internal OSBPUT routine or directly after a sector write, which goes ahead only if there is space to write one or more sectors. 4.84 2010-04-13 e - In */ and *RUN the execution address is expanded to 32 bits to jump to addresses in the ARM7TDMI coprocessor successfully. 4.83 2010-01-29 d - Fixed the latch value construction code in *FORMAT, introduced in v4.71, which prevented double density formats verifying. 4.82 2009-08-11 b - *RUN, */ and OSFILE can load and save files up to the maximum allowed size (359 KB), useful for larger coprocessors, and will not call OSWORD &7F to transfer zero sectors, with unpredictable results. - OSFILE converts load and execution addresses in full 18 bit resolution. Addresses in the catalogue are mapped to external addresses 0..&2FFFF and &FFFF0000..&FFFFFFFF and vice versa. An input address outside these ranges is stored in the catalogue as &3FFFF. As EDOS does not recognise shadow memory, segment 2 was prioritised for the coprocessor rather than the shadow area (&FFFExxxx.) - An excess call to GSINIT has been removed from OSFILE, OSFIND and OSFSC. These functions now understand file names enclosed in double quotes just as *commands do. 4.81 2009-07-30 a - In OSGBPB, a write ending in a whole sector transfer sets the correct file size. This was a 'dogfood' bug as EDOSpat was producing empty files. In making a longer jump to reopen the Tube channel the main thread reached a test for L>0 and returned without copying PTR to EXT; thus OSGBPB is not entirely restartable at the jump point. 4.80 2009-07-28 Z - OSGBPB restructured so that the Tube data channel is reopened after direct transfers. This eliminates the need for the broken fix to OSWORD &7F. - In the Read ID command the settling delay bit is cleared on all targets. 4.71 2009-07-17 Y - *TITLE now works following the GSINIT fix of v4.70. - While OSGBPB has a data channel open to the Tube, OSWORD &7F will use it instead of opening its own channel. Whole and part sectors can now be transferred in one OSGBPB call. - The 50 us delay after storing the latch, introduced in v4.70, was found to be a red herring and has been removed. - The latch value construction code has been placed inline in OSWORD &7F to save space and time. --- High Density branch forked with version 5.00 on 2009-07-15 --- 4.70 2009-07-07 X - New target: the Slogger Pegasus 400 board for the Electron (untested). - An excess call to GSINIT has been removed, so *commands of the form *LOCK"PROG" etc. address the correct filename, PROG. This was a big compatibility problem with commercial programs. - Delays for 50 us after writing the control latch. The latch write strobe is connected to the WD2791 master reset in Opus boards. Modified boards are now stable when switching between 250 kHz and 500 kHz operation. - By adjusting the latch parameters in the controller record, either the DFS or the DDOS format can be made to work at 500 kHz FM (8" floppy style) for reliable performance on 3.5" HD discs. Standard DFS or DDOS discs, respectively, will not be readable with the same ROM. - Improved the volume fix introduced in v4.51. 4.60 2009-02-20 W - EDOSPAT has been adapted to use the controller records from my multiformatter program. This makes available two new targets: the early Watford Electronics 1770 controller and the Opus Challenger 3-in-1 unit. - The disc catalogue is written with version number &20 and the sector count in big-endian form as written by DDOS. 4.52 2008-09-09 V - When track stepping auto-detection is enabled with *OPT 8,255 or similar, *VERIFY verifies the entire surface including tracks 0 and 1. 4.51 2008-02-25 U - EDOSPAT version string format changed and Master target binary file renamed at the suggestion of a binary sent by Steve Bass. - The yes/no question prompt flushes the current input buffer, not the keyboard buffer specifically. - *FORMAT now succeeds when the *OPT 7 volume setting is 1. The single volume occupies the whole disc apart from the catalogue track. 4.50 2008-02-10 T - New target: the BBC Master controller. - Acorn 1770 target now works. Many thanks to Steve Bass for his investigation and sample code for both targets. - The control latch conversion routine is now table-based. - Prints a newline before the banner in *HELP. - Files are created with load and execution addresses of &3FFFF. - OSFILE can unlock Locked files, or change their catalogue information. The attribute is returned as per Acorn DFS: &00 if unlocked, &08 if locked. Bits 1 and 3 are tested on input, as before. - OSWORD calls &7D and &7E are only answered if EDOS owns the shared workspace. Otherwise they are passed on so that a client filing system (such as HADFS) can query the volume in its own format. As before, OSWORD &7F responds if EDOS owns the workspace or keyboard link 1 is made (HADFS compatibility option). - Further reduced stack load and overhead of OSARGS wrapper. 4.40 2007-05-27 S - Paged ROM header standardised to J.G.Harston's preferred format. - EDOSPAT version string format changed. - OSWORD calls &7D..&7F proceed regardless of workspace ownership if keyboard link 1 is made. As before, this link also activates the 1770 emulation hooks. - *HELP . is recognised and gives help for all recognised keywords (EDOS, DFS and UTILS). - *HELP "" is ignored. - *DUMP prints DEL characters as dots. - The EDOS banner is printed with one newline in *HELP. - edospat_gb_sector_op expects and returns the address in locations &BC,&BD,&1073 and &1074. 4.30 2007-04-30 Q - Further comments added. - *DRIVE is made an alias of *VOL. The drive identifier returned by OSGBPB calls 6 and 7 becomes a valid argument to *DRIVE, and EDOS becomes compatible with the DDOS usage of this command. - Paged ROM calls &0A (absolute workspace claim) and &0F (vectors changed) cause EDOS to flush all open files, so that other ROMs cannot affect the contents of files by claiming and overwriting the workspace. - The OSARGS wrapper is optimised to save space. As a result OSARGS returns C=1 iff the command is not recognised. The specification does not define the state of the carry flag, so this behaviour should not be expected in other filing systems. - OSGBPB 5 returns the drive number after the volume title and boot option. - OSWORD calls &7D..7F are ignored if EDOS does not own the absolute workspace, to prevent corruption of data. Note that no monitor message will be printed either. 4.22 2007-04-26 Q (Unreleased) - Page &A5 cleared of garbage. - The address of the extended vector table is fetched using OSBYTE &A8. - OSFSC 7 returns the correct range of file handles, &11..15. - The peak stack load of the OSARGS wrapper is reduced. - The OPUS EDOS banner is printed with the conventional double newline. 4.21 2006-11-27 P - LBA transfers (as used by OSFILE and OSGBPB) do a 24 bit add to update the OSWORD &7F address after transferring each track. This fixes a bug affecting larger Tube coprocessors. 4.20 2006-11-24 N - Patch blocks rearranged. - OSGBPB read/write routine compacted. - OSARGS returns a value in A depending on the call, in accordance with J.G.Harston's documentation. - OSGBPB returns A=0 on exit from recognised calls. - OSGBPB calls 6 (get CSD) and 7 (get library directory) return the volume identifier as , so that the path is completely described. - Whole sector transfers clear the channel's EOF warning flag, as with bytewise transfers. - After transferring a single byte in OSGBPB, the data pointer is incremented in 32-bits. 4.10 2006-11-15 M - Patch blocks rearranged. - Entry conditions of edospat_gb_lba changed. - OSGBPB whole sector transfers are done to the correct drive when multiple drives are in use. 4.04 2006-08-16 L - OSWORD calls above &7F are passed to lower paged ROM slots. - OSWORD calls &7D and &7E are not passed, having being serviced. - In OSWORD &7F, the Lost Data / Late DMA error is translated to its 8271 equivalent. - The routine to skip sectors of deleted data decrements the read address correctly. 4.00 2006-05-10 K - Patch blocks rearranged. - Page &92 cleared of garbage. - OSGBPB reads and writes whole sectors where possible. Carry-setting wrapper replaced with inline routine. 3.00 2006-04-04 J - Disc operation loop reassembled. - Waits for non-accepting state { NotReady SpinUpComplete } to clear before issuing command to controller. + This fixes a problem that caused part of the Opus 2791 image to be incorrect in the 2.02 release. 2.02 2006-03-13 H - When keyboard link 1 is made, emulation hooks default to accessing standard controller (so link state doesn't matter.) - *HELP HELP renamed *HELP EDOS. - EDOSPAT version string format changed. - Sense of Index and Track 0 flags determined. 2.01 2005-08-03 G - Some variable names contracted. 2.00 2005-07-02 F (Unreleased) - EDOSPAT patches image in parts using OSGBPB. - 8271 command table and NMI handlers reassembled. - All hardware access goes through hook routines, activated by keyboard link 1. 1.20 2005-06-16 E - When reading from disc, OSGBPB stops at end of file instead of raising an EOF error. - OSGBPB carry-setting wrapper rewritten to use existing routine to test length field. 1.15 2005-06-14 E (Unreleased) - *HELP HELP co-opted to display EDOSPAT version and target. - 'Force motor on' instructions for 1770 controller replaced with no-ops. - Comments reworked. 1.14 2005-06-04 D (Unreleased) - OSGBPB carry-setting wrapper made re-entrant. - More comments and abstraction. 1.13 2005-02-08 C (Unreleased) - In OSWORD &7D..E, the destination address is correct when copying the default path to the immediate path. 1.12 2005-02-02 - No changes. Updates to notes.txt. 1.11 2005-02-01 - No functional changes. Comments added. 1.10 2005-02-01 B - NMI handlers ignore INTRQ. + Patching is done by inserting code and replacing values according to a DATA table. + Multiple target DATA table dependent on this patch. 1.00 2005-01-27 A - Patching for multiple floppy drive controllers. + Patching is done by replacing instruction operands according to a DATA table. - OSWORD &7D, &7E implemented, based on DDOS 3.45. - OSGBPB exits with C=1 if the length field >0 on exit (EOF), or if the call is invalid. - Pages &85, &89, &9E, &9F, &AF and &B9 cleared of garbage.