Apple IIGS System Software Release Notes Version 5.0.4 December 10th, 1990 Part 2 of 2 These release notes list the changes made from version 5.0.2 to 5.0.4 of the Apple IIGS System Software. Most of these changes were made for version 5.0.3; changes made from version 5.0.3 to version 5.0.4 are noted with 5.0.4 in the margin. GS/OS Changes: GS/OS (composed of the files GS.OS, GS.OS.Dev, and Start.GS.OS): SCM (System Call Manager) Removed code that checks for more than 65535 unclaimed interrupts and calls the subroutine that displays the dialog box. There seems to be a problem with the 6551 chip used in several internal modems that cause spurious interrupts to be generated. This caused GS/OS to generate the unclaimed interrupt error dialog which caused problems for those who were doing remote downloads since the dialog required a response from the user. Fixed bugs in make_seg, deallocate, and lock/unlock_mem which were using 16-bit addressing when the data bank register was not set correctly, so SCM was stomping on memory and not unlocking some handles. Incorporated a bug fix where SCM was erroneously reporting 65536 unclaimed interrupts. Fixed a bug in the notification queue where the event code was being lost if a Notify Proc generated another event. System Error Messages Changed text of unclaimed interrupt error message to send the user to their Apple dealer, instead of a fatal message. ExpressLoad Unloading a dynamic segment by address was not working reliably. When the address of a procedure within a dynamic segment was passed which hadn't been used yet, ExpressLoad looked at its jump table segment and assumed that, since the referenced entry hadn't been patched yet, it couldn't have been loaded yet. This has been corrected by having ExpressLoad always attempt to mark the dynamic segment as purgeable, whether it is in memory or not. Since it ignores a "Segment Not Found" error returned by at attempt to mark the dynamic segment as purgeable, this shouldn't cause any problems. GQuit GQuit's ProDOS 8 loading routines changed due to the new size and version of ProDOS 8 v1.9. Changed allocation of 64K buffer used to read the OS files from disk. Previously, it was allocated as locked, non-fixed, in no particular place in memory. This caused the Memory Manager to allocate the block high in memory. During the boot process, other handles are allocated as locked and never go away, effectively creating a very large free area high in memory (when this buffer is deallocated, that is) that can't be combined with the main portion of free memory (producing fragmentation). Calls to the Memory Manager CompactMem routine have been added prior to: a) Initializing SCM b) Initializing the Device Dispatcher c) Processing Tool.Setup d) Loading Desk Accessories e) Performing the Quit call to load and execute the "Start" program This should further reduce memory fragmentation that was occurring during booting. GQuit now masks off any irrelevant bits of the quit flags prior to sending the quit word to the UserShutdown function of the Loader. Device Manager D_Info call now respects the size of the supplied result buffer for the device name. Console.Driver The User Input Read routine was not updating the GS/OS direct page transfer_count field during the call. During investigation, it was noticed that the raw read routine had the same problem. Both routines have been fixed. SCSI.Manager (5.0.4) 5.0.4: Known bug: The SCSI Manager asks peripherals to return 256 bytes of status into an 8-byte buffer in the middle of the code. Most hard disks only return 8 bytes, but some peripherals return more, overwriting some Manager code and crashing during boot. This is not fixed in 5.0.4. 5.0.4: Changed the startup routines to not reset the SCSI bus, to prevent some peripherals from entering power-on diagnostics in the middle of the boot process (and also to keep the Rev. C SCSI Card from changing CD-ROMs back to 2K/block mode). The Manager version is now 5.4. Fixed Startup Call. If no hardware is found on startup, the bound IRQs will be Unbound now so that they are not left hanging. Designed to support both the old and the new SCSI cards. Modified to add support for the 1 meg transfer rate required by the new card. Also a number of format changes have taken place in the Manager that makes this a new environment. SCSICD.Driver Bug fixes. SCSIHD.Driver Added support for Extended Read and Write in the default command bitmap. Bug fixes. UniDisk 3.5 Driver While being warm-started (after a switch to GS/OS from P8), the parameter list used to download the disk-switched code to the drive was not being set up properly, resulting in the UniDisk failing to recognize disk-switched occurrences. This has been corrected. (Disk switches were still noticed if the driver was called while there was no disk online, so the problem was not obvious in applications like the Finder, which continually poll drives.) ATalk Changed the device characteristics of .RPM so that it no longer allows read access. DRead will no longer hang when issued to .RPM. Fixed a bug in the .RPM driver where it closed RPM without flushing unwritten data. Now calls PMFlushSession before closing .RPM. ATP2.ATRAM You no longer lose connections with servers when you change your machine's clock setting. The ToWriteTime routine is intercepted to keep AppleTalk aware of the current real time. (When you changed your clock, AppleTalk thought that a lot of real time had elapsed-often many hours-and caused all of its timers to expire, including the server session timers.) Fixed a bug in the FIAccess call where it assumed it was passed a complete pathname and returned an error $0A09 (volume not mounted) when a partial path was used. Added a new call (PMFlushSession, $48) to RPM to allow explicit flushing of unwritten data. This call causes the flush timer to complete immediately, causing buffered data to be written. The parameters are the same as those to PMCloseSession. HS.FST (High Sierra FST) Fixed the problem where the disk switched was being returned by the Volume call when High Sierra comes in before ProDOS in the FST calling loop (for example, when booting over AppleShare). It is important that the retry not happen in general, otherwise the FST will blindly read from the wrong disk if you swap disks. ProDOS.FST Fixed several problems related to the SetEOF fix implemented in earlier versions of System Disk 5.0.3. These could cause an error $2C (invalid device request count) to be returned by the FST if certain pairs of calls were executed in succession. Another problem would cause blocks to not get deallocated when cutting back a file's EOF across 64K boundaries. Fixed a bug where cutting back the EOF of a file with more than $8000 blocks allocated to it (counting index blocks) would never change the block count in the file's directory entry (that is, it would be "stuck" above $8000 for all time). Added support for the FLUSH_TYPE parameter for the Flush call. The Flush call now supports two types of flush: a "full" flush, which flushes a file's dirty data blocks and dirty directory blocks, and a "fast" flush which flushes dirty data blocks only. Note that Flush previously performed the "full" flush. The type of flush is specified in the parameter block by the caller. A fast flush is specified by specifying a FLUSH_TYPE of $8000. Fixed bug where SetFileInfo was not handling zeroed fields of the mod_date and create_date parameters correctly. If the entire parameter is zeroed, it's supposed to either use the current date (if its the mod_date parm) or leave it alone (if its the create_date). If only a portion of the field is zero, though, it should use the zero as the value to place in the directory entry. This is now the case. Fixed bug where SetEOF would trash a file when a call was made to move the EOF back or the same on a file which has a sparse area at the end (i.e., sparsed-out blocks at the end of the block list) and the new EOF is still within the sparsed range. SetEOF now always views a change in the EOF as being relative to the position of the last physically allocated block in the file. Fixed a bug where a system crash was possible if a sequence of FST calls caused disk blocks to be freed and then re-allocated on the same volume. Fixed a bug in SetEOF. Under certain conditions, if the new EOF was not an even multiple of $200 file data could be corrupted. When the FST accesses a volume and then a new volume gets swapped into that same device, the FST now allows access to the new volume in that device when the device name is specified in the call. Previously, the FST would display a dialog box asking the user to insert the volume that was seen in that device before the swap. AppleShare FST (5.0.4) 5.0.4: Fixed the routines that shield and unshield the cursor while drawing the arrows in the menu bar during server access. These routines now save and restore the direct page locations documented in the January 1991 revision to Apple IIGS Technical Note #34, Low-Level QuickDraw II Routines. Fixed bug when switching between users with diskless booting. The system disk not recognize that the boot volume had been renamed. ProDOS 8 Version 1.9: Known Bugs: ProDOS 8 doesn't handle seedling sparse files correctly. SET_PREFIX "/" followed by a SET_PREFIX with a volume name without a slash sets the prefix to the first letter of the volume name. Changes: P8 had problems displaying the "program too large" message. This has been fixed. P8 could not load large system programs. When checking the size of the .SYSTEM program to be loaded at boot time, the code was comparing the second byte of the file's EOF to a constant $98. This limited the size of the program to 38K, when it could actually be 39.75K without interfering with ProDOS. The constant value has been changed to $9F. A second version of the Quit call handler has been added to the operating system. The new Quit code lets the user select the next application interactively instead of remebering and typing its pathname. The new quit code is only used on an 80-column Apple IIe or later when ProDOS 8 is booted directly (not when you have booted GS/OS). The original version of the quit code is automatically used on machines that don't have the necessary hardware to support the new code. BASIC.System v1.4.1 Fixed a problem where the high byte of the ,B parameter was not being zeroed, causing BSAVE to create files with excessively large EOFs. CDev Changes: ATalk ImageWriter Printer CDev Fixed the bug with network booting as a guest. The CDev was trying to build a path to the user's ATINIT file. But the guest's user name is returned as the empty string (creating an invalid pathname). It now uses "" instead of the empty string. Fixed text justification problems with static text controls (especially the titles above lists and line edits). Fixed problem with CDev not showing more than 3 ImageWriters on the net. It was incorrectly calling NewList2 with listStart=0 when no printer had been selected, and no printer matched the name in the Printer.Setup file. It now uses $FFFF for listStart (to keep the first item displayed the same as before). Fixed problem with crashing under low memory situations. It was possible for the CDev to get loaded in bank 0 which was causing the problem. ATalk ImageWriter LQ Printer CDev Fixed the bug with network booting as a guest. The CDev was trying to build a path to the user's ATINIT file. But the guest's user name is returned as the empty string (creating an invalid pathname). It now uses "" instead of the empty string. Fixed text justification problems with static text controls (especially the titles above lists and line edits). Fixed problem with CDev not showing more than 3 ImageWriters on the net. It was incorrectly calling NewList2 with listStart=0 when no printer had been selected, and no printer matched the name in the Printer.Setup file. It now uses $FFFF for listStart (to keep the first item displayed the same as before). Fixed problem with crashing under low memory situations. It was possible for the CDev to get loaded in bank 0 which was causing the problem. ATalk LaserWriter Printer CDev Fixed the bug with network booting as a guest. The CDev was trying to build a path to the user's ATINIT file. But the guest's user name is returned as the empty string (creating an invalid pathname). It now uses "" instead of the empty string. Fixed text justification problems with static text controls (especially the titles above lists and line edits). Fixed problem with crashing under low memory situations. It was possible for the CDev to get loaded in bank 0 which was causing the problem. Desk Accessories: VideoMix.NDA v1.3 Fixed bug where hitting the key when VideoMix NDA is up and no card is installed would crash the system. A.U.G. Changes: (Applications and Utilities Group) Installer v1.2 If the last FileSpec in a script required no action to be taken the Installer would get confused and think there were more fields in the script. This has been fixed. Fixed bug where the Installer was incorrectly parsing the file spec field separator character "~" in the scripts. Installer Scripts: SCSI Hard Disk: This script now also deletes Times.12 to make room for the drivers. This script now deletes Shaston.16 to make room for the drivers. ACE Toolset: This is a new script for 5.0.3 that copies the ACE toolset. Additional Fonts: Times.12 is now copied from the System.Tools. disk. Changed to reflect the moving of Shaston.16 to System.Tools disk. AppleShare on 3.5 Disk: Changed to reflect the moving of Shaston.16 and Tool029 to the System.Tools disk. Latest Sys. Files (No Finder): Times.12 is now copied from the System.Tools. disk. Changed to reflect the moving of Shaston.16 and Tool029 to the System.Tools disk. Latest System Files: Times.12 is now copied from the System.Tools. disk. Changed to reflect the moving of Shaston.16 and Tool029 to the System.Tools disk. Local Network Startup: Changed to reflect the moving of Shaston.16 and Tool029 to the System.Tools disk. Server Network Startup: Times.12 is now copied from the System.Tools. disk. Changed to reflect the moving of Shaston.16 and Tool029 to the System.Tools disk. ------------------------------------------------------------------------------ ConvSeconds $3703 Allows conversion to and from a long integer containing the number of seconds Since January 1, 1904-the format used by the Macintosh operating system. ConvSeconds is provided to allow easier handling of dates in applications that work with several different date formats. Parameters Stack before call Previous contents | | | Space | Long-Space for result | | |-----------------| | convVerb | Word-Direction and type of conversion |-----------------| | | | seconds | Long-Number of seconds since January 1, 1904 | | |-----------------| | | | datePtr | Long-Pointer to buffer for converted date | | |-----------------| <-SP Stack after call Previous contents | | | secondsOut | Long-resulting number of seconds | | |-----------------| <-SP Errors $0390 badTimeVerb Invalid convVerb value $0391 badTimeData Invalid date or time to be converted C extern pascal unsigned long convSeconds(convVerb, seconds, datePtr); unsigned Word convVerb; unsigned Long seconds; Pointer datePtr; convVerb The type and direction for the conversion. Valid verbs are: 0 from seconds to the Miscellaneous Tools ReadTimeHex format 1 from the Miscellaneous Tools ReadTimeHex format to seconds 2 from seconds to ASCII text (ReadTimeASCII format) 3 not implemented 4 from seconds to ProDOS date/time format 5 from ProDOS date/time format to seconds 6 return the current time in seconds 7 set the current time from seconds 8 from the Miscellaneous Tools ReadTimeHex format to ProDOS date/time format 9 from ProDOS date/time format to the Miscellaneous Tools ReadTimeHex format 10 from seconds to HyperCard IIgs format 11 from HyperCard IIgs format to seconds HyperCard IIgs format is the same as the Miscellaneous Tools ReadTimeHex format except that the bytes for the month and the day are one-based instead of zero-based. seconds The input number of seconds since January 1, 1904 for all conversions that convert from a number of seconds to a different format, as well as for setting the current time. Conversions to a number of seconds since January 1, 1904 ignore this parameter, although it must be present. datePtr Pointer to a buffer for all input and output values that are not a number of seconds since January 1, 1904. Conversions from a number of seconds will place the results in the buffer pointed to by datePtr; conversions to a number of seconds will get the source from a record pointed to by datePtr. When converting between two formats that are not seconds, the input pointed to by datePtr will be overwritten by the output. WARNING: The buffer pointed to by datePtr must always be at least 8 bytes long and must be at least 40 bytes long when converting to ASCII format. ConvSeconds will overwrite the first eight bytes of the buffer pointed to by datePtr even if the input is less than eight bytes long. secondsOut The output number of seconds since January 1, 1904 for all conversions that convert from any other format to a number of seconds. Conversions from a number of seconds since January 1, 1904 do not use this result space, although it must be present. NOTE: In System Software version 5.0.4, ConvSeconds can return with the carry set and zero in the accumulator when no error occurred. Also, an invalid convVerb value of 12 does not return an error as it should.