DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦bfd9f8280⟧ TextFile

    Length: 4896 (0x1320)
    Types: TextFile
    Names: »DISKDRVPARAMS.S«

Derivation

└─⟦b8af24a88⟧ Bits:30005796 CR80 Disc Pack ( MINICAMPS )
    └─ ⟦this⟧ »GENS.D!SWELLPREFIX.D!DISKDRVPARAMS.S« 

TextFile

"-----------------------------------------------------------------------
"
"  MODULE NAME:      Disk Driver Parameters
"                    ----------------------
"
"
"  MODULE ID NMB:    CSS/881
"  MODULE VERSION:   0102
"  MODULE TYPE:      Prefix
"  MODULE FILES:     -
"  MERGE  FILES:     -
"  
"  SPECIFICATIONS:   CR80 Disk Driver Product Specification,
"                    CSS/006/PSP/0005.
"  AUTHOR/DATE:      JHO/790323
"
"  DELIVERABLE:      Yes
"  SOURCE LANGUAGE:  SWELL
"  COMPILE COMPUTER: CR80
"  TARGET COMPUTER:  CR80
"  OPER. SYSTEM:     AMOS
"
"
"-----------------------------------------------------------------------
"
"  CHANGE RECORD
"
"  VERSION    AUTHOR/DATE    DESCRIPTION OF CHANGE
"  -------    -----------    ---------------------
"
"    001      GMC/801020     Initial release.
"
"   0102      AEK/810211     CHANGE TO DISK_XFER_MSG TO FACILITATE
"                            HANDLING OF THE SPECIFICATION OF THE
"                            SECTORS TO BE TRANSFERRED
"-----------------------------------------------------------------------



"Throughout, a sectors's number means its logical sector number, as
"defined in the Disk Driver PSP. Note that this is a 3 byte integer.


"PAGE«ff»
"Commands
"--------

const
  disk_read              = 0;
  disk_write             = 1;
  disk_write_and_protect = 2;
  disk_write_and_mark    = 3;
  disk_format            = 4;
  disk_check             = 6;
  disk_initialise        = 7;
  disk_include           = 8;
  disk_exclude           = 9;
type
  disk_drv_cmd = disk_read..disk_exclude;



"Format of a disk transfer request
"---------------------------------

const
  first_most = 0;
  sect_count = 1;

type
  logical_sectors_spec =
    record
      first_least : integer;  "2 least signif bytes of 1st sect's nbr
      field2      : array [first_most..sect_count] of byte
    end;

type
  disk_xfer_msg =
    record
      std               : integer;  "standard, not used
      cmd_priv_unit     : integer;  "compound of command, privacy, unit
                                    " and subunit fields
      sectors           : logical_sectors_spec;   "specification of sectors
                                                  "to be transferred
      buf_addr         : absptr     "absolute address of first sector's buffer
  end "disk xfer msg";

"Composition of cmd_priv_unit field
const
  disk_cmd_posn     =  0;  disk_cmd_length     = 4;
  disk_priv_posn    =  4;  disk_priv_length    = 2;
  disk_unit_posn    =  8;  disk_unit_length    = 2;
  disk_subunit_posn = 12;  disk_subunit_length = 1;



"Format of a disk transfer reply
"-------------------------------

"Composition of cc field
const
  primary_cc_posn   = 0;  primary_cc_length   =  4;
  secondary_cc_posn = 4;  secondary_cc_length = 11;

"(Primary) completion codes
  disk_okay           =  0;
  write_protected_drv =  2;
  unexpected_status   =  3;
  data_or_sync_err    =  4;
  addr_or_sync_err    =  5;
  bad_sect            =  6;
  write_protected     =  7;
  illegal_sect        =  8;
  timing_err          =  9;
  subbus_overr        = 10;
  parity_err          = 11;
type
  disk_cc = disk_okay..parity_err;

type
  disk_drv_ans =
    record
      result   : integer;  "standarad result, defined in DRIVERPARAMS.S
      cc       : disk_cc;  "disk driver completion code
      last     : long;     "If result is okay, then this is the number
                           "of the last sector accessed + 1. Otherwise,
                           "it is the number of the last sector accessed.
                           "N.B. contents of the most significant byte
                           "are undefined.
      buf_addr : absptr    "absolute address of the first sector's buffer
    end "disk drv ans";



"Format of an Include (sub)unit request
"-------------------------------------

type
  disk_include_msg =
    record
      std           : integer;  "standard, not used
      cmd_type_unit : integer;  "compound of command, type, unit & subunit
      max_sect_nbr  : long;     "maximum sector number of the (sub)unit
      sects_per_cyl : integer;  "number of physical sectors per cylinder,
                                "for this (sub)unit
    end "disk include msg";

"Composition of cmd_type_unit field
const
  "The command and unit fields are as for a transfer request
  disk_type_posn = 4;  disk_type_length = 2;

"Type field
type
  cdc_type = (mini_module, storage_module, cartridge_module);



"Format of a Initialise request
"------------------------------

type
  disk_init_msg =
    record
      std      : integer;  "standard, not used
      cmd      : disk_drv_cmd;
      addr     : integer;  "compound of priority and I/O address
      not_used : array [3..5] of integer
    end "disk init msg";

"Composition of pri_and_addr field
const
  priority_posn = 0;  priority_length = 2;
  address_posn  = 2;  address_length  = 6;