Detail: * Added the ability for a filing system to specify to FileCore that floppy discs should be mounted like hard discs, to complement the existing flag that specifies the opposite. SDFS requires this. Ideally SCSIFS should start using this as well, to encapsulate boot block handling within FileCore. * Added header definitions so the FileCore and the filing systems can negotiate the use of a new MiscOp entry, needed as part of partitioning support, especially important for filing systems that use the hardware- specific section of the boot block, like ADFS. At present, FileCore doesn't do anything different (it still doesn't support partitions) but this enables filing systems to be modified in preparation. * Removed the only place where FileCore paid any attention to the EmptyWorks flag returned by MiscOp 1 - an obscure and not very useful edge case not used by any current filing systems. * Added 650 lines of documentation for the MiscOp SWI and low-level entry to the Doc directory, giving the information you need in order to implement a FileCore filing system. * Added missing header file definitions for the low-level background DiscOp reason code and the hot-plug drive removed flag to MiscOp 7. * Removed some RISC OS 2 legacy code whereby FileCore maintained its idea of the internal disc address of the CSD @, PSD \, Library % and URD & for each filing system. Since RISC OS 3.00, FileSwitch handles these internally and passes canonicalised paths to FileCore, so FileCore's disc addresses for these directories remained unset. This allows some considerable simplification of FileCore's path parser in particular, but also affects other code like that which decides how to expire disc records. Also note that FileCore has been unable to generate certain errors (like "Can't delete current directory") since RISC OS 3.00 for the same reason. * Changed loading of the map for FileCore-format discs so that the map is loaded into the dynamic area during the Service_IdentifyDisc handler in one big DiscOp rather than loading it twice, sector-by-sector, via one big sector cache. For one thing, the sector cache is implemented inefficiently - O(n^2) - and for another thing, single-sector DiscOps are relatively inefficient on many filing systems, especially on SD cards. Some example speed-ups measured for mounting discs are: SCSIFS, 1GB drive: was 0.62 sec, now 0.40 sec (1.55 x speedup) SCSIFS, 256GB drive: was 1.44 sec, now 0.52 sec (2.77 x speedup) SDFS, 2GB drive: was 1.25 sec, now 0.14 sec (8.93 x speedup) Admin: Tested on a beagleboard, with SCSIFS and SDFS. Version 3.50. Tagged as 'FileCore-3_50'
Showing with 981 additions and 22 deletions