ASMB,R * * NAME: ID.50 * SOURCE: 92070-18097 * RELOC: 92070-16097 * PGMR: C.H.W. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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.50,0 92070-16097 REV.1941 800424 * SUP * * * * THIS IS THE GENERAL PURPOSE I/O & PARALLEL INTERFACE CARD * DRIVER FOR THE 21LC SYSTEM. IT SERVICES SINGLE REQUESTS (NON- * MULTIBUFFERED) ALWAYS USING DMA FOR ITS OPERATIONS. IT MAY ALSO * BE CALLED TO DESIGNATE A PROGRAM TO BE SCHEDULED ON AN ASYNCHRONOUS * CARD INTERRUPT. * * GEN 9,EID.50,TX:6,IT:50B * ENT ID.50 * EXT $DIOC,$DMPR,$LIST,$DVLU,$RUN#,$NAME EXT $IDA,$IDSZ EXT $DV1,$DV15,$DV16,$DV17,$DV18,$DV19 EXT $DVTP,$IF5,$IF6,$IFTX * DMA EQU 20B 1ST SELECT CODE FOR DMA SELF-CONFIG CARD EQU 30B CARD S.C. W/ GLOBAL REG ENABLED SPC 4 * * ID.50 NOP AND B7 ISOLATE ENTRY TYPE ADA JMPTB POINT TO ADDR OF PROCESSING JMP 0,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 CN.00 YES LDA $IFTX ADDR OF IFT EXTENSION AREA ADA B2 STA TEMP USE AS RUNNING POINTER FOR OTA DMA BUILDING QUADRUPLET LDA CONWD DMA CONTROL WORD (41400) SSB IS THIS A READ? XOR B600 YES, SET FOR INPUT, NO AUTO LDB $DVTP INB LDB 1,I GET DVT PRAM 2 SLB LSB INDICATES 8 BIT OR 16 BIT INTERFACE IOR BIT13 LSB=1, SO ITS 8-BIT - SET BYTE MODE ERB,SLB AUTO ON INPUT? IOR B400 YES STA TEMP,I STORE DMA CONWD IN IFT EXTENSION ISZ TEMP POINT TO NEXT LDA $DV18,I GET OPTIONAL PARAM IOR $DVTP,I FORM CONTROL REGISTER WORD STA TEMP,I STORE DEVICE CONWD IN IFT EXT ISZ TEMP LDA $DV16,I GET BUFFER ADDRESS STA TEMP,I STORE IN IFT EXTENSION ISZ TEMP LDA $DV17,I GET REQUEST LENGTH SZA,RSS ZERO LENGTH? JMP PDONE YES, DO IMMEDIATE COMPLETION CMA,SSA,INA,RSS GIVEN IN WORDS? CMA,INA,RSS NO, BYTES ALS YES, SO CONVERT TO NEG BYTES SEZ,RSS 16 BIT INTERFACE? ARS YES, FORM NEG. WORD COUNT STA TEMP,I STORE IN IFT EXTENSION STA $DV19,I SAVE FOR POST-PROCESSING CLC CARD,C DISABLE CARD INTERRUPTS DURING DMA STC DMA,C DO SELF-CONFIGURATION & GO ISZ ID.50 TAKE PHYSICAL CONTINUE EXIT CLA,INA REQUEST TIME-OUT JMP ID.50,I EXIT (PHYSICAL CONTINUE) SKP SPC 3 * * THIS SECTION HANDLES CONTROL REQUESTS * CN.00 EQU * LDA 1 AND B3740 ISOLATE SUBFUNCTION CPA REQ20 SCHEDULE PROGRAM? JMP CN.20 YES CPA REQ21 DISABLE PGM SCHEDULE? JMP CN.21 YES CPA REQ40 SET CONTROL REGISTER & PRAM #2 JMP CN.40 YES SZA,RSS CLEAR REQUEST? OTA CARD+2 YES, CLEAR REG 32 JMP STTUS * CN.20 JSB $NAME CONVERT NAME TO ID SEG ADDR DEF $DV16,I SZB,RSS DOES PGM EXIST? JMP REJ1 NO, RETURN ILLEGAL REQUEST ERROR JSB $RUN# GET SEQ#/ ID # LDB $DV19,I GET OPT PRAM DST $IFTX,I STORE RUN/IDNO & PRAM IN IFTX JMP STTUS * REJ1 LDA RQERR RETURN REQUEST ERROR & FLUSH IT JMP STTUS SPC 3 CN.21 CLA STA $IFTX,I CLEAR PGM # JMP STTUS SPC 3 CN.40 DLD $DV16,I OUTPUT DEVICE CTL WORD + PRAM 2 DST $DVTP,I SAVE IN DVT PARAMETER # 1 JMP STTUS SKP SPC 3 * * 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 LDA $IF6,I GET IFT STATUS SFS 21B DMA INTERRUPT? JMP ASYNC NO SSA,RSS BUSY? JMP ILLIN NO, THEN WHY THE HELL DID DMA INTERRUPT * AN ACTIVE DMA TRANSFER HAS COMPLETED DLD $DVTP,I GET 2ND PRAM IN B LIA DMA+3 READ REMAINING COUNT CMA,INA ADA $DV19,I A=NEG. XMISSION COUNT CMA,INA SLB,RSS 16 BIT INTERFACE? ALS YES, CONVERT FROM -WORDS TO -BYTES LDB $DV17,I GET USER SPECIFIED LENGTH SSB GIVEN IN BYTES? JMP *+3 YES, SO WE'RE ALL SET INA NO, SO CONVERT TO POSITIVE ARS WORD COUNT STA $DV17,I RETURN XMISSION LOG * AB.00 EQU * ABORT EXIT STTUS CLA NO ERRORS * PDONE LDB $IF5,I GET DVT ADDR ADB B17 POINT TO DVT16 STA 1,I SET COMPLETION ERROR STATUS ADB B2 POINT TO DVT18 LIA CARD+2 READ CARD STATUS STA 1,I & RETURN IN 1ST OPT.PARAMETER CLC DMA+1 SUSPEND DMA THEN CLC DMA+3,C CLEAR THE CARD'S DMA CLA EXIT WITH NO SYSTEM FLAGS SET * EXIT CLC CARD,C DISABLE CARD CLB CPB $IFTX,I PROG TO SCHED? JMP ID.50,I NO, BACK TO I/O SYS * OTB CARD+1 CLEAR CARD CTL REGISTER STC CARD ALLOW ASYNC INTERRUPTS JMP ID.50,I DONE SKP * ENTER HERE ON NON-DMA INTERRUPT. USE RUN #/ID # IN 1ST WORD * OF IFT EXTENSION TO SCHEDULE PROGRAM TO HANDLE INTERRUPT. * THE PROGRAM IS PASSED THE FOLLOWING PARAMETERS: * PARAM 1 = LU * PARAM 2 = PARAMETER PASSED IN EXEC(3,2000B+LU) REQST * PARAM 3 = CARD STATUS FROM REG 32 * ASYNC SSA,RSS CARD NON-BUSY? SFS 30B YES, CARD INTERRUPT? JMP ILLIN NO, WHAT THEN? * CARD HAS INTERRUPTED LDA $IFTX,I SZA,RSS ANY PROG TO SCHEDULE? JMP ILLIN NO, ILLEGAL INTERRUPT AND B377 ISOLATE ID SEGMENT # ADA N1 MPY $IDSZ ADA $IDA A= ID SEG ADDR LDB 0 SAVE IT IN B ADA B34 POINT TO WORD 29 LDA 0,I GET SCHEDULING SEQ # XOR $IFTX,I AND .17 ISOLATE BITS 15-12 CCE,SZA HAS ID SEGMENT BEEN RERUN? JMP PGERR YES, CLEAR TABLE ENTRY & GIVE MSG * LDA 1 ID SEGMENT ADDR INA STA TEMP ADDR OF 1ST TEMP WORD ADA B16 LDA 0,I GET ID SEG STATUS AND B77 BITS 5-0 SZA DORMANT? JMP PCONT-1 NO, JUST EXIT * WE CAN NOW GO AHEAD & SCHEDULE THE PROGRAM JSB $LIST PUT PGM IN SCHEDULED LIST OCT 60 LDB $DV1 GET DVT ADDR JSB $DVLU COMPUTE LU STA TEMP,I STORE 1ST PARAMETER ISZ TEMP LDB $IFTX INB LDA 1,I GET PGM SCHED PARAMETER LIB CARD+2 READ STATUS DST * 2ND=PASSED PRAM 3RD=CARD STATUS TEMP EQU *-1 CLA * PCONT ISZ ID.50 GO OUT PHYSICAL CONTINUE LDB $IF6,I GET IFT AV RRL 1 SET "T" IF BUSY JMP EXIT CK FOR CARD ENABLE & EXIT SKP * * ENTER HERE ON PHYSICAL TIMEOUT TO.00 LDA B3 RETURN TIME-OUT ERROR STATUS JMP PDONE GO CLEAR CARD & GO OUT PHY DONE SPC 3 * * ENTER HERE ON A POWER-FAIL * PF.00 LDA RETRY SET TO RESTART ANY CURRENTLY JMP PDONE ACTIVE REQUEST SPC 3 * PROGRAM TO SCHEDULE HAS BEEN RERUN PGERR XOR 0 STA $IFTX,I CLEAN-OUT PGM SCHED ENTRY * ILLEGAL INTERRUPT ILLIN LDA B2 SET "I" BIT IN A REG JMP PCONT GO OUT CONTINUE * * DATA AREA * B2 OCT 2 B3 DEC 3 B7 OCT 7 B16 OCT 16 B17 OCT 17 B34 OCT 34 B77 OCT 77 B377 OCT 377 REQ20 OCT 1000 SUBFUNCTION=20 REQ21 OCT 1040 SUBFUNCTION=21 REQ40 OCT 2000 SUBFUNCTION=40 B400 OCT 400 B600 OCT 600 B3740 OCT 3740 MASK FOR SUBFUNCTION FIELD BIT13 EQU PGERR .17 OCT 170000 RETRY OCT 100077 RQERR OCT 140001 N1 DEC -1 CONWD OCT 41400 DMA SELF-CONFIG CONTROL WORD * 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