1. 08 Jun, 2018 1 commit
    • Robert Sprowson's avatar
      Docs update · 04030b45
      Robert Sprowson authored
      Having disassembled various old copies of FileCore, make a note of the most likely reason it declares with fsinfo_dontuseload to maximise the use of background transfer buffers.
      Not tagged.
  2. 14 Jul, 2014 1 commit
    • Ben Avison's avatar
      Support the Raspberry Pi model B+ · eb6c6a2c
      Ben Avison authored
        There's some questionable code in DoSwi[Sector]DiscOp[64] where it calls
        PollChange in an apparent attempt to support the ADFS floppy state machine.
        In the no-card-detect SDFS case, we can detect from a card's state whether
        it has been changed or not; to be able to signal this to software that
        cares about such things, we increment the sequence number late in the
        process. The downside is that when the card *has* changed, two consecutive
        PollChanged calls will differ from the steady state: the first because
        MaybeChanged is signalled, the second because the sequence number
        mismatches. DetermineDiscType didn't handle this gracefully, ending up
        pointing off the internal array of disc records, resulting in a string of
        gibberish when canonicalising a drive-based file spec. Fixed by having
        DetermineDiscType double-check that the drive is not empty.
        Fixed UpCall_MediaNotPresent and UpCall_MediaNotKnown to actually use the
        media type string from MiscOp 4. For example, you'll now see "Please insert
        card 'RISCOSpi'" being generated by the Wimp under SDFS.
        Improved documentation of MiscOps 4 and 5.
        Already in use in RC12a.
      Version 3.64. Tagged as 'FileCore-3_64'
  3. 03 Mar, 2014 1 commit
  4. 20 Jul, 2013 1 commit
    • Robert Sprowson's avatar
      Add support for 2k and 4k sector sizes · 38a141ba
      Robert Sprowson authored
      Make sure the defect list (via *DEFECT) does a read/modify/write of the boot block on 2k and 4k drives.
      The checksum generation code was largely common and although commented to be called as though it was common wasn't actually due to a cut and paste mistake on label 37. Deleted common/uncalled code.
      s/DebugOpts; s/FileCore15:
      Peripheral changes.
      Read in the defect list via an intermediate buffer then copy out into the dynamic area.
      Declare the buffer size as 4k to FileSwitch, internally FileCore expresses this in a single byte * 32 so is now at the limit of the range of FcbBufSz.
      Perform transfers in the foreground when the sector size exceeds FileCore's 1k buffers. It's not worth bothering.
      s/FormSWIs; s/Identify:
      Vet and reject attempts to layout invalid zone/sector size combos (see Doc/1Zone).
      Correct a couple of calculation mistakes.
      New documentation detailing the possible valid combinations of a 1 zone fixed disc, and why for 2k and 4k sectors this is rejected.
      Patch to apply to RAMFS to make it a 4k filing system. Note, the smallest 2 zone RAM disc with 4k sectors is 4052kB, in which case the map is at +3F0000; copy at +3F2000; root directory object at +3F4000.
      Version 3.63. Tagged as 'FileCore-3_63'
  5. 01 Apr, 2013 1 commit
    • Robert Sprowson's avatar
      Fix for mistargetted write with a file size > 2G when a background scatter... · cf85a5d6
      Robert Sprowson authored
      Fix for mistargetted write with a file size > 2G when a background scatter list straddles a fragment
      When large transfers are being buffered to be written in the background they are attached to the Fcb without considering how the underlying disc fragments are lined up.
      When the background process grabs a handful of buffers to build into a scatter list to pass to the low level DiscOp it picks the head of the list and goes forward (SkipWriteBehind) to the fragment end and back (BackwardSkipWriteBehind).
      However, BackwardsSkipWriteBehind uses DefFileFrag which substitutes a default offset of 0, and the signed compare resulted in this being left as the believed start of fragment.
      In turn, far too many buffers got associated with the fragment, and written to the wrong place on the disc.
      In general this doesn't occur, but if the group of buffers happens to straddle a fragment, and that group of buffers is > 2G, the signed compare would trip up.
      As fsbash uses the same random number seed this conspired that testing the same drive twice (with and without background transfers enabled) would appear to pass the integrity check step. A new harddisc was used to show this up.
      FileCore80.s: Recoded the compare to be in sectors, so 4G files aren't top bit set, but shared files not at the fragment start still are.
      Docs/AdfsBuffers: Added some notes before I forget what I just wrote meant.
      Version 3.58. Tagged as 'FileCore-3_58'
  6. 25 Mar, 2013 1 commit
    • Robert Sprowson's avatar
      Reenable background transfer support when BigFiles is {TRUE} · 7a9d7b7d
      Robert Sprowson authored
      BigDirCode.s: Retire BigDirFix switch, it wasn't actually a fix, it was more that the directory format was changed early in development, but there's no point keeping support for the prototype any more
      FileCore45.s/FileCore25.s/FileCore31.s/FileCore35.s/DebugOpts.s: Retire BigDirFix
      Defns.s: Shock addition of some comments
      FileCore.s: Manual inclusion of CPU/Arch no longer needed
      FileCore70.s: Crucially apply the same 1k dead band to the FileSwitch "write zeros" entry point, since it (along with Get/PutBytes) are the only places file offsets get passed
      FileCore80.s: Lots of tedious and subtle boundary cases fixed
      InitDieSvc.s: Removed the disabling switch
      doc/BigDisc/ADFSBuffer: Detail what the BufFlags mean
      Tested on ADFS (the only background-transferring filing system about) with LFAUs of 2k, 4k, 8k, 16k and bashing 65536 iterations.
      Version 3.57. Tagged as 'FileCore-3_57'
  7. 24 Feb, 2013 1 commit
    • Robert Sprowson's avatar
      Extend upper permissable file size to 4GB-1 · 47fd7e2c
      Robert Sprowson authored
      Tested for ~200,000 cycles in various configurations with FSBash, with no integrity problems, nor bad maps. However, background transfers (currently only used by ADFS) is still being endurance tested, hence is currently disabled.
      Users should note that they can create big files without needing to reformat their drives, however if reverting to an older copy of FileCore the files must not be opened, loaded, or deleted (it's fine to view the directory, just don't expect old FileCore to know how to parse such long fragment runs).
      Current versions of DiscKnight (1.49) do not understand long fragment runs.
      * Reviewed and expunged various signed comparisons of file pointers in the existing tests
      * Added new tests for big files which attempt to aggrevate all the usual problems passing over and up to important boundaries
      * Makefile recreated from fragments
      * Some compiler warning squashed
      * Some notes added for big file support
      Commands: swapped to using Command macro
      HelpText: labels renamed to help Command macro
      GenSWIs: text table name for SectorDiscOp ammended to match exported header and corresponding secondary module names (ADFS_SectorDiscOp et al). The usefulness of calling the base instantiation of FileCore_SectorDiscOp is minimal, especially from BASIC.
      Messages: message for attempting to check an old map disc made less terse
      hdr/FileCore: typo
      Version 3.56. Tagged as 'FileCore-3_56'
  8. 28 Oct, 2012 1 commit
  9. 14 Apr, 2012 1 commit
    • Ben Avison's avatar
      Miscellaneous improvements · a6f1b1d7
      Ben Avison authored
        * 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
        * 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)
        Tested on a beagleboard, with SCSIFS and SDFS.
      Version 3.50. Tagged as 'FileCore-3_50'
  10. 13 Sep, 2011 1 commit
    • Robert Sprowson's avatar
      Delete s.AsmHdr, s.DevVersion, Version, s.ModHand · d752b027
      Robert Sprowson authored
      Delete Doc.!ReadMe, update Doc.!Implement
      Collapse dead switches.
       Remove 'nop' macro, use NOP.
       Some definitions taken from global headers.
       Indentation and function calling parameter comments reviewed.
      Still produces the same binary as 3.40.
  11. 03 Apr, 2003 1 commit
    • Kevin Bracey's avatar
      * Various 32-bit compatibility fixes. · ac186d66
      Kevin Bracey authored
      * Can use HAL for FIQ+timer manipulations.
      * FileCore_DiscOp64 added (as user API - currently just converted to the
        standard byte or sector DiscOp call to the underlying module). See
        Doc.32bitAPIs for full details.
      * New error-passing scheme to modules added (for full 32-bit addressing).
      * FileCore_Features added (indicates new error scheme).
      * OS_FSControl 49 (read 32-bit free space) now reports sensible clamped
        values for large discs, rather than values modulo 2^32.
      * Accessing the end of files near 2GB in size could cause lock-ups in
        background transfers.
      * F(+) and G(+) disc formats adjusted to have a little more skew to
        help the rather poor Iyonix floppy controller.
      Version 3.31. Tagged as 'FileCore-3_31'
  12. 26 Jul, 2002 1 commit
  13. 31 Oct, 2000 1 commit
    • Stewart Brodie's avatar
      More 32-bit fixes. · 4c46cbcd
      Stewart Brodie authored
        Flag preservation added to 7 routines that require it.  Docs.32-bit
          updated to remove the names of the functions that have been made
          to preserve flags again.
        This version needs more testing, but at least this version does not
          appear to stiff the machine, corrupt discs, go bang under light
          testing with ADFS and RAMFS.
        26-bit and 32-bit builds slightly tested.
        Do not use in products - Do use in test builds.
      Version 3.25. Tagged as 'FileCore-3_25'
  14. 30 Oct, 2000 1 commit
  15. 09 May, 2000 1 commit
    • Stewart Brodie's avatar
      Merge of Ursula branch to the trunk. · 4abef130
      Stewart Brodie authored
        This module represents the latest version of FileCore incorporating
          both the Ursula changes and the ROL changes as we have them to date.
        Changes from ROL-FileCore-3_21 are basically the stripping of trailling
          spaces and the change of Version to Module_Version in the conditionals.
          No other changes.
        ROL branch tagged ROL_merge
        Ursula branch tagged Ursula_merge.
        Untested, but essentially the same as ROL-FileCore-3_21, so no problems
      Version 3.21. Tagged as 'FileCore-3_21'
  16. 05 Nov, 1996 1 commit