ASMB,L,R,C
* 
*     NAME:   ID.36 
*     SOURCE: 92071-18299 
*     RELC:   92071-16299 
*     PGMR:   DJW,DJN 
* 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      NAM ID.36,0  92071-16299  REV.2041  800717
* 
* 
* 
*     ID.36 IS THE INTERFACE DRIVER FOR THE PROM  CARD FOR
*     THE RTE-L  SYSTEM.   THE DRIVER PROVIDES  TRACK AND 
*     SECTOR  ADDRESSING  FOR THE ROM CARD.   IT  SERVICES
*     SINGLE REQUESTS  ( NON-MULTIBUFFERED )  ALWAYS  USING 
*     DMA FOR ITS OPERATIONS. 
* 
* 
* CHANGE 2/25/80
*     THE DRIVER DEFAULT FOR NUMBER OF SECTORS PER TRACK
*     WAS CHANGED FROM 8 TO 4 TO ACCOMODATE THE FILE
*     MANAGER ON AN INITIALIZATION.  WHEN A USER DOES AN
*     EXEC REQUEST TO THE DRIVER SHE'S TALKING 64 WORD
*     SECTORS, BUT WHEN THE FILE MANAGER DOES AN INITIALIZE 
*     ITS TALKING 128 WORD SECTORS. 
* 
* 
      GEN 11,EID.36,TX:6,IT:36B 
* 
      ENT ID.36 
* 
      EXT $DIOC,$DMPR 
      EXT $DV6,$DV15,$DV16,$DV17,$DV18,$DV19,$DV22,$DVTP
      EXT $IF5,$IFTX,$IF1,$SELR 
* 
DMA   EQU 20B       1ST SELECT CODE FOR DMA SELF-CONFIG 
A     EQU 0 
B     EQU 1 
* 
* 
ID.36 NOP 
      LDB $DVTP     GET DVT EXTENSION ADDRESS 
      ADB P5        ONLY NEED DVP6 AND DVP7 
      STB DVP6      NUMBER OF TRACKS ON DEVICE
      INB 
      STB DVP7      SECTORS/TRACK 
START AND B7        ISOLATE ENTRY TYPE
      ADA JMPTB     POINT TO ADDRESS OF PROCESSING
      JMP A,I       ROUTINE AND JUMP TO IT
      SKP 
* 
*  THIS SECTION HANDLES A NEW REQUEST ( LOGICAL INITIATION )
* 
PI.00 LDB $DV15,I   GET REQUEST CONTROL WORD
      RBR 
      SSB,SLB       CONTROL REQUEST ? 
      JMP ERR       YES, NO CONTROL REQUESTS ALLOWED. 
      STB REQST     SAVE THE REQUEST FOR LATER
      LDA $IFTX     ADDRESS OF IFT EXTENSION
      STA TEMP      USE AS A RUNNING POINTER FOR
      OTA DMA       BUILDING QUADRUPLET 
      LDA $DV15     SET UP A AND B FOR $SELR
      LDB $IF1
      JSB $SELR     DETERMINE RELOCATION REGISTER 
      IOR CONWD     OR IN DMA CONTROL WORD ( 41200 )
      STA TEMP,I    STORE DMA CONWD IN IFT EXTENSION
      ISZ TEMP      POINT TO NEXT WORD
* 
      LDA DVP6,I    NUMBER OF TRACKS ON DEVICE
      CMA,INA 
      LDB $DV18,I   IS REQUESTED TRACK GOOD ? 
      SSB           -VE ? 
      JMP ERR       YES, REJECT REQUEST 
      ADA B         TRACK TOO LARGE ? 
      SSA,RSS 
      JMP ERR       YES, TOO LARGE
      LDB $DV19,I   REQUESTED SECTOR ( 64 WORD )
      SSB,RSS       -VE  ?
      SLB           ODD ? 
      JMP ERR       YES, REJECT REQUEST 
      BRS           DIVIDE BY 2  ( 128 WORD ) 
      CMB           GET -SECTOR NUMBER  -1
      ADB DVP7,I    ADD IN #SECTORS/TRACK  ( 128 WORD ) 
      SSB           SECTOR # TOO LARGE ?
      JMP ERR       YES, REJECT REQUEST 
      LDA $DV18,I   GET REQUESTED TRACK # AGAIN 
      MPY DVP7,I    CALCULATE SECTOR NUMBER ( 128 WORD )
      MPY P2        CONVERT TO SECTOR NUMBER ( 64 WORD )
      ADA $DV19,I   PLUS REQUESTED SECTOR NUMBER ( 64 WORD )
      MPY P64       CONVERT TO WORD ADDRESS 
      STA TEMP,I    SAVE FOR DMA
      ISZ TEMP      POINT TO NEXT WORD
* 
      LDA $DV16,I   USER BUFFER ADDRESS 
      STA TEMP,I    SAVE FOR DMA
      ISZ TEMP      POINT TO THE NEXT WORD
* 
      LDB $DV17,I   ORIGIONAL REQUEST LENGTH
      SZB,RSS       ZERO LENGTH ? 
      JMP STTUS     YES, IMMEDIATE COMPLETION 
      CPB MXWRD     SPECIAL CASE--100000B IS 32K WORD TRANSFER
      JMP SVDMA     JUMP TO SAVE IT FOR DMA 
      SSB,RSS       CONVERT  TO -VE WORDS 
      CMB,INB,RSS   CURRENTLY +VE WORDS 
      BRS           CURRENTLY -VE BYTES 
SVDMA STB TEMP,I    SAVE FOR DMA
      STB $DV19,I   SAVE FOR POST-PROCESSING
      LDA REQST     GET THE ORIGINAL REQUEST
      SSA           IS THIS A WRITE?
      JMP CONT      NO, SO CONTINUE 
      CLA           YES, SO FAKE OUT REQUEST
      JMP CONT2 
* 
CONT  CLF 30B       CLEAR CARD FLAG 
      STC DMA,C     DO SELF-CONFIGURATION AND GO
      ISZ ID.36     TAKE PHYSICAL CONTINUE EXIT 
      CLA,INA       REQUEST TIME-OUT
      JMP ID.36,I   EXIT ( PHYSICAL CONTINUE )
* 
ERR   LDA NODF      SEND ERROR RETURN, DON'T FLUSH
      JMP REJ1
      SKP 
* 
* 
*  ENTER HERE ON INTERFACE INTERRUPT ( PHYSICAL RESUME )
* 
PR.00 CLA,INA 
      LDB $IF5,I    ADDRESS OF ACTIVE DVT 
      JSB $DIOC     SET UP DVT ADDRESSES
      SFC 22B       PARITY ?
      JMP $DMPR     YES 
      LIA DMA+3     READ REMAINING COUNT
      CMA,INA 
CONT2 ADA $DV19,I   A = -VE XMISSION LOG
      CMA,INA 
      LDB $DV17,I   GET USER SPECIFIED LENGTH 
      SSB,RSS       GIVEN IN WORDS ?
      JMP ALSET     YES, SO WE'RE ALL SET 
      ALS           NO, SO CONVERT TO +VE BYTE COUNT
      SSB,SLB,RSS   ODD BYTE REQUEST? 
      JMP ALSET     NO, TLOG IS CORRECT NOW 
      ADA N1        SUBTRACT 1 TO CORRECT THE TLOG
ALSET STA $DV17,I   RETURN XMISSION LOG 
* 
STTUS CLA           NO ERRORS 
REJ1  LIB 31B       READ CARD STATUS
      STB $DV18,I   AND RETURN IN 1ST OPT.PARAMETER 
* 
PDONE LDB $IF5,I    SET COMPLETION ERROR STATUS 
      ADB B17       POINT TO $DV16
      STA B,I       ($DVT POINTERS NOT SETUP IN TIMEOUT CASE) 
      CLC DMA+3,C   CLEAR THE CARD
      CLA           EXIT WITH NO SYSTEM FLAGS SET 
      JMP ID.36,I   BACK TO I/O SYSTEM ( PHYSICAL DONE )
      SKP 
* 
*  ENTER HERE ON PHYSICAL TIMEOUT 
* 
TO.00 JSB ZTLOG     ZERO TRANSMISION LOG
      LDA B3        RETURN ERROR CODE 
      JMP PDONE     CLEAR CARD AND EXIT 
* 
ZTLOG NOP 
      CLA           ZERO TRANSMISION LOG
      LDB $IF5,I    POINT B TO DV17 
      ADB B20 
      STA B,I 
      JMP ZTLOG,I 
* 
*  ENTER HERE ON ABORT
* 
AB.00 JSB ZTLOG     ZERO TRANSMISION LOG
      JMP STTUS     EXIT POSTING NO ERRORS
* 
*  ENTER HERE ON POWER FAIL 
* 
PF.00 LDA RETRY     SET TO RESTART ANY CURRENTLY
      JMP PDONE     ACTIVE REQUEST
* 
*  DATA AREA
* 
TEMP  NOP 
REQST BSS 1 
N1    DEC -1
B3    OCT 3 
B7    OCT 7 
B17   OCT 17
B20   OCT 20
P5    DEC 5 
P2    DEC 2 
P64   DEC 64        WORDS PER SECTOR
MXWRD OCT 100000    THIS NEGATIVE CASE IS TREATED AS POS WORDS
DVP6  NOP           NUMBER OF TRACKS
DVP7  NOP           NUMBER OF SECTORS TRACK 
RETRY OCT 100077
NODF  OCT 140001
CONWD OCT 41200     DMA SELF-CONFIG CONTROL WORD
* 
*   BIT 14 = DV CMD,  DEVICE COMMAND
*   BIT  9 = FOUR,    SET INDICATES FOUR WORDS TO BE FETCHED FOR
*                     CURRENT DMA CONFIGURATION, LOADS REGISTER 31 AS 
*                     PART DMA QUAD.  CLEAR INDICATES THREE DMA CONTROL 
*                     WORDS, 31 MUST BE LOADED SEPERATELY PRIOR TO THE
*                     TRIPLET.
*   BIT  7 = IN,      SET INDICATES THAT THE DIRECTION OF THE DATA
*                     TRANSFER IS FROM THE PROM MODULE TO MEMORY. CLEAR 
*                     INDICATES REVERSE.
* 
JMPTB DEF *+1,I     JUMP TABLE
      DEF AB.00     ABORT 
      DEF PI.00     PHYSICAL INITIATE 
      DEF PR.00     PHYSICAL RESUME 
      DEF TO.00     PHYSICAL TIMEOUT
      DEF PF.00     POWER FAIL
      END 
                                                                                                                                                                                  