Annotation of driverkit/notes/FloppyParams, revision 1.1.1.1

1.1       root        1:                        Floppy disk param notes
                      2:                        
                      3: Current driver
                      4: 
                      5: fd_attach_com {
                      6: 
                      7:        recal, abort if error (do some retries);
                      8:        get status (MID, WP, etc.);
                      9:        get struct fd_disk_info (fd_format_info.fd_disk_info) via MID;
                     10:        for(fd_format_info.density_info.density= 4 to 1) {
                     11:                seek to read_id_cyl (should ++);
                     12:                if read_id works
                     13:                        goto found_dens;
                     14:        }
                     15:        
                     16:     found_dens:
                     17:        if density = none {
                     18:                disk unformatted:
                     19:                
                     20:                // get defaults for density, sect_size
                     21:                density = fd_format_info.fd_disk_info.max_density; 
                     22:                sect_size = fd_get_sectsize_info(density)[0].sect_size
                     23:                set_density_info(density); 
                     24:                set_sector_size(sect_size);
                     25:                return;
                     26:        }
                     27:        
                     28:        mark disk as formatted to allow reading;
                     29:        for each legal sect_size for the fd_sectsize_info for this density {
                     30:                set_sector_size(sect_size);
                     31:                do a retry loop {
                     32:                        read(test_sector++);
                     33:                        if good
                     34:                                goto found_sect_size;
                     35:                }               
                     36:        }
                     37:        mark disk unformatted;
                     38:        return;
                     39:        
                     40:     found_sect_size:
                     41:        return good;
                     42:        
                     43: }
                     44: 
                     45: set_density_info(int density) 
                     46: {
                     47:        // don't have to save sect_size; sectsize_info won't change by the 
                     48:        // time we need it...
                     49:        
                     50:        save current sect_size from fd_format_info.sectsize_info.sect_size;
                     51:        find fd_density_info for spec'd density, write it to
                     52:                fd_format_info.density_info;
                     53:        set_sect_size(saved_sect_size);
                     54:        if density == none
                     55:                mark disk unformatted;
                     56: }
                     57: 
                     58: set_sect_size(sect_size) 
                     59: {
                     60:        validate that this sect_size is legal for current 
                     61:                fd_format_info.density_info;
                     62:        set fd_format_info.sectsize_info;
                     63:        set disk formatted;
                     64: }
                     65: 
                     66: .........................
                     67: 
                     68: what are all of these weird structs?
                     69: 
                     70: fd_disk_info (fd_disk_info_t): fd_extern.h
                     71:        maps media_id to tracks_per_cyl and num_cylinders.
                     72:        One per media_id in fdDiskInfo[].
                     73: 
                     74: fd_sectsize_info (fd_sectsize_info_t): fd_extern.h
                     75:        contains ector size, 82077 sector size codem sects_per_track, gap.
                     76:        One of these for each legal density/sectsize combo in ssi_Xmb[].
                     77: 
                     78: fd_density_info (fd_density_info_t) : fd_extern.h 
                     79:        Maps density to capacity and mfm.
                     80:        One per density in fdDensityInfo[].
                     81:        
                     82: fd_format_info (fd_format_info_t, fdFormatInfo_t) : fd_extern.h
                     83:        Contains all current info about inserted disk. 
                     84:        fd_disk_info, fd_density_info, fd_sectsize_info, total_sects, flags.
                     85:        Obtained via ioctl(FDIOCGFORM).
                     86:        
                     87: fdDensitySectsize_t : FloppyTypes.h
                     88:        maps density to an array of legal fd_sectsize_info's.
                     89:        One per legal density in fdDensitySectsize[].
                     90:        
                     91: fdDriveInfo_t : FloppyPublic.h
                     92:        drive_info (for ioctl(DKIOCGINFO)), seek, settle, unload time.
                     93:        One per drive type (only one) in fdDriveInfo[].
                     94:        

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.