$CONTROL MAP,CODE,USLINIT                                               00010000
  <<        ioflop0 ,module 39 - 7902 hpib  floppy driver >>   <<*7931>>00015000
<< hp32002c mpe source c.00.00 >>                                       00020000
<< COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980.           >>  00025000
<<     this program may be used with one computer system at a       >>  00030000
<<     time and shall not otherwise be recorded, transmitted or     >>  00035000
<<     stored in a retrieval system.  copying or other reproduction >>  00040000
<<     of this program except for archival purposes is prohibited   >>  00045000
<<     without the prior written consent of hewlett-packard company.>>  00050000
<< **** note - dollar copyright cannot be used with this module *** >>  00055000
$control privileged,uncallable,main=ioflop0                             00060000
$tp                                                                     00065000
$title "7902(FLOPPY) FLEXIBLE DISC DRIVER "                             00070000
floppy dit -                                                   <<*8726>>00075000
                                                               <<*8726>>00080000
      0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15          <<*8726>>00085000
 dit +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+         <<*8726>>00090000
  0  !0 !0 !ac!rq!0 !0 !sp!cp!ia!nr!sw!  !   state   !  dflag  <<*8726>>00095000
     -------------------------------------------------         <<*8726>>00100000
  1  !           pointer to next dit                 !  dlink  <<*8726>>00105000
     -------------------------------------------------         <<*8726>>00110000
  2  !        pointer to active ioq or zero          !  dioqp  <<*8726>>00115000
     -------------------------------------------------         <<*8726>>00120000
  3  !              logical device number            !  dldev  <<*8726>>00125000
     -------------------------------------------------         <<*8726>>00130000
  4  !      driver linkage table pointer             !  ddltp  <<*8726>>00135000
     -------------------------------------------------         <<*8726>>00140000
  5  !      interrupt linkage table pointer          !  diltp  <<*8726>>00145000
     -------------------------------------------------         <<*8726>>00150000
  6  !     special error conditions to be logged     !  dstat  <<*8726>>00155000
     -------------------------------------------------         <<*8726>>00160000
  7  !          error logging information            !  dserr  <<*8726>>00165000
     -------------------------------------------------         <<*8726>>00170000
  8  !      index of first request in queue          !  dqhead <<*8726>>00175000
     -------------------------------------------------         <<*8726>>00180000
  9  !      index of last request in queue           !  dqtail <<*8726>>00185000
     -------------------------------------------------         <<*8726>>00190000
  10 ! iot !                 !  physical unit number !  dunit  <<*8726>>00195000
     -------------------------------------------------         <<*8726>>00200000
  11 !                   spare                       !         <<*8726>>00205000
     -------------------------------------------------         <<*8726>>00210000
  12 !      current logical disc address index       !  clda   <<*8726>>00215000
  13 !                                               !         <<*8726>>00220000
     -------------------------------------------------         <<*8726>>00225000
  14 !      current physical disc address index      !  cpda   <<*8726>>00230000
  15 !                                               !         <<*8726>>00235000
     -------------------------------------------------         <<*8726>>00240000
  16 !            current data buffer index          !  ceda   <<*8726>>00245000
     -------------------------------------------------         <<*8726>>00250000
  17 !        # of words left to transfer            !  wcr    <<*8726>>00255000
     -------------------------------------------------         <<*8726>>00260000
  18 !            current data word count            !  cwc    <<*8726>>00265000
     -------------------------------------------------         <<*8726>>00270000
  19 !              system buffer index              !  sysbufa<<*8726>>00275000
     -------------------------------------------------         <<*8726>>00280000
  20 !            status 1 return                    !  dstat1 <<*8726>>00285000
     -------------------------------------------------         <<*8726>>00290000
  21 !            status 2 return                    !  dstat2 <<*8726>>00295000
     -------------------------------------------------         <<*8726>>00300000
  22 !       current error disc address index        !  ceda   <<*8726>>00305000
  23 !                                               !         <<*8726>>00310000
     -------------------------------------------------         <<*8726>>00315000
  24 !              sector count                     !  scount <<*8726>>00320000
     -------------------------------------------------         <<*8726>>00325000
  25 !              miscellaneous                    !  dmisc  <<*8726>>00330000
     -------------------------------------------------         <<*8726>>00335000
  26 !         hardware logged error status          !  dlog-  <<*8726>>00340000
  27 !                                               !  error  <<*8726>>00345000
     -------------------------------------------------         <<*8726>>00350000
                                                               <<*8726>>00355000
dflag - device relative flags.                                 <<*8726>>00360000
     ac         active bit. 1 implies a monitor currently      <<*8726>>00365000
                servicing this device.                         <<*8726>>00370000
     rq         request bit. 1 implies service requested       <<*8726>>00375000
                while monitor is active.                       <<*8726>>00380000
     sp         sio preemption. if set then a preemptive       <<*8726>>00385000
                request has been queued for this device.       <<*8726>>00390000
                preempt code is set in ioq element.            <<*8726>>00395000
     cp         channel program in progress. if set, then      <<*8726>>00400000
                a channel program is currently executing.      <<*8726>>00405000
     ia         if set, an interrupt or response has occured.  <<*8726>>00410000
     nr         if set, device is in a not ready or op. wait.  <<*8726>>00415000
     sw         if set, idle channel program should be started <<*8726>>00420000
                for this device.                               <<*8726>>00425000
     mstate     current driver state as defined by the monitor.<<*8726>>00430000
                allowable states are:                          <<*8726>>00435000
                0  - start request                             <<*8726>>00440000
                1  - not used(but reserved)                    <<*8726>>00445000
                2  - call driver initiator                     <<*8726>>00450000
                3  - call driver completor                     <<*8726>>00455000
                4  - unused(but reserved)                      <<*8726>>00460000
                5  - complete request..perhaps return to user. <<*8726>>00465000
                6  - unexpected interrupt occurred.            <<*8726>>00470000
                7  - start operator intervention wait.         <<*8726>>00475000
              %10  - waiting(on operator). restart at 0.       <<*8726>>00480000
               11  - waiting(data makepresent/freezing)        <<*8726>>00485000
               12  - waiting(initiator code makepresent/freeze)<<*8726>>00490000
               13  - waiting(for completion interrupt)         <<*8726>>00495000
               14  - waiting(for dev. controller availability) <<*8726>>00500000
               15  - unused(but reserved)                      <<*8726>>00505000
               16  - waiting(initiator code makepresent)       <<*8726>>00510000
               17  - waiting(completor code makepresent)       <<*8726>>00515000
                                                               <<*8726>>00520000
dldev - i/o system type, unit and logical device number.       <<*8726>>00525000
     iot        i/o system type.                               <<*8726>>00530000
                0 - hp3000 series ii/iii (sio/dio)             <<*8726>>00535000
                1 - hp-ib                                      <<*8726>>00540000
                2 - reserved                                   <<*8726>>00545000
                3 - reserved                                   <<*8726>>00550000
                                                                        00555000
<< initial mpev incl5 program.  david sm chang   3-3-1983      <<06522>>00560000
driver calling sequence                                                 00565000
                                                                        00570000
   driver request codes                                                 00575000
     0 - read                                                           00580000
     1 - write                                                          00585000
     2 - file open                                                      00590000
     3 - file close                                                     00595000
     4 - device close                                                   00600000
     5 - fill with zeros                                                00605000
     6 - fill with blanks                                               00610000
     7 - request status:  count = #wrds to return                       00615000
           to be compatible with series iii, status request will        00620000
           check to see if last transfer for the addressed unit         00625000
           ended in an error. if last transfer did end in               00630000
           an error, then the status from that transfer will            00635000
           be returned, otherwise a new status request will be          00640000
           generated and that status returned.                          00645000
     8 - format discette                                                00650000
     9 - initialize track                                               00655000
    10 - issue self test                                                00660000
    11 - write label (sector 0)                                         00665000
    12 - verify media                                                   00670000
    13 - request physical address                                       00675000
    15 - request status  (same as function code 7)                      00680000
                                                                        00685000
   count - word/byte count. odd byte count will be rounded up.          00690000
                                                                        00695000
   parameters p1 and p2 form a double word disc adress for all xfers.   00700000
                                                                        00705000
driver return codes                                                     00710000
                                                                        00715000
   general(13:3)        qualifying(8:5)               overall(8:8)      00720000
   0 - pending          1 - wait for completion       %10               00725000
   1 - successful                                     %01               00730000
   4 - irrecoverable    0 - invalid function          %04               00735000
       error            1 - track error               %14               00740000
                        3 - xmission error            %34               00745000
                        4 - sio failure               %44               00750000
                        5 - unit failure              %54               00755000
                        6 - invalid disc adress       %64               00760000
                        %12 - system error            %124              00765000
                        %14 - channel error           %144              00770000
                        %15 - verify error            %154              00775000
                        %16 - unknown or blank format %164              00780000
                        %17 - deleted record on ibm   %174     <<01115>>00785000
                                                                        00790000
disc controller hardware status returns                                 00795000
                                                                        00800000
   status 1                                                             00805000
   bits     use                                                         00810000
      0      spare track                                                00815000
      1      protected track                                            00820000
      2      defective track                                            00825000
   3-7      termination status                                          00830000
               0 - normal completion                                    00835000
               1 - illegal command                                      00840000
             %10 - uncorrectable data error                             00845000
             %11 - head-sector compare error                            00850000
             %12 - sio program error                                    00855000
             %14 - end of cylinder                                      00860000
             %16 - overrun                                              00865000
             %21 -  attempt to access defective track                   00870000
             %22 - head movement during data operation                  00875000
             %23 - disc drive (status-2) error                          00880000
             %27 - drive unavailable                                    00885000
             %37 - drive attention                                      00890000
   8-12      unused                                                     00895000
  13-15      unit number                                                00900000
                                                                        00905000
                                                                        00910000
                                                                        00915000
   status 2 word                                                        00920000
      0      drive error                                                00925000
    3-6      drive type                                                 00930000
      8      attention                                                  00935000
      9      protected                                                  00940000
     10      format                                                     00945000
     11      fault                                                      00950000
     12      first status                                               00955000
     13      seek check                                                 00960000
     14      drive not ready                                            00965000
     15      drive busy                                                 00970000
$page                                                                   00975000
begin                                                                   00980000
$include incldrq                                               <<06522>>00985000
$include incllpdt                                              <<06522>>00990000
$include inclsbh                                               <<06522>>00995000
equate                                                                  01000000
   badsio      = %44,     << sio failure return >>                      01005000
   cbit'       = 7,       << recalibrate bit of qmisc >>                01010000
   cbmode      = %100000, << burst mode >>                              01015000
   cbfillmode  = %104000, << curst and fill mode >>                     01020000
   cdba        = 16,      << current data buf index >>         <<*8726>>01025000
   cderr       = %17,     << correctable data error code >>             01030000
   cdsj        = %2400,   << device specified jump>>                    01035000
   cdsj1       = cdsj+1,                                                01040000
   cdsj2       = cdsj+2,                                                01045000
   cdsj3       = cdsj+3,                                       <<01866>>01050000
   ceda        = 11,      << current error disc adr. index >>  <<*8726>>01055000
   ceda1       = 22,      << ceda index (single) >>            <<*8726>>01060000
   chanabort   = 7,       << cpva0.(0:4) when chan abort >>             01065000
   chanerr     = %144,    << channel program abort error >>             01070000
   cinthlt    = %600,     <<channel interrupt and halt>>                01075000
   cinthlt1   = cinthlt+1,                                              01080000
   cinthlt2   = cinthlt+2,                                              01085000
   cinthlt3   = cinthlt+3,                                              01090000
   cincharge'  = 5,       << controller in charge >>                    01095000
   clbit'      = 8,       << device clear bit >>                        01100000
   clda        = 6,       << current logical disc adr. index>> <<*8726>>01105000
   clda1       = 12,      << first word of clda index >>       <<*8726>>01110000
   clda2       = 13,      << second word of clda index >>      <<*8726>>01115000
   clearc      = %4400,   << channel clear command >>                   01120000
   clearissued = %100001, << value put into cpva on dsj 2 >>            01125000
   clrp        = 191,     << offset to clear program >>        <<00490>>01130000
   cjump       = %000000, << channel jump command >>                    01135000
   cmd         = 236,     << offset of disc commands >>        <<01866>>01140000
                           << !!!!note: cmd should always >>   <<00490>>01145000
                           <<        be an even number   >>    <<00490>>01150000
   cmd1        = cmd+1,                                                 01155000
   cmd2        = cmd+2,                                                 01160000
   cmd2'       = cmd2/2,                                                01165000
   cmd4        = cmd+4,                                                 01170000
   cmd5        = cmd+5,                                                 01175000
   cmd6        = cmd+6,                                                 01180000
   cmd7        = cmd+7,                                                 01185000
   cmd8        = cmd+8,                                                 01190000
   cmd9        = cmd+9,                                                 01195000
   cmd10       = cmd+10,                                                01200000
   cmd11       = cmd+11,                                                01205000
   cmd12       = cmd+12,                                                01210000
   cmd13       = cmd+13,                                       <<00490>>01215000
   cnoupd      = %002000, << no update channel orders>>                 01220000
   cpda        = 7,       << current phys. disc adr. index >>  <<*8726>>01225000
   creadd      = %001400, << channel read data>>                        01230000
   creadc      = %001410, << channel read command data>>                01235000
   cresult     = %003417, << channel read selftest result >>            01240000
   cselftest   = %004017, << channel initiate self test >>              01245000
   curcyl      = 12,      << current cylinder index >>                  01250000
   cwait       = %001000, <<channel wait>>                              01255000
   cwrited     = %002000, << channel write data>>                       01260000
   cwritec     = %002010, << channel write command for unbuffered >>    01265000
   cwritef     = %002014, << format command>>                           01270000
   cwritep     = %002014, << req physical address >>                    01275000
   cwriterb    = %002012, << write command for buffered read >>         01280000
   cwritewb    = %002011, << write command for buffered write >>        01285000
   cwc         = 18,      << current word count index >>       <<*8726>>01290000
   dadr        = 4,       << disc adress index in ioq >>                01295000
   diltp       = 5,       << ilt pointer >>                             01300000
   dldev       = 3,       << logical device index of dit >>             01305000
   dltdrec     = %174,    << deleted record status return >>   <<01115>>01310000
   dlogerror   = 26,      << hardware logged error status >>   <<*8726>>01315000
   dmisc       = 25,      << dit misc >>                       <<*8726>>01320000
   dscxfrerr   = %14,     << disc xfer error status return >>           01325000
   dserr       =  7,      << error status count & index >>     <<01349>>01330000
   dstat       = 6,       << device status return index >>              01335000
   dstat1      = 20,      << status 1 return index >>          <<*8726>>01340000
   ddstat1     = 10,      << double index for stat 1 return >> <<*8726>>01345000
   dstat2      = 21,      << status 2 return index >>          <<*8726>>01350000
   dunit       = 10,      << physical unit no. & iot in dit >> <<*8726>>01355000
   dxfp        = 36,      << offset of data xfer i/o prog >>   <<01866>>01360000
                          << !!! note: dxfp should always >>   <<01866>>01365000
                          <<           be an even number  >>   <<01866>>01370000
   dxfp4       = dxfp+4,                                       <<01866>>01375000
   dxfp14      = dxfp+14,                                      <<01866>>01380000
   dxfp15      = dxfp+15,                                      <<01866>>01385000
   dxfp16      = dxfp+16,                                      <<01866>>01390000
   dxfp19      = dxfp+19,                                      <<01866>>01395000
   dxfp24      = dxfp+24,                                      <<01866>>01400000
   dxfp24'     = dxfp24/2,                                     <<01866>>01405000
   dxfp26      = dxfp+26,                                      <<01866>>01410000
   dxfp27      = dxfp+27,                                      <<01866>>01415000
   dxfp31      = dxfp+31,                                      <<01866>>01420000
   dxfp34      = dxfp+34,                                      <<01866>>01425000
   dxfp35      = dxfp+35,                                      <<01866>>01430000
   dxfp36      = dxfp+36,                                      <<01866>>01435000
   dxfp37      = dxfp+37,                                      <<01866>>01440000
   dxfp39      = dxfp+39,                                      <<01866>>01445000
   dxfp40      = dxfp+40,                                      <<01866>>01450000
   dxfp40'     = dxfp40/2,                                     <<01866>>01455000
   dxfp42      = dxfp+42,                                      <<01866>>01460000
   dxfp42'     = dxfp42/2,                                     <<01866>>01465000
   dxfp44      = dxfp+44,                                      <<01866>>01470000
   dxfp44'     = dxfp44/2,                                     <<01866>>01475000
   dxfp46      = dxfp+46,                                      <<01866>>01480000
   dxfp46'     = dxfp46/2,                                     <<01866>>01485000
   dxfp48      = dxfp+48,                                      <<01866>>01490000
   dxfp48'     = dxfp48/2,                                     <<01866>>01495000
   dxfp50      = dxfp+50,                                      <<01866>>01500000
   dxfp50'     = dxfp50/2,                                     <<01866>>01505000
   dxfp52      = dxfp+52,                                      <<01866>>01510000
   dxfp52'     = dxfp52/2,                                     <<01866>>01515000
   dxfp54      = dxfp+54,                                      <<01866>>01520000
   dxfp54'     = dxfp54/2,                                     <<01866>>01525000
   dxfp56      = dxfp+56,                                      <<01866>>01530000
   dxfp61      = dxfp+61,                                      <<01866>>01535000
   dxfp68      = dxfp+68,                                      <<01866>>01540000
   dxfp72      = dxfp+72,                                      <<01866>>01545000
   dxfp75      = dxfp+75,                                      <<01866>>01550000
   endop       = %012400, << disc end order >>                          01555000
   fillb       = 6,       << fill with blank cmd >>                     01560000
   fillz       = 5,       << fill with zero cmd >>                      01565000
   firststatus'= 12,      << first status required >>                   01570000
   fmat        = 120,     << offset to start of format prog >> <<01866>>01575000
   fmat4       = fmat+4,                                                01580000
   fmat16      = fmat+16,                                               01585000
   fmat21      = fmat+21,                                               01590000
   fopen       = 2,       << file open function >>                      01595000
   format      = 8,       << format function >>                         01600000
   formatparm  = 2,       << parameter passed in format command >>      01605000
   icntrl      = 7,       << controller info in ilt >>                  01610000
   hpformat    = 2,       << disc type of hp formatted discette >>      01615000
   ibmfmtparm  = 1,       << interleave value for ibm >>       <<04826>>01620000
   ibmformat   = 8,       << disc type of ibm formatted discette >>     01625000
   icpva0      = 0,       << first word of cpva >>                      01630000
   icpva1      = 1,       << second word of cpva >>                     01635000
   icpva3      = 3,       << third word of cpva >>                      01640000
   idlep       = 2,       << start of idle channel prog >>     <<01776>>01645000
   idlep4      = idlep+4,                                      <<01776>>01650000
   idlep20     = idlep+20,                                     <<01776>>01655000
   idlep24     = idlep+24,                                     <<01776>>01660000
   idlep27     = idlep+27,                                     <<01776>>01665000
   iflag       = 13,      << flags word of ilt >>                       01670000
   initialize  = 9,       << initialize function >>                     01675000
   initp       = 2,       << offset to prog started by initio >>        01680000
   initop      = %005400, << initialize command >>                      01685000
   invdskadr   = %64,     << invalid disc adress return >>              01690000
   invfunc     = 4,       << invalid function return >>                 01695000
   isiop       = 8,       << chan prog pointer >>                       01700000
   istap       = 9,       << status area ptr in ilt >>                  01705000
   jumpoffset  = 2,       << offset of jump order at start of program >>01710000
   lockop      = %14400,  << lock door order >>                         01715000
   lockp       = 147,     << offset to lock program >>         <<01866>>01720000
   lockp4      = lockp+4,                                               01725000
   maxtransfer = 32767,   << maximum transfer >>                        01730000
   mbit'       = 3,       << track map bit of qmisc >>                  01735000
   qfunc       = 6,       << function code index of ioq >>              01740000
   qldev       = 2,       << ldev index of ioq >>                       01745000
   qmisc       = 3,       << driver word index of ioq >>                01750000
   qstat       = 10,      << status return index of ioq >>              01755000
   qwbct       = 7,       << count index >>                             01760000
   read        = 0,       << read function >>                           01765000
   readop      = %002400, << disc read command >>                       01770000
   reqdadr     = %012000, << request disc address>>                     01775000
   reqphysadr  = 13,      << request physical disc address function >>  01780000
   reqstat     = %001400, << request status cmd >>                      01785000
   rdap        = 171,     << offset of disc address prog >>    <<01866>>01790000
   rdap4       = rdap+4,                                                01795000
   rdap9       = rdap+9,                                                01800000
   rpadr       = 188,     << offset to req phys adr prog >>    <<01866>>01805000
   rpadr4      = rpadr+4,                                               01810000
   rpadr8      = rpadr+8,                                               01815000
   rpadr9      = rpadr+9,                                               01820000
   rstap       = 161,     << offset to req status i/o prog >>  <<01866>>01825000
   rstap4      = rstap+4,                                               01830000
   rstap9      = rstap+9,                                               01835000
   rstat       = 7,       << request status function >>                 01840000
   scount      = 24,      << sector count >>                   <<*8726>>01845000
   seek        = %001000, << seek cmd >>                                01850000
   selftest    = 10,      << self test function >>                      01855000
   selftp      = 216,     << offset to self test program >>    <<01866>>01860000
   selftp4     = selftp+4,                                              01865000
   selftp10    = selftp+10,                                             01870000
   selftp11    = selftp+11,                                             01875000
   setdbit     = %20000,   <<set d bit in initialize com>>              01880000
   successful  = 1,       << successful completion status return >>     01885000
   sysbufa     = 19,      << sysbuf index of dit >>            <<*8726>>01890000
   sysdb       = %1000,                                                 01895000
   syserror    = %124,    << system error code return >>                01900000
   syslpdt     = 8,       << db index of lpdt pointer >>                01905000
   syssbuf     = 6,       << db index of sbuf table >>                  01910000
   unitfailure = %54,     << unit fail status return >>                 01915000
   unknownfmat = %164,    <<illegal format >>                           01920000
   unlockop    =%15000,   << unlock door order >>                       01925000
   verify      = 12,      << verify function >>                         01930000
   verifyerr   = %154,    << error on verify >>                         01935000
   verifyop    = %003400, << verify command >>                          01940000
   wait        = %10,     << wait for comp. status return >>            01945000
   wcr         = 17,      << word count remaining index >>     <<*8726>>01950000
   write       = 1,       << write function >>                          01955000
   writel      = 11,      << write label function >>                    01960000
   writeop     = %004000, << disc write command >>                      01965000
   xfererror   = %34;     << xfer error status return >>                01970000
                                                                        01975000
define                                                                  01980000
   abort      = (0:3)#,    << abort field of cpva0 >>                   01985000
   abs        = absolute#,                                              01990000
   asmb       = assemble#,                                              01995000
   cbit       = (cbit':1)#,                                             02000000
   cincharge  = (cincharge':1)#,                                        02005000
   clbit      = (clbit':1)#,                                            02010000
   cpvaefield = (4:12)#,  << error field of cpva words >>               02015000
   dbit       = (0:1)#,    << retry determination bit of qmisc >>       02020000
   dblesided  = (4:1)#,    << media is double sided discette >>         02025000
   disable    = asmb(sed 0)#,                                           02030000
   drvnotrdy  = (14:1)#,   << drive not ready bit of qstat2 >>          02035000
   dstbankfield= (8:8)#,   << high order mem address in dst >> <<01776>>02040000
   ebit       = (2:1)#,    << error bit of qmisc >>                     02045000
   enable     = asmb(sed 1)#,                                           02050000
   errcode    = (3:5)#,    << encoded error status >>                   02055000
   function   = (8:8)#,    << request function code >>                  02060000
   finish     = %(2)1000#, << channel program finish without abort>>    02065000
   firststatus= (firststatus':1)#,                                      02070000
   head       = lsr(8)#,   << head field of disc adress >>              02075000
   hpdrtype   = (5:1)#,    << hp formatted discette >>                  02080000
   ibmdrtype  = (3:1)#,    << ibm formatted discette >>                 02085000
   l'stat'err = (15:1)#,   << last transfer status                      02090000
                              - true if last transfer ended with error  02095000
                              - otherwise false                         02100000
                            >>                                          02105000
   mbit       = (mbit':1)#,                                             02110000
   qldevn     = (8:8)#,    << ldev field in ioq >>                      02115000
   retry      = (13:3)#,   << retry count field of qmisc >>             02120000
   sbit       = (1:1)#,    << request syndrome bit of qmisc >>          02125000
   sector     = (8:8)#,    << sector field of disc adress >>            02130000
   seekcheck  = (13:1)#,   << invalid seek bit of status-2 >>           02135000
   sem        = (1:3)#,    << s,e, and m bits of qmisc >>               02140000
   sfail      = (10:1)#,   << sio fialed to start in gip >>             02145000
   siop       = con %20302;con 0#, <<siop instruction>>                 02150000
   spare      = (0:1)#,    << spare bit of status-1 >>                  02155000
   spec       = (1:1)#,    << special req. bit of ioq >>                02160000
   stat       = (8:8)#,    << i/o status return field of ioq >>         02165000
   subt       = (12:4)#,   << subtype field of lpdt >>                  02170000
   sysbufr    = (3:1)#,    << system buffer bit of ioq >>               02175000
   unitn      = (8:8)#,   << unit field of dit(dunit) >>       <<*8726>>02180000
   waitprog   = (1:1)#,    << idle channel prog started of iflag >>     02185000
   wbit       = (4:1)#;    << writing bad track bit of qmisc >>         02190000
                                                                        02195000
integer pointer                                                         02200000
   sbuf        = db + syssbuf;                                          02205000
                                                                        02210000
double pointer                                                          02215000
   dlpdt       = db + syslpdt;                                          02220000
array initial(0:281) = db :=                                   <<*8726>>02225000
   [8/28,8/%61],     <<dit size= 28, runwait, type=1>>         <<*8726>>02230000
         0,                                                             02235000
   %037407,          << unit extract instruction (andi 7) >>            02240000
   [8/125,8/2],    << 250 word sio prog,2 word status area >>  <<01866>>02245000
   << dit >>                                                            02250000
     %040020,        << dflag; flexible disc >>                         02255000
           0,        << dlink >>                                        02260000
           0,        << dioqp >>                                        02265000
           0,        << dldev - hp-ib device >>                <<06522>>02270000
           0,        << ddltp >>                                        02275000
           0,        << diltp >>                                        02280000
           0,        << dstat >>                               <<*8726>>02285000
           0,        << dserr >>                                        02290000
           0,        << dmamq >>                                        02295000
           0,        << dmamqt >>                                       02300000
      %40000,        << dunit >>                               <<06522>>02305000
           0,        << spare >>                               <<*8726>>02310000
         0,0,        << clda - current logical disc adr >>              02315000
         0,0,        << cpda - current physical disc adr >>             02320000
           0,        << cdba - current data buffer adr >>               02325000
           0,        << wcr - word count remaining >>                   02330000
           0,        << cwc - current transfer count >>                 02335000
           0,        << sysbufa - system buffer adr >>                  02340000
           0,        << stat1 - first disc status >>                    02345000
           0,        << stat2 - second disc status >>                   02350000
         0,0,        << ceda - current error disc adr >>                02355000
           0,        << scount - sector count >>                        02360000
           0,        << dmisc >>                                        02365000
           0,        << dlogerror >>                           <<01349>>02370000
           0,        << dlogerror+1 >>                         <<06522>>02375000
                                                                        02380000
        <<-----------------                                             02385000
          channel program                                               02390000
        ----------------->>                                             02395000
                                                                        02400000
        cjump,0,                                                        02405000
                                                                        02410000
                                                               <<01776>>02415000
        <<----------------------                                        02420000
          idle channel program                                          02425000
        ---------------------->>                                        02430000
                                                                        02435000
        cwritec,2,0,cnoupd,0,     <<issue end>>                         02440000
        cwait,0,                                                        02445000
        cdsj2,0,                  << check for power up >>     <<01776>>02450000
        4,4,0,                    << dsj=2 do clear >>         <<01776>>02455000
        clearc,0,                                              <<01776>>02460000
        cwait,0,                                               <<01776>>02465000
        cwriterb,2,0,cnoupd,0,    <<request status>>                    02470000
        cwait,0,                                                        02475000
        creadc,4,4,cbmode,0,      <<read status>>                       02480000
        cdsj,0,0,                 <<disable poll response>>    <<01866>>02485000
        cinthlt2,1,               <<halt with interupt>>                02490000
        -1,                       <<so dxfp0 even number>>     <<01866>>02495000
                                                                        02500000
        <<-------------------                                           02505000
          data xfer program                                             02510000
        ------------------->>                                           02515000
                                                                        02520000
 <<dxfp0>>   cwritec,6,0,cnoupd,0, << seek >>                  <<01866>>02525000
 <<dxfp5>>   cwait,0,                                          <<01866>>02530000
 <<dxfp7>>   cdsj3,0,                                          <<01866>>02535000
 <<dxfp9>>   0,                    << no error >>              <<01866>>02540000
 <<dxfp10>>  112,                  << error occurred >>        <<01866>>02545000
 <<dxfp11>>  158,                  << power on >>              <<01866>>02550000
 <<dxfp12>>  0,                    << so rest dxfp/2 even >>   <<01866>>02555000
 <<dxfp13>>  cjump,0,                                          <<01866>>02560000
 <<dxfp15>>  cwritec,4,0,cnoupd,0, << verify >>                <<01866>>02565000
 <<dxfp20>>  cwait,0,                                          <<01866>>02570000
 <<dxfp22>>  cdsj2,0,                                          <<01866>>02575000
 <<dxfp24>>  55,                   << no error >>              <<01866>>02580000
 <<dxfp25>>  98,                   << error occured >>         <<01866>>02585000
 <<dxfp26>>  144,                  << power on >>              <<01866>>02590000
 <<dxfp27>>  cwriterb,2,0,cnoupd,0,<< xfer order or init >>    <<01866>>02595000
 <<dxfp32>>  cwait,0,                                          <<01866>>02600000
 <<dxfp34>>  0,0,0,0,0,            << actual transfer >>       <<01866>>02605000
 <<dxfp39>>  0,0,0,0,0,            << chain if necessary >>    <<01866>>02610000
 <<dxfp44>>  cjump,4,              << jump past burst loop >>  <<01866>>02615000
 <<dxfp46>>  cwait,0,                                          <<01866>>02620000
 <<dxfp48>>  cjump,-23,            << jmp back to burst loop >><<01866>>02625000
 <<dxfp50>>  cwait,0,                                          <<01866>>02630000
 <<dxfp52>>  cdsj2,0,              << error check >>           <<01866>>02635000
 <<dxfp54>>  0,                    << no error >>              <<01866>>02640000
 <<dxfp55>>  0,                    << error occurred >>        <<01866>>02645000
 <<dxfp56>>  0,                    << power up >>              <<01866>>02650000
 <<dxfp57>>  cwritec,6,0,cnoupd,0, << seek >>                  <<01866>>02655000
 <<dxfp62>>  cwait,0,                                          <<01866>>02660000
 <<dxfp64>>  cwriterb,2,0,cnoupd,0,   << read data back >>     <<01866>>02665000
 <<dxfp69>>  cwait,0,                                          <<01866>>02670000
 <<dxfp71>>  creadd,0,0,cbfillmode,0, << use fill word >>      <<01866>>02675000
 <<dxfp76>>  cjump,-56,            << do dsj >>                <<01866>>02680000
 <<dxfp78>>  cwait,0,                                          <<01866>>02685000
 <<dxfp80>>  cjump,-18,                                        <<01866>>02690000
 <<dxfp82>>  cinthlt2,2,           << stop >>                  <<01866>>02695000
                                                                        02700000
        <<----------                                                    02705000
           format                                                       02710000
        ---------->>                                                    02715000
                                                                        02720000
 <<fmat>>    cwritef,5,0,cnoupd,0, <<format>>                           02725000
 <<fmat5>>   cwait,0,              <<may not need???>>                  02730000
 <<fmat7>>   cdsj2,0,              << error check >>                    02735000
 <<fmat9>>   0,                    << no error, halt >>                 02740000
 <<fmat10>>  29,                   << error, get status >>     <<01866>>02745000
 <<fmat11>>  75,                   << power up, issue clear >> <<01866>>02750000
 <<fmat12>>  cwritec,2,0,cnoupd,0, << issue status request >>           02755000
 <<fmat17>>  creadc,4,0,cnoupd,0,                                       02760000
 <<fmat22>>  cdsj,0,0,                                         <<01866>>02765000
 <<fmat25>>  cinthlt2,3,                                       <<01866>>02770000
                                                                        02775000
        <<-------------------------                                     02780000
          lock and unlock program                                       02785000
        ------------------------->>                                     02790000
                                                                        02795000
 <<lockp>>   cwritef,2,0,cnoupd,0, << lock or unlock door >>            02800000
 <<lockp5>>  cwait,0,                                                   02805000
 <<lockp7>>  cdsj2,0,                                                   02810000
 <<lockp9>>  0,          << no error >>                                 02815000
 <<lockp11>> 2,          << error - get status >>                       02820000
 <<lockp11>> 48,         << power up >>                        <<01866>>02825000
 <<lockp12>> cinthlt2,4,                                                02830000
                                                                        02835000
        <<------------------------                                      02840000
          request status program                                        02845000
        ------------------------>>                                      02850000
                                                                        02855000
 <<rstp00>>  cwritec,2,0,cnoupd,0, <<request status>>                   02860000
 <<rstp5>>   creadc,4,0,cnoupd,0,  <<read status>>                      02865000
                                                                        02870000
        <<--------------------------------------                        02875000
          request logical disc address program                          02880000
        -------------------------------------->>                        02885000
                                                                        02890000
 <<rdap00>>  cwritec,2,0,cnoupd,0, <<request disc address>>             02895000
 <<rdap05>>  creadc,4,0,cnoupd,0,  <<read disc address>>                02900000
 <<rdap10>>  cwait,0,                                                   02905000
 <<rdap12>>  cdsj,0,0,            <<disable poll response>>    <<01866>>02910000
 <<rdap15>>  cinthlt1,1,          <<error halt>>               <<01866>>02915000
                                                                        02920000
        <<--------------------------                                    02925000
          request physical address                                      02930000
        -------------------------->>                                    02935000
                                                                        02940000
 <<rpadr0>>  cwritep,2,0,cnoupd,0, << request physical address >>       02945000
 <<rpadr5>>  creadc,4,0,cnoupd,0,  << read physical address >>          02950000
 <<rpadr10>> cwait,0,                                                   02955000
 <<rpadr12>> cdsj2,0,                                                   02960000
 <<rpadr14>> 0,                    << no error >>                       02965000
 <<rpadr15>> %177724,              << get status >>            <<01866>>02970000
 <<rpadr16>> 2,                    << issue clear >>                    02975000
 <<rpadr17>> cinthlt2,5,                                                02980000
                                                                        02985000
        <<-------------------                                           02990000
          issue amigo clear                                             02995000
        ------------------->>                                           03000000
                                                                        03005000
 <<clrp>>    clearc,0,                                                  03010000
 <<clrp2>>   cwait,0,                                                   03015000
 <<clrp4>>   cdsj,0,0,                                         <<01866>>03020000
 <<clrp7>>   cinthlt3,1,                                       <<01866>>03025000
                                                                        03030000
        <<-----------------                                             03035000
          issue self test                                               03040000
        ----------------->>                                             03045000
                                                                        03050000
 <<stest>>   cselftest,1,0,cnoupd,0,  << issue self test >>             03055000
 <<stest5>>  cwait,0,                                                   03060000
 <<stest7>>  cresult,2,0,cnoupd,0,    << read self test result >>       03065000
 <<stest12>> cwait,0,                                                   03070000
 <<stest14>> cdsj,0,0,                                         <<01866>>03075000
 <<stest17>> cinthlt2,6,                                       <<01866>>03080000
        -1,                                                    <<01866>>03085000
                                                               <<01866>>03090000
                                                               <<00490>>03095000
        <<----------                                                    03100000
          commands                                                      03105000
        ---------->>                                                    03110000
                                                                        03115000
 <<cmd>>     0,          <<set wakeup>>                                 03120000
 <<cmd1>>    0,0,0,      <<seek>>                                       03125000
 <<cmd4>>    %12400,     <<end>>                                        03130000
 <<cmd5>>    0,          <<request status>>                             03135000
 <<cmd6>>    reqdadr,    <<request disc address>>                       03140000
 <<cmd7>>    0,0,        << verify or format order >>                   03145000
 <<cmd9>>    0,          << disc xfer or initialize order >>            03150000
 <<cmd10>>   0,          << fill word >>                                03155000
 <<cmd11>>   0,          << lock or unlock command >>                   03160000
 <<cmd12>>   0,          << selftest byte >>                   <<00490>>03165000
 <<cmd13>>   readop;     << read after write >>                <<00490>>03170000
                                                                        03175000
$page                                                                   03180000
procedure checkindex(index,table);                                      03185000
value index,table;                                                      03190000
integer index;                                                          03195000
pointer table;                                                          03200000
option external;                                                        03205000
                                                                        03210000
procedure dconvert(word);                                               03215000
value word;                                                             03220000
integer word;                                                           03225000
option external;                                                        03230000
                                                                        03235000
integer procedure getsbuf(type);                                        03240000
value type;                                                             03245000
integer type;                                                           03250000
option external;                                                        03255000
                                                                        03260000
procedure gip'hpib;                                            <<01301>>03265000
option external;                                                        03270000
                                                                        03275000
procedure help;                                                         03280000
option external;                                                        03285000
                                                                        03290000
procedure ldevnotrdy(ditp);                                             03295000
value ditp;                                                             03300000
pointer ditp;                                                           03305000
option external;                                                        03310000
                                                                        03315000
procedure masterclearhpib(ditp);                               <<01301>>03320000
integer array ditp;                                                     03325000
option external;                                                        03330000
                                                                        03335000
procedure siodm(ditp,flags);                                            03340000
value ditp,flags;                                                       03345000
pointer ditp;                                                           03350000
logical flags;                                                          03355000
option external;                                                        03360000
                                                                        03365000
procedure returnsbuf(sbufp);                                            03370000
value sbufp;                                                            03375000
integer sbufp;                                                          03380000
option external;                                                        03385000
                                                                        03390000
procedure start'hpib(ditp,chanp,queue);                        <<01301>>03395000
value ditp,chanp,queue;                                                 03400000
pointer ditp,chanp;                                                     03405000
logical queue;                                                          03410000
option external;                                                        03415000
                                                                        03420000
procedure write2(word);                                                 03425000
value word;                                                             03430000
integer word;                                                           03435000
option external;                                                        03440000
$page                                                                   03445000
integer procedure flopinit(ditp);                                       03450000
  integer array ditp;                                                   03455000
  <<initialization routine for iomdisc1:                                03460000
    it sets up idle channel program,                                    03465000
    starts it to run,                                                   03470000
    sets bit fiedls to indicate it is running                           03475000
  >>                                                                    03480000
    begin                                                               03485000
    integer pointer iltp=q+1,                                           03490000
                    chanp=q+2;                                          03495000
    logical abschanp=q+3;                                               03500000
    logical pointer iltpl=iltp;                                         03505000
                                                                        03510000
      <<----------------------                                          03515000
        initialize variables                                            03520000
      ---------------------->>                                          03525000
                                                                        03530000
      tos := ditp(diltp);   << ilt pointer >>                           03535000
      tos := iltp(isiop);   << channel program pointer >>               03540000
      tos := @chanp+sysdb;  <<absolute address of chanp>>               03545000
      <<-------------------------                                       03550000
        initialize idle program                                         03555000
      ------------------------->>                                       03560000
      if not iltpl(iflag).waitprog then                                 03565000
        begin <<first unit for controller>>                             03570000
        chanp(idlep4) := abschanp+cmd4; << end order >>                 03575000
        chanp(idlep20) := abschanp+cmd5;                       <<01776>>03580000
        chanp(dxfp61):=chanp(dxfp4):=abschanp+cmd1; << seek >> <<01866>>03585000
        chanp(dxfp19) := abschanp+cmd7;  << verify >>          <<01866>>03590000
        chanp(dxfp31) := abschanp+cmd9;  << xfer or init >>    <<01866>>03595000
        chanp(dxfp68):=abschanp+cmd13; << rd order aft wrt >>  <<01866>>03600000
        chanp(dxfp75) := abschanp+cmd10; << use fill word >>   <<01866>>03605000
        chanp(fmat4) := abschanp+cmd7;   << format command >>           03610000
        chanp(fmat16) := abschanp+cmd5; << request status >>            03615000
        chanp(lockp4) := abschanp+cmd11; << lock, unlock >>             03620000
        chanp(rstap4) := abschanp+cmd5;  << status command >>           03625000
        chanp(rdap4) := abschanp+cmd6;  << disc address >>              03630000
        chanp(rpadr4) := abschanp+cmd6; << phys. disc addr >>           03635000
        chanp(selftp4) := abschanp+cmd12; << init self test >>          03640000
        chanp(cmd5) := reqstat;                                         03645000
        chanp(idlep27) := iltp(istap)+sysdb;                   <<01776>>03650000
        <<------------                                                  03655000
          update ilt                                                    03660000
        ------------>>                                                  03665000
        chanp(1) := 0;                                                  03670000
        start'hpib(ditp,chanp,false);                          <<01301>>03675000
        end;                                                            03680000
      end;                                                              03685000
                                                                        03690000
$page                                                                   03695000
integer procedure flopdvr                                      <<06522>>03700000
        (drq'entry'index,ditp,bank,buffer,chanp,drtn);         <<06522>>03705000
value drq'entry'index,ditp,bank,buffer,chanp,drtn;             <<06522>>03710000
integer bank,buffer,drtn;                                      <<01301>>03715000
integer pointer ditp,chanp;                                    <<06522>>03720000
integer drq'entry'index;                                       <<06522>>03725000
option privileged,uncallable;                                           03730000
begin                                                                   03735000
                                                                        03740000
integer                                                                 03745000
   abschanp,      << absolute address of chanp >>              <<06522>>03750000
   ad,             << address delte >>                         <<06522>>03755000
                   << bufadr, absol buffer address >>          <<06522>>03760000
   bufcnt,         << count check for request synd. >>         <<06522>>03765000
                   << cxfer, chained xfer order >>             <<06522>>03770000
   discop,         << disc xfer order >>                       <<06522>>03775000
   dxfpindex,     << index into xfer program >>                <<06522>>03780000
   err,           << disc encoded error status >>              <<06522>>03785000
   funct,         << request function code >>                  <<06522>>03790000
   i,                                                          <<06522>>03795000
   index,         << index into discinfo >>                    <<06522>>03800000
   mstate       = flopdvr,                                              03805000
   s0           = s-0,                                                  03810000
   s2           = s-2,                                                  03815000
   subtype,       << device subtype >>                         <<06522>>03820000
                        <<     0 - hp format single sided  >>           03825000
                        <<     1 - hp format double sided  >>           03830000
                        <<     2 - ibm format single sided >>           03835000
   unit,          << device unit # >>                          <<06522>>03840000
   x            = x,                                                    03845000
   xcnt,           << xfer count >>                            <<06522>>03850000
   xd;             << xfer delta >>                            <<06522>>03855000
                                                                        03860000
logical sbf'entry'index;                                       <<06522>>03865000
double                                                                  03870000
   dxferorder;                                                 <<06522>>03875000
integer                                                        <<06522>>03880000
   cxfer        = dxferorder,                                  <<06522>>03885000
   bufadr       = cxfer + 1;                                   <<06522>>03890000
                                                                        03895000
double pointer                                                          03900000
   dditp        = ditp,                                                 03905000
                                                               <<06522>>03910000
   dchanp       = chanp;                                                03915000
                                                                        03920000
logical                                                                 03925000
   chanqflg,            << channel queue flag for startio >>   <<06522>>03930000
   sbflg,               << system buffer flag >>               <<06522>>03935000
   ls0          = s-0,                                                  03940000
   lsm1         = s-1,                                         <<00490>>03945000
   readafterwrite,     << true if to read after write >>       <<06522>>03950000
   loop,               << loop count >>                        <<06522>>03955000
   trk'num;            << track number >>                      <<06522>>03960000
                                                                        03965000
logical pointer                                                         03970000
   lditp        = ditp,                                                 03975000
   liltp,                                                      <<06522>>03980000
                                                               <<06522>>03985000
   lchanp       = chanp,                                       <<01115>>03990000
                                                               <<06522>>03995000
   dst          = 2;   << data segment table pointer >>        <<06522>>04000000
integer lpdt'index;                                            <<06522>>04005000
integer pointer                                                         04010000
   badtrack,                                                   <<06522>>04015000
   iltp         = liltp,                                                04020000
   ps1          = s-1;                                                  04025000
                                                                        04030000
equate                                                                  04035000
   hstype      =    3,    << highest subtype >>                         04040000
   nentries    =    6,    << number of table entries/subtype >>         04045000
   secpertrk   =    0,    << offset to sec/track entries >>             04050000
   secpercyl   =    1,    << offset to sec/cylinder entries >>          04055000
   maxcyl      =    2,    << offset to max cylinder for stype >>        04060000
   wordspersec =    3,    << offset to bytes per sector >>              04065000
   burstlen    =    4,    << offset to burst length >>                  04070000
   initsize    =    5,    << offset to length(in words) of >>  <<06522>>04075000
   sbf'dstn    =  %10,    << sys buf dst # >>                  <<06522>>04080000
   sbf'dtrk'entry = 0,    << sys buf track entry >>            <<06522>>04085000
   sbf'addr    = sbf'dstn* 4 + 3; << sys buf address >>        <<06522>>04090000
                                                                        04095000
                          << transfer for initialize function >>        04100000
integer array                                                           04105000
   discinfo(0:17) = pb :=                                      <<04826>>04110000
     30, 30, 76, 128,   0,   128, <<subtype 0,hp singleside>>  <<04826>>04115000
     30, 60, 76, 128,   0,   128, <<subtype 1,hp doubleside>>  <<04826>>04120000
   26, 26, 76,  64, 128,  1664; <<subtype 2, ibm,single side>> <<04826>>04125000
                                                                        04130000
                                                                        04135000
define ditldev=3).(8:8#;                                       <<01115>>04140000
define foreign=                                                <<06522>>04145000
         (lpdt'rdy'ser'frn'disc land lpdt'serial'or'foreign)#; <<06522>>04150000
define ibm=(2<=subtype<=3)#;                                   <<01115>>04155000
define sbf'num'dtrk = sbf(sbf'entry'index + sbf'dtrk'entry)#;  <<06522>>04160000
                                                               <<01115>>04165000
integer array                                                           04170000
   chanrw(0:12)=pb:=creadd,cwrited,0,0,0,cwrited,cwrited,               04175000
   0,cwrited,cwrited,0,cwrited,0;                                       04180000
                                                                        04185000
integer array                                                           04190000
   xferop(0:12)=pb:=readop,writeop,0,0,0,writeop,writeop,               04195000
   0,writeop,0,0,writeop,0;                                             04200000
                                                                        04205000
define                                                                  04210000
   reqstatsio= chanp(rstap9) := @ditp(dstat1)+sysdb;                    04215000
               chanp(rdap9) := @ditp(ceda1)+sysdb;                      04220000
               chanp(cmd5) := reqstat+unit#;                            04225000
                                                                        04230000
  double subroutine convertadr;                                         04235000
      begin << this routine converts a physical to logical disc adr. >> 04240000
     tos := dditp(x); << dit index passed in x reg. >>                  04245000
     asmb(zero,xch;cab);                                                04250000
     tos := discinfo(index+secpercyl);                                  04255000
     asmb(lmpy,dadd; std s-4);                                          04260000
    end;                                                                04265000
                                                                        04270000
                                                                        04275000
  integer subroutine calcsbufadr(cnt);                                  04280000
    value cnt;                                                          04285000
    integer cnt;                                                        04290000
      begin                                                             04295000
     calcsbufadr := ditp(cdba);<<get first abs. system buffer adress >> 04300000
     while cnt >= 128 do                                                04305000
       begin << stomp through the buffers >>                            04310000
       checkindex(abs(s2-1),sbuf); << index valid ? >>                  04315000
       calcsbufadr := abs(x) + @sbuf + sysdb; << get next sbuf adress >>04320000
       cnt := cnt - 128;                                                04325000
       end;                                                             04330000
      end;                                                              04335000
                                                                        04340000
                                                                        04345000
        <<----------------------------                                  04350000
          initialize local variables                                    04355000
          ---------------------------->>                                04360000
                                                                        04365000
        lpdt'index := ditp(dldev) * integer(lpdt'entry'size);  <<06522>>04370000
        << determine floppy subtype for single-sided floppies>><<04826>>04375000
        subtype := if lditp(dstat2).hpdrtype then 0 <<subtype>><<06522>>04380000
                else if lditp(dstat2).ibmdrtype then 2         <<04826>>04385000
                    else  -2; << unknown format >>                      04390000
        << if double-sided and type hp increment the subtype>> <<04826>>04395000
        if (lditp(dstat2).dblesided)                           <<04826>>04400000
                 and                                           <<04826>>04405000
           (lditp(dstat2).hpdrtype)                            <<04826>>04410000
           then                                                <<04826>>04415000
              subtype := subtype + 1;                          <<06522>>04420000
        funct := drq'func;           << request function >>    <<06522>>04425000
        sbflg := drq'sbuf;           << sysbuf flag >>         <<06522>>04430000
        unit := ditp(dunit).unitn;  << disc unit number >>     <<*8726>>04435000
        abschanp := @chanp + sysdb; << abs. address of chanp >><<06522>>04440000
        @liltp :=ditp(diltp);       << ilt address >>          <<06522>>04445000
        index := subtype*nentries;  << index >>                <<06522>>04450000
        xcnt := drq'count;       << determine xfer count >>    <<06522>>04455000
        readafterwrite := if funct=write or funct=writel       <<06522>>04460000
                 or fillz<=funct<=fillb then true              <<00490>>04465000
               else false;     << readafterwrite flag >>       <<00490>>04470000
        if funct=15 then funct := rstat;  << fcode 15=7 >>     <<01201>>04475000
                                                                        04480000
        if mstate = 2 then                                              04485000
          begin                                                         04490000
          <<-------------                                               04495000
            new request                                                 04500000
          ------------->>                                               04505000
          if drq'entry'index = 0 then                          <<06522>>04510000
            begin                                                       04515000
            <<----------------------------                              04520000
              start idle channel program                                04525000
            ---------------------------->>                              04530000
            chanp(cmd5) := reqstat;                                     04535000
            chanp(idlep24) := 4;                               <<01776>>04540000
            chanp(idlep27) := iltp(istap)+sysdb;               <<01776>>04545000
            tos := 0;                                                   04550000
            go startioprog;                                             04555000
            end;                                                        04560000
                                                               <<06522>>04565000
          if xcnt < 0 then                                     <<06522>>04570000
            begin << count in bytes >>                                  04575000
                                                               <<06522>>04580000
             if tos then drq'count := drq'count - 1;           <<06522>>04585000
           xcnt := -(xcnt&asr(1));   << convert to words >>    <<06522>>04590000
            end;                                                        04595000
         ditp(wcr) := xcnt;          << xfer count >>          <<06522>>04600000
          ditp(clda1):=drq'parm1;<<disc address or disc type>> <<06522>>04605000
          ditp(clda2):=drq'parm2;<<disc address or disc type>> <<06522>>04610000
                                                               <<06522>>04615000
          ditp(cdba) := buffer; << set current buffer adress >>         04620000
          if funct > reqphysadr then                                    04625000
            begin                                                       04630000
invalidfunc:                                                            04635000
            tos := invfunc;                                             04640000
            go to badend;                                               04645000
            end;                                                        04650000
          if sbflg and ditp(wcr) > 256 then go to invalidfunc;          04655000
          tos := 0; << reset qmisc >>                                   04660000
tryagain:                                                               04665000
          x := funct; << switch on request type >>                      04670000
          asmb(load swt,x; adax; br swt,x;                              04675000
swt:      con doxfer;    con doxfer;    con lock;      con unlock;      04680000
          con unlock;    con fillzero;  con fillblank;                  04685000
          con reqstatus; con doxfer;    con doxfer;                     04690000
          con selftresult;    con doxfer;    con doxfer;                04695000
          con doxfer);                                                  04700000
          help; << help call needed for breakpoints >>                  04705000
          end;                                                          04710000
                                                                        04715000
        <<---------------------                                         04720000
          continuator section                                           04725000
        --------------------->>                                         04730000
                                                                        04735000
        if ditp(dstat)=-1 then                                          04740000
          begin << power fial >>                                        04745000
            ditp(dstat) := 0;                                  <<04826>>04750000
          go tryagain;                                                  04755000
          end;                                                          04760000
        if drq'sfail then goto siofailure;                     <<06522>>04765000
                                  << gip failed to start i/o >><<06522>>04770000
        tos := drq'qmisc;                                      <<06522>>04775000
                  << qmisc stays on tos throughout driver >>   <<06522>>04780000
        if iltp(icpva0)<>0 then                                         04785000
          begin << channel error >>                                     04790000
          ditp(dserr):= [8/1,8/dlogerror];                     <<01349>>04795000
          ditp(dlogerror):= iltp(icpva0); <<log channel error>><<01349>>04800000
          tos := tos+1;   <<increase retry count>>                      04805000
          iltp(icpva0) := 0;                                            04810000
          if ls0.retry<4 then                                           04815000
            begin                                                       04820000
            tos .dbit := 1;                                             04825000
            tos := tos+1;                                               04830000
            go tryagain;                                                04835000
            end;                                                        04840000
          tos := chanerr;                                               04845000
          goto badend;                                                  04850000
          end;                                                          04855000
        if iltp(icpva3) = clearissued then                              04860000
          begin  << power up dsj so issue clear >>                      04865000
          iltp(icpva3) := 0;                                            04870000
          go tryagain;                                                  04875000
          end;                                                          04880000
        if funct=verify and iltp(icpva1)<>0 then                        04885000
          if ditp(dstat1).errcode<>%23 then                             04890000
            begin << verify failed >>                                   04895000
            ditp(dmisc).l'stat'err:=1; << save error indication >>      04900000
            iltp(icpva1) := 0;                                          04905000
            tos := bank;                                                04910000
            tos := buffer;                                              04915000
           x := ceda;  <<subroutine expects param in x reg>>   <<04826>>04920000
            tos := convertadr;                                          04925000
            asmb(sdea);                                                 04930000
            tos := tos + 2d;                                            04935000
            tos := dditp(ddstat1);                                      04940000
            asmb(sdea);                                                 04945000
            ddel;                                                       04950000
            tos := verifyerr;                                           04955000
            goto badend;                                                04960000
            end;                                                        04965000
        if funct=rstat or iltp(icpva1)=0 then err:=0                    04970000
        else                                                            04975000
          begin                                                         04980000
          <<-------------------------                                   04985000
            error status completion                                     04990000
          ------------------------->>                                   04995000
          iltp(icpva1) := 0;  << clear word 1 of cpva>>                 05000000
          ditp(dmisc).l'stat'err:=1; << save error indication >>        05005000
          err := ditp(dstat1).errcode;                                  05010000
          ditp(dserr):= [8/6,8/dstat1]; <<set error indicator>><<01349>>05015000
          if err = %23 and lditp(dstat2).drvnotrdy then                 05020000
            begin << drive not ready >>                                 05025000
            ldevnotrdy(ditp); << send not ready message to console >>   05030000
            tos := wait;                                                05035000
            tos := 7;                                                   05040000
            go to checksbuf;                                            05045000
            end;                                                        05050000
          tos.dbit := 1; << set retry indicator >>                      05055000
          tos := tos+1; <<increase retry count>>                        05060000
          if ls0.retry<4   then                                         05065000
            if funct<>format or                                         05070000
               err=%23 and lditp(dstat2).firststatus then               05075000
              begin << retry 4 times >>                                 05080000
              ditp(dstat1) := 0;                                        05085000
              go tryagain;                                              05090000
              end;                                                      05095000
                                                                        05100000
          <<---------------------------                                 05105000
            error connat be recovered                                   05110000
          --------------------------->>                                 05115000
                                                                        05120000
          if %10 <= err <= %11 and subtype<2 then                       05125000
          if foreign then go to discxfer                       <<01115>>05130000
          else                                                 <<01115>>05135000
            begin << track specific error >>                            05140000
            tos.retry := 0; << reset retry field for track map >>       05145000
            tos.mbit := 1;                                              05150000
            if <> then go to discxfer; << error on map xfer >>          05155000
            tos := ditp(sysbufa);                                       05160000
            if = then                                                   05165000
              begin << get a system buffer >>                           05170000
              tos := getsbuf(2); << get a buffer >>            <<06522>>05175000
              asmb(delb,dup);                                           05180000
              if = then go to discxfer; << no more buffers >>           05185000
               ditp(sysbufa) := tos;                           <<04826>>05190000
              end;                                                      05195000
            ditp(cdba) := tos + sysdb; << set buffer adress >>          05200000
            asmb(dzro,inca); << double one >>                           05205000
            dditp(clda) := tos;                                         05210000
            ditp(wcr) := 128;                                           05215000
            funct := read; << set up xfer of trk map >>                 05220000
            bank := 0; << zero bank for sysbuf xfer >>                  05225000
            go to tryagain;                                             05230000
            end;                                                        05235000
          if err = %23 and lditp(dstat2).seekcheck  then                05240000
            begin                                                       05245000
            <<----------------------                                    05250000
              invalid disc address                                      05255000
            ---------------------->>                                    05260000
baddiscadr:                                                             05265000
            tos := invdskadr;                                           05270000
badend:                                                                 05275000
            drq'count := 0;                                    <<06522>>05280000
            tos := 5;                                                   05285000
            go to checksbuf;                                            05290000
            end;                                                        05295000
          if err = %12 or err = %16 then                                05300000
            begin << transfer error >>                                  05305000
            tos := xfererror;                                           05310000
            go to badend;                                               05315000
            end;                                               <<01115>>05320000
          if err = %21 and ibm then                            <<01115>>05325000
            begin <<deleted record>>                           <<01115>>05330000
            tos:=dltdrec;                                      <<01115>>05335000
            go badend;                                         <<01115>>05340000
            end;                                               <<01115>>05345000
unitfail:                                                      <<01115>>05350000
          tos := unitfailure;                                           05355000
          go to badend;                                                 05360000
          end;                                                          05365000
                                                                        05370000
        asmb(tbc mbit');                                                05375000
        if <> then                                                      05380000
          begin << entring bad track into bad track table >>            05385000
          <<-----------------------------------------                   05390000
            entering bad track into bad track table                     05395000
          ----------------------------------------->>                   05400000
          tos.wbit := 1;                                                05405000
          if <> then                                                    05410000
            begin                                                       05415000
            <<---------------------                                     05420000
              track map completed                                       05425000
            --------------------->>                                     05430000
discxfer:                                                               05435000
            tos := dscxfrerr;                                           05440000
            go to badend;                                               05445000
            end;                                                        05450000
          sbf'entry'index := lditp(sysbufa);                   <<06522>>05455000
        if sbf'num'dtrk > 120 then goto discxfer;<<table full>><<06522>>05460000
           x := ceda;  << subroutine expects param in x reg>>  <<04826>>05465000
          tos := convertadr;                                            05470000
          tos := discinfo(index+secpertrk);                             05475000
          asmb(ldiv,del);                                               05480000
          trk'num := tos&lsl(2);                               <<06522>>05485000
          if lditp(dstat1).spare then trk'num := trk'num + 1;  <<06522>>05490000
          << set alternate track bit >>                                 05495000
          loop := 0;       << initial loop count >>            <<06522>>05500000
          while loop < sbf'num'dtrk do                         <<06522>>05505000
           begin << is track already in the table >>                    05510000
            loop := loop + 1;   << inc loop count >>           <<06522>>05515000
    if trk'num=sbf(sbf'entry'index+loop) then goto discxfer;   <<06522>>05520000
            << its already in the table >>                              05525000
            end;                                                        05530000
          sbf'num'dtrk := sbf'num'dtrk + 1; <<inc track count>><<06522>>05535000
          sbf(sbf'entry'index+loop+1):=trk'num; <<enter track>><<06522>>05540000
          funct := write;                                               05545000
          bank := 0;                                                    05550000
          go to doxfer;                                                 05555000
          end;                                                          05560000
                                                                        05565000
        if funct=rstat then                                             05570000
          begin << move status to user stack >>                         05575000
          iltp(icpva1) := 0;  << clear word 1 of cpva>>                 05580000
rstatret:                                                               05585000
          tos := bank;                                                  05590000
          tos := ditp(cdba);                                            05595000
          tos := 0;                                                     05600000
          tos := @ditp(dstat1)+sysdb;                                   05605000
          tos := ditp(wcr);                                             05610000
          if s0>4 then                                                  05615000
            begin                                                       05620000
            del;                                                        05625000
            tos := 4;                                                   05630000
            end;                                                        05635000
          asmb(mabs 5);                                                 05640000
          goto goodend;                                                 05645000
          end;                                                          05650000
                                                                        05655000
contxfer:                                                               05660000
        tos := ditp(wcr) - ditp(cwc);                                   05665000
        if <= or funct=reqphysadr or funct=format or funct=verify then  05670000
          begin << xfer complete >>                                     05675000
goodend:                                                                05680000
          tos := successful;                                            05685000
          tos := %5;                                                    05690000
checksbuf:                                                              05695000
          tos := ditp(sysbufa);                                         05700000
          if <> then                                                    05705000
            begin                                                       05710000
            returnsbuf(*);                                              05715000
             ditp(sysbufa) := 0;                               <<04826>>05720000
            end else del;                                               05725000
          go to exit;                                                   05730000
          end;                                                          05735000
        ditp(wcr) := tos; << set remaining word count >>                05740000
        if funct <= write then                                          05745000
        if sbflg then ditp(cdba) := calcsbufadr(ditp(cwc)) << sys buf >>05750000
          else ditp(wcr) := ditp(cwc)+ditp(cdba); <<data seg>> <<04826>>05755000
        tos := ditp(cwc)&lsr(7);                                        05760000
        asmb(zero,xch); << update disc adress >>                        05765000
          dditp(clda) := tos + dditp(clda);                    <<*8726>>05770000
                                                                        05775000
        <<-----------------------------                                 05780000
          note!!!!!                                                     05785000
            qmisc must be on tos here                                   05790000
        ----------------------------->>                                 05795000
                                                                        05800000
        <<---------------------------------                             05805000
          build and start the i/o program                               05810000
        --------------------------------->>                             05815000
                                                                        05820000
doxfer:                                                                 05825000
        ditp(dmisc).l'stat'err:=0; << last status no longer valid >>    05830000
        if funct=format then                                            05835000
          begin                                                         05840000
          if ditp(clda2)<>hpformat and                                  05845000
              ditp(clda2) <> ibmformat then                    <<04826>>05850000
            begin                                                       05855000
            tos := unknownfmat;                                         05860000
            goto badend;                                                05865000
            end;                                                        05870000
          chanp(cmd7) := %30&lsl(8)+unit;                               05875000
          <<*************************************************>><<04826>>05880000
          << the interleave parameter (ibmfmtparm or         >><<04826>>05885000
          << formatparm) determines the order in which the   >><<04826>>05890000
          << sectors occur on a track. if hp format the value>><<04826>>05895000
          << is set to 2 but if ibm format the value must be >><<04826>>05900000
          << set to 1.                                       >><<04826>>05905000
          <<*************************************************>><<04826>>05910000
          if ditp(clda2) = ibmformat                           <<04826>>05915000
             then                                              <<04826>>05920000
                tos:=ditp(clda2)&lsl(8)+ibmfmtparm             <<04826>>05925000
             else                                              <<04826>>05930000
                tos:=ditp(clda2)&lsl(8)+formatparm;            <<04826>>05935000
          chanp(cmd8) := tos;                                           05940000
          chanp(cmd9) := %20000;                                        05945000
          chanp(fmat21) := @ditp(dstat1)+sysdb;                         05950000
          reqstatsio;   << for error status >>                          05955000
          tos := fmat-jumpoffset;                                       05960000
          go startioprog;                                               05965000
          end;                                                          05970000
        if subtype<0 then                                               05975000
          begin << illegal format type >>                               05980000
          tos := unknownfmat;                                           05985000
          goto badend;                                                  05990000
          end;                                                          05995000
        tos := dditp(clda); <<current logical disc addr>>               06000000
        if = and (write<=funct<=rstat)                         <<01115>>06005000
             and not foreign then go to baddiscadr;            <<01115>>06010000
          <<write to sector zero a no-no>>                              06015000
        tos := discinfo(index+secpercyl);                               06020000
        asmb(ldiv);  <<compute disc address>>                           06025000
        if overflow or                                         <<01115>>06030000
           lsm1>logical(discinfo(subtype*nentries+maxcyl))     <<01115>>06035000
           then                                                <<01115>>06040000
          goto baddiscadr;   <<cylinder too large>>                     06045000
        tos := discinfo(index+secpertrk);                               06050000
        asmb(div,xch);                                                  06055000
        tos := tos&lsl(8)+tos;        <<head/sector>>                   06060000
        if subtype>=2 then tos := tos+1; << ibm first sector is 1 >>    06065000
        if funct=initialize then                                        06070000
          begin <<start transfer at start of track >>                   06075000
          tos := tos land %177400; << sector 0 >>                       06080000
          if subtype>=2 then tos := tos+1; << ibm >>                    06085000
          end;                                                          06090000
        dditp(cpda) := tos;   <<current physical address>>              06095000
        chanp(cmd1) := seek+unit;                                       06100000
        chanp(cmd13) := readop+unit;                           <<01866>>06105000
        dchanp(cmd2') := dditp(cpda);     <<seek address>>              06110000
        if funct=reqphysadr then go reqpadr;                            06115000
        chanp(dxfp14) := 12;      <<jump to transfer order>>   <<01866>>06120000
        cxfer := chanrw(funct);   <<channel xfer command>>              06125000
        if sbflg then                                                   06130000
          begin                                                         06135000
          tos := 128;   <<xfer delta>>                                  06140000
          tos := 0;     <<addr delta>>                                  06145000
          bank := 0;                                                    06150000
          end                                                           06155000
        else                                                            06160000
          begin                                                         06165000
          tos := maxtransfer; << xfer delta = 32k-1 >>                  06170000
          asmb(dup);    <<addr delta = 16k>>                            06175000
          end;                                                          06180000
        ad := tos;  <<address delta>>                                   06185000
        xd := tos;  <<transfer delta>>                                  06190000
        tos := if funct=initialize then discinfo(index                  06195000
                 +initsize) else ditp(wcr);                             06200000
        if fopen<=funct<=rstat then sbflg := false;                     06205000
        asmb(dup,ddup);                                                 06210000
        if = and funct<>verify then goto goodend;  <<xfer complete>>    06215000
        ditp(cwc) := tos;                                               06220000
        ditp(scount) := tos;                                            06225000
        bufadr := ditp(cdba);                                           06230000
        if sbflg then checkindex(@sbuf+sysdb-bufadr,sbuf);              06235000
        if funct=verify then                                            06240000
          begin                                                         06245000
          chanp(dxfp14) := 0;   << jump to verify >>           <<01866>>06250000
          chanp(cmd7) := verifyop+unit;                                 06255000
          chanp(cmd8) := ditp(scount);                                  06260000
          end                                                           06265000
        else                                                            06270000
          begin  << read,write, or initialize >>                        06275000
          chanp(cmd9) := if funct=initialize then                       06280000
            initop+unit+setdbit else xferop(funct)+unit;                06285000
          chanp(dxfp27) := if funct=read then cwriterb         <<01866>>06290000
            else if funct=initialize then cwritec else cwritewb;        06295000
          end;                                                          06300000
        if tos>xd then                                                  06305000
          begin                                                         06310000
          <<--------------                                              06315000
            chain orders                                                06320000
          -------------->>                                              06325000
          chanp(dxfp34) := cxfer+%20; <<chained>>              <<01866>>06330000
          chanp(dxfp35) := xd&lsl(1);     <<byte count>>       <<01866>>06335000
          chanp(dxfp36) := discinfo(index+burstlen);           <<01866>>06340000
          chanp(dxfp37) := if fillz<=funct<=fillb then         <<01866>>06345000
                 cbfillmode else cbmode+bank.dstbankfield;     <<01866>>06350000
          chanp(x:=x+1) := bufadr;                                      06355000
          dxfpindex := x+1;                                             06360000
          if sbflg then                                                 06365000
            begin  <<go to next sysbuf>>                                06370000
            checkindex(abs(bufadr-1),sbuf);                             06375000
            bufadr := abs(bufadr-1)+@sbuf+sysdb;               <<04826>>06380000
            end;                                                        06385000
          dchanp(dxfp44') := [16/cjump,16/4] d;                <<01866>>06390000
          dchanp(dxfp46') := [16/cwait,16/0] d;                <<01866>>06395000
          dchanp(dxfp48') := [16/cjump,16/%177751] d; << -23 >><<01866>>06400000
          dchanp(dxfp50') := [16/cwait,16/0] d;                <<01866>>06405000
          dchanp(dxfp52') := [16/cdsj2,16/0] d;                <<01866>>06410000
          dchanp(dxfp54'):=if readafterwrite then              <<01866>>06415000
            [16/0,16/68] d else [16/25,16/68] d;<< no err,err>><<01866>>06420000
          chanp(dxfp56) := 114;  << issue clear >>             <<01866>>06425000
          tos := tos-xd;  << leave remainning count on tos >>           06430000
          end                                                           06435000
        else                                                            06440000
          begin                                                         06445000
          chanp(dxfp39) := cjump;                              <<01866>>06450000
          dchanp(dxfp40') := [16/4,16/cwait] d;                <<01866>>06455000
          dchanp(dxfp42') := [16/0,16/cjump] d;                <<01866>>06460000
          dchanp(dxfp44') := [16/%177756,16/cwait] d; << -18 >><<01866>>06465000
          dchanp(dxfp46') := [16/0,16/cdsj2] d;                <<01866>>06470000
          dchanp(dxfp48') := if readafterwrite then            <<01866>>06475000
            [16/0,16/5] d else [16/0,16/30] d; << no error >>  <<01866>>06480000
          dchanp(dxfp50') := [16/73,16/119] d; << err,pon >>   <<01866>>06485000
          dxfpindex := dxfp34;                                 <<01866>>06490000
          end;                                                          06495000
        chanp(dxfpindex) := cxfer; <<build last order>>                 06500000
        chanp(x:=x+1) := tos&lsl(1);                                    06505000
        dxfpindex := x+1;                                               06510000
        chanp(dxfpindex) := discinfo(index+burstlen);                   06515000
        chanp(dxfpindex+1) := if fillz<=funct<=fillb then cbfillmode    06520000
               else cbmode+bank.dstbankfield;  << see comment above >>  06525000
        chanp(x:=x+1) := bufadr;                                        06530000
        if readafterwrite then                                 <<00490>>06535000
          chanp(dxfp72) := ditp(cwc)&lsl(1); << byte count >>  <<01866>>06540000
        reqstatsio;                                                     06545000
        tos := dxfp-jumpoffset;  <<relative jump address>>              06550000
                                                                        06555000
        <<-----------------------                                       06560000
          start the i/o program                                         06565000
        ----------------------->>                                       06570000
                                                                        06575000
startioprog:                                                            06580000
        chanp(1) := tos; << set the jump adress >>                      06585000
        chanqflg:=if drq'entry'index=0 then false else true;   <<06522>>06590000
        start'hpib(ditp,chanp,chanqflg);                       <<01301>>06595000
        if > then                                                       06600000
          begin                                                         06605000
          <<----------                                                  06610000
            no start                                                    06615000
          ---------->>                                                  06620000
siofailure:                                                             06625000
          tos := badsio;                                                06630000
          go to badend;                                                 06635000
          end;                                                          06640000
        if drq'entry'index = 0 then                            <<06522>>06645000
          begin  << started wait channel prog >>                        06650000
          mstate := 5;                                                  06655000
          return;                                                       06660000
          end;                                                          06665000
        drq'qmisc := tos;                                      <<06522>>06670000
        tos := wait;                                                    06675000
        tos := %13;                                                     06680000
exit:                                                                   06685000
        mstate := tos;                                                  06690000
        drq'stat := tos;                                       <<06522>>06695000
        return;                                                         06700000
                                                                        06705000
fillblank:                                                              06710000
        tos := "  ";                                                    06715000
        go to fc;                                                       06720000
fillzero:                                                               06725000
        tos := 0;                                                       06730000
fc:                                                                     06735000
        chanp(cmd10) := tos;                                            06740000
        ditp(cdba) := abschanp + cmd10;                                 06745000
        go to doxfer;                                                   06750000
                                                                        06755000
        <<---------------------------                                   06760000
          initialize status program                                     06765000
        --------------------------->>                                   06770000
                                                                        06775000
reqstatus:                                                              06780000
        if lditp(dmisc).l'stat'err then goto rstatret;                  06785000
        reqstatsio;                                                     06790000
        tos := rstap-jumpoffset;  <<relative jump address>>             06795000
        go startioprog;                                                 06800000
                                                                        06805000
        <<-----------------------------                                 06810000
          setup physical address prog                                   06815000
        ----------------------------->>                                 06820000
                                                                        06825000
reqpadr:                                                                06830000
        chanp(rpadr4) := abschanp+cmd6;                                 06835000
        chanp(rpadr8) := cnoupd+bank;                                   06840000
        chanp(rpadr9) := ditp(cdba);                                    06845000
        chanp(dxfp14) := rpadr-dxfp15;                         <<01866>>06850000
        chanp(cmd6) := reqdadr+unit;                                    06855000
        tos := dxfp-jumpoffset;                                         06860000
        go startioprog;                                                 06865000
lock:                                                                   06870000
        tos := lockop;                                                  06875000
        goto lp;                                                        06880000
unlock:                                                                 06885000
        tos := unlockop;                                                06890000
lp:                                                                     06895000
        lditp(dmisc).l'stat'err := 0;<< invalidate prior stat>><<02630>>06900000
        chanp(cmd11) := tos+unit;                                       06905000
        tos := lockp-jumpoffset;                                        06910000
        go startioprog;                                                 06915000
selftresult:                                                            06920000
        chanp(selftp10) := cnoupd+bank.dstbankfield;                    06925000
        chanp(selftp11) := ditp(cdba);                                  06930000
        tos := selftp-jumpoffset;                                       06935000
        go startioprog;                                                 06940000
        end;                                                            06945000
asmb(                                                                   06950000
   pcal siodm;    << monitor >>                                         06955000
   pcal flopdvr;  << initiator >>                                       06960000
   pcal flopdvr;  << completor >>                                       06965000
   con 0;         << i/o process procedure >>                           06970000
   pcal flopinit; << initialization procedure >>                        06975000
   con 1;         << # of interrupt procedures >>                       06980000
   pcal gip'hpib);<< interrput handler >>                      <<01301>>06985000
end.                                                                    06990000
