• Robert Sprowson's avatar
    Increase upper range of idlen to 21 bits · 45dadad2
    Robert Sprowson authored
    When 'BigMap' support was added drive sizes were such that (see table and discussion in Doc/BigDisc/BigDiscs) an upper maximum of 19 bits for idlen was appropriate. Now that drives of 2^29 sectors are readily available (the limit of 'BigDisc' support) the idlen limit of 19 has meant the minimum object size has grown too. This change uses the remaining 2 indirect disc address bits to get a factor x4 reduction in minimum object size, at the expense of a 4x larger map.
    
    Defns.s: Parameterise idlen for big and small maps. Small's limit remains 15, big's limit raised from 19 to 21.
    Identify.s: When mounting, use the parameterised idlen upper limits to decide whether it's a valid disc or not.
    FileCore32.s: Adjust the BIC masks to knock out the extra 2 bits when forming the hash of the object id. Fix long standing bug updating the wrong entry in the hash table (due to LSL #2 giving 5x the entry index, rather than 3x).
    FileCore15.s: Take care not to shift b20 of idlen into C as a side effect of a flags changing opcode. An audit of FileCore showed this to be the only site where the subsequent condition code(s) depended on C.
    Tools/basic/DispMap: Updated to support BigMaps at all, previously it only worked with NewMap discs.
    
    Tested with an assortment of drives with FSBash for 300k cycles of scrambling for idlen = 17, 19, 20 & 21.
    
    Version 3.75. Tagged as 'FileCore-3_75'
    45dadad2
FileCore15 55.5 KB