ASMB,R * * NAME: CLASS * SOURCE: 92070-18093 * RELOC: 92070-16093 * PGMR: E.J.W.,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 CLASS,0 92070-16093 REV.1941 800407 * * * ENT $I.CL,$C.CL,$G.CL,$F.CL ENT $$CLA,$.CLA * EXT $IDNO,$LIST,$XEQ,$BLIM,.MVW EXT $SCHD,$RTN,$ERAB,$ABRQ,$UNLK,$RTSM EXT $CLTA,$ROM,$XQT,$SUSP,$A,$B EXT $DV6,$DV8 EXT $RQRT,$RQP1,$RQP2,$RQP3,$RQP4,$RQP5 EXT $RQP6,$RQP7,$RQP8,$RQCT SPC 1 EXT .MVW * A EQU 0 B EQU 1 HED ** RTE-L CLASS I/O MODULE - INITIATION CALL ** * * * CLASS I/O ALLOCATE CLASS FROM HIGH END OF TABLE * IF HE DID NOT SPECIFY A CLASS. * * LDA WORD2 (A) = CONTROL WORD * LDB T2 (B) = PRIORITY * JSB $I.CL CALL FROM IOC MODULE * (RTN) P+1: PENDING COUNT AT MAX * (RTN) P+2: DO RETHREAD * (RTN) P+3: B=ADDR OF CLASS ENTRY * $I.CL NOP CALLED BY $MIO MODULE STA TEMP1 SAVE CONWD STB TEMP2 SAVE PRIORITY CLA STA $A,I A=0 FOR INIT.GOOD RETURN STA NEWCL STA NEWC2 CLB,INB CPA $RQP7 IF NO CLASS WORD IN REQ, JMP ERRIO FLUSH IT OUT (IO01). LDA $RQP7,I GET CLASS WORD AND B377 MASK TO THE CLASS DEF. SZA IF SUPPLIED JMP L.4 SKIP ALLOCATION CODE * * * ALLOCATE A CLASS FROM THE HIGH END OF THE TABLE * LDA B160K GET BITS 15,14, & 13 FROM AND $RQP7,I USER'S CLASS WORD STA SECCD LDB $XQT GET ID SEG ADDR JSB $IDNO CONVERT TO ID # STA TEMP0 SAVE ID # AND B37 FOR USE AS SECURITY CODE ALF,ALF IOR SECCD FILL IN USER'S BIT15,14,13 STA $RQP7,I FOR RETURN AS CLASS NUMBER * LDB $CLTA,I GET THE LENGTH OF THE TABLE SZB,RSS IF NO CLASSES DEFINED JMP ERRIO REJECT THE CALL ADB $CLTA ADD THE TABLE ADDRESS CLA,CCE * L.1 CPA 1,I IS THE ENTRY FREE (0)? JMP L.3 YES, GO USE IT ADB N1 NO, STEP TO NEXT ONE CPB $CLTA END OF TABLE? CCA,RSS YES SKIP (A = -1) JMP L.1 NO - GO TEST NEXT ONE. * STA $A,I SET REASON FOR REJECT IN A REG. LDA $CLTA SET A=CLASS TABLE ADDR LDB $RQP7,I FOR L.8 IN CASE OF SUSPEND SSB,RSS NO-WAIT REQUESTED? JMP L.8 NO, SUSPEND UNTIL CLASS AVAILABLE * L.2 LDA $RQRT UPDATE THE STA $SUSP,I RETURN ADDR JMP $XEQ & EXIT * L.3 LDA $CLTA CMA,INA ADA 1 COMPUTE RELATIVE POSITION IOR $RQP7,I ADD SECURITY CODE AND USER BIT STA $RQP7,I RETURN NEW CLASS WORD TO USER AND B174C GET SECURITY CODE FOR CLASS QUEUE-HEAD RAL,ERA SET THE ALLOCATED BIT STA B,I PUT INTO CLASS QUEUE STB NEWCL SAVE ADDR OF NEW CLASS ENTRY ADB $CLTA,I POINT TO CLASS TBL WD #2 LDA TEMP0 GET SEG ID # OF CALLER STA 1,I ASSIGN OWNERSHIP STB NEWC2 SAVE ADDR FOR POSSIBLE CLEAN-UP * L.4 LDA $RQP7,I GET CLASS JSB VERFY VERIFY/SET-UP CLASS * LDA CLSAD L.45 STA B SET B TO ADDR OF QUEUE ENTRY LDA B,I CLE,SSA,RSS A POINTER? JMP L.45 YES, TRACE IT MORE * JSB SECCK CHECK SECURITY CODE LDA 1,I GET CLASS WORD AND B377 ISOLATE PENDING COUNT CPA B377 FULL? JMP $I.CL,I YES ISZ $I.CL LDA $RQCT # OF PRAMS IN EXEC CALL ADA N7 SET E IF 8 OR MORE PRAMS LDA CLASS GET BIT 13 OF CLASS WD RAL,RAL MOVE "RETHREAD" TO BIT15 SEZ,SSA RETHREAD BIT & 2ND CLASS SPECIFIED? JMP L.5 YES, TREAT AS A RETHREAD * ISZ $I.CL JMP $I.CL,I RETURN, B HAS ADDR OF CLASS WORD SKP * RETHREAD, 1ST VERIFY PREVIOUS CLASS L.5 STB TEMP SAVE ADDR OF CLASS WORD CLA LDA $RQP8,I GET OLD CLASS JSB VERFY VERIFY IT SSA COMPLETED BUFFER ON CLASS? JMP ERR04 NO, ERROR LDB 0 LDA 0,I SSA,RSS CLASS WD? JMP *-2 NO, TRACK IT DOWN JSB SECCK CHECK SECURITY CODE STB TMP8 SAVE ADDR OF HDR INB LDA TEMP1 NEW CONWD XOR 1,I ALF,SLA WAS "Z" BIT CHANGED? JMP ERR04 YES, THAT'S UNACCEPTABLE INB STB TEMP9 SAVE ADDR OF HDR WD 3 (PRAM1) ADB .2 STB TEMP0 SAVE ADDR OF HDR WD 5 (PRAM3) ADB .3 LDA 1,I GET TOTAL BLOCK SIZE OUT OF WD 8 ADA TMP8 POINT TO END OF BLOCK+1 STA TEMP6 SAVE FOR SIZE CHECKS LDA TEMP1 ALF,SLA Z-BIT SET? RSS YES JMP L.52 NO, SKIP Z LEN CHECK * VERIFY CTL BUFFER LENGTH NOT > THAN ORIGINAL LDA $RQP6,I USERS "Z" LENGTH LDB TEMP0,I GET Z BUFFER ADDR IN SAM JSB SIZCK CHECK SIZE OF Z BUF OVERWRITE LDA TEMP4 STA TEMP5 SAVE LEN FOR Z BUFR MOVE STB TEMP6 REDEFINE END OF DATA BUFR * L.52 LDA $RQP1 USERS REQUEST CODE RAR SSA,SLA IS THIS A CLASS CONTROL RETHREAD? JMP L.9 YES, BYPASS DATA BUFFER CK/MOVE * VERIFY DATA BUFFER LENGTH NOT > THAN ORIGINAL LDA $RQP4,I USERS LEN SZA,RSS ANY OVERWRITE? JMP L.6 NO, LEAVE BUFFER/LENGTH IN TACT LDB TEMP9,I GET DATA BUFFER ADDR IN SAM * NOW RECOMPUTE SIZE OF DATA BUF SINCE "XLOG" MAY * BE IN POSITIVE BYTES JSB SIZCK CHECK SIZE OF DATA OVERWRITE LDA $RQP3 ADDR OF USER'S BUFFER JSB .MVW OVERWRITE NONE/PART/ALL DEF TEMP4 OF CLASS DATA BUFFER NOP ISZ TEMP9 POINT TO DATA LEN IN HEADER LDA $RQP4,I GET USER'S LENGTH STA TEMP9,I UPDATE DATA LENGTH CLA * * RETHREAD ACCEPTED, SO DO IT L.6 STA $A,I SET USER'S A REG LDA TEMP1 PASSED CONWD IOR B1400 SET "TY"=3 ISZ TMP8 STA TMP8,I STORE IN CLASS HDR ALF,SLA "Z" BIT SET? JMP L.7 YES, DON'T OVERRIDE PARMS LDA $RQP5,I NO, PICK-UP PASSED LDB $RQP6,I OPT PARMS & DST * STORE THEM IN CLASS HEADER TEMP0 EQU *-1 JMP L.75 SKIP Z BUFFER MOVE SECTION * MOVE IN NEW "Z" BUFFER L.7 LDB TEMP0,I POINT TO CTL BUFFER IN BLOCK LDA $RQP5 USERS CTL BUFFER ADDR JSB .MVW OVERWRITE ALL/PART/NONE OF Z BUF DEF TEMP5 NOP * L.75 LDB TEMP0 ADB .2 LDA TEMP2 PRIORITY STA 1,I STORE IN 7TH WD INB POINT TO TOTAL SAM BLOCK SIZE LDA 1,I ADA $DV8,I UPDATE BUFFER ACCUMULATOR STA $DV8,I ON NEW DVT INB LDA $RQP7,I GET NEW CLASS WD STA 1,I STORE IN WD 9 ADB N8 POINT TO START ISZ TEMP,I BUMP PENDING COUNT LDA 1,I STA CLSAD,I UNLINK BUFFER FROM OLD CLASS JMP $I.CL,I RETURN * L.8 LDB $XQT ID SEG ADDR JSB $LIST PUT PROGRAM IN SUSPEND LIST OCT 52 UNTIL CLASS RESOURCE AVAILABLE JMP $XEQ EXIT * L.9 LDB $RQP4,I GET OPT PARAM # 2 LDA $RQP3,I GET OPT PARAM # 1 DST * STORE IN HDR WORDS 3 & 4 TEMP9 EQU *-1 LDA $RQP7,I GET NEW CLASS AND B.017 BITS 12-0 JMP L.6 FINISH RETHREAD, RTN CLAS IN (A) SPC 3 * ROUTINE TO TO CHECK THAT RETHREAD DOESNT TRY TO OVERLAY MORE * WORDS THAN THE ORIGINALLY ALLOCATED BUFFER SIZE SIZCK NOP SSA,RSS JMP *+3 ALREADY A POSITIVE LENGTH ARS CMA,INA CONVERT BYTES TO +WORDS STA TEMP4 SAVE FOR MVW ADA 1 ADD BUFFERS ADDRESS CMA,INA ADA TEMP6 LAST WD+1 - LAST OVERWRITTEN+1 SSA,RSS SIZE TOO LARGE? JMP SIZCK,I NO, SIZE OK SO RETURN JMP ERR04 YES, HE BLEW IT SPC 3 * SECCD NOP CLASS NOP B174C OCT 17400 BITS 8-12 N1 DEC -1 N7 DEC -7 N8 DEC -8 N10 DEC -10 N12 DEC -12 .2 DEC 2 .3 DEC 3 .4 DEC 4 .7 DEC 7 .9 DEC 9 .10 DEC 10 B37 OCT 37 B377 OCT 377 B.017 OCT 17777 B1400 OCT 140000 SKP HED ** RTE-L CLASS I/O MODULE - COMPLETION CALL ** * CLASS REQUEST COMPLETION * * CLASS COMPLETION IS HANDLED AS FOLLOWS: * * 1. THE EXCESS BUFFER IS RETURNED ON WRITE COMPLETION * UNLESS "SAVE BUFFER" WAS SET * 2. IF THE CLASS QUEUE IS NOT EXPECTING A REQUEST * THE WHOLE BUFFER IS RELEASED AND WE EXIT. * 3. IF A PROGRAM IS WAITING FOR THE REQUEST IT IS * RESCHEDULED. * 4. THE REQUEST IS MODIFIED TO PUT THE STATUS WORD * AND THE TRANSMISSION LOG (TLOG) IN WORDS * 7 (PRIORITY) AND 4 (USER LENGTH WORD) * 5. THE CLASS QUEUE IS UPDATED AND WE EXIT. * * SEE DESCRIPTION OF CLASS QUEUE IN COMMENTS AT BEGINNING * OF SECTION ON USER REQUESTS. * * LDA TLOG (A) = TRANSMISSION LOG * LDB PTR (B) = CLASS QUEUE POINTER * JSB $C.CL CALL FROM $MIO * RETURN * * * $C.CL NOP STA TEMP6 SAVE TRANSMISSION LOG STB HEAD SAVE QUEUE ADDR ADB .7 POINT TO BUFFER SIZE STB TEMP5 SAVE ADDR LDB 1,I GET SIZE JSB $BLIM ADJUST BUFR ACCUM & TEST B.L. LDB TEMP5 INB LDA 1,I GET CLASS WD FROM BLOCK ADB N7 POINT TO CONWD STA TEMP4 SAVE CLASS RAL,ELA E=BIT 14 LDA B,I GET THE CON WORD SEZ,RSS IF "SAVE" BUFFER SET SLA OR IF A READ, JMP C.04 SKIP BUFFER DEALLOCATE * LDA TEMP5,I GET BLOCK SIZE TO A. ADA N12 IF LESS THAN 2 WDS WILL BE LEFT SSA THEN SKIP JMP C.04 THE RETURN OF SAM ADA .2 STA TEMP2 SAVE LENGTH FOR RETURN * ADB .9 STEP TO RETURN BUFFER ADDRESS STB TEMP1 SET THE BUFFER ADDRESS JSB $RTN RETURN THE WRITE BUFFER TEMP1 NOP BUFFER ADDRESS TEMP2 NOP BUFFER LENGTH * LDA .10 SET BLOCKSIZE= HEADER LEN STA TEMP5,I * C.04 LDA TEMP4 GET THE CLASS JSB SETCA SETUP CLASS ENTRY ADDRS * JSB PENDG DECR.PENDING CNT SEZ FLUSH FLAG SET? JMP C.09 YES LDA CLSAD LDB TMP8,I GET CONTENTS OF CLASS HEAD RBL,CLE,ELB IF PROGRAM WAITING SEZ,RSS JMP C.05 SKIP,ELSE GO LINK IN THE RQ. * * PROGRAM IS WAITING, CLEAR THE WAIT FLAG * AND RESCHEDULE THE PROGRAM * RBR,RBR CLEAR THE WAIT FLAG STB A,I AND RESET IN THE QUEUE. JSB $SCHD SCHEDULE ANY PROGRAMS WAITING OCT 52 * C.05 LDB TMP8,I GET CLASS ENTRY STB HEAD,I SET IN NEW END OF LIST LDB HEAD SET NEW ELEMENT IN STB TMP8,I THE LIST. * ADB .3 POINT TO 4TH WD OF HDR LDA TEMP6 TRANSMISSION LOG STA 1,I OVERLAYS BUFFER LENGTH ADB .3 POINT TO 7TH WD OF HDR LDA $DV6,I DVT STATUS STA 1,I OVERLAYS PRIORITY JMP $C.CL,I RETURN TO $MIO MODULE * C.09 LDB TEMP5,I GET BUFFER SIZE STB TEMP4 JSB $RTN RTN SAM HEAD NOP TEMP4 NOP JMP $C.CL,I RETURN SKP HED ** RTE-L CLASS I/O MODULE - GET CALL ** * $G.CL IS THE ENTRY POINT FOR A 'GET' EXEC CALL * * JMP $G.CL CALL FROM $MEX * * $G.CL EQU * CLA STA NEWCL ENSURE NO DEALC ON ERROR STA NEWC2 LDA $RQP2,I GET THE CLASS JSB VERFY VERIFY/SET-UP CLASS * LDA $RQP4,I GET THE LENGTH SSA,RSS POS WORDS? JMP *+3 YES ARS CMA,INA CONVERT -BYTES TO +WORDS STA TMP8 SAVE. ADA $RQP3 CHECK IF AREA EXTENDS INTO THE CMA,CLE,SSA,INA,RSS ROM AREA OF MEMORY JMP ERR04 ERROR, LNGT TOO LARGE ADA $ROM MUST BE < 1ST WORD OF ROM AREA SEZ,RSS IF NOT THEN JMP ERR04 ERROR 4 DIAGNOSTIC * * LDB CLSAD,I GET QUEUE HEAD SSB IF A COUNTER JMP G.06 GO SUSPEND THE PROGRAM * STB PTR SAVE THE ADDRESS INB GET THE CON WORD LDA B,I AND AND .3 ISOLATE THE REQUEST CODE STA $RQP7,I RETURN IT TO USER'S IRCLS ADB .2 INDEX TO THE LDA 1,I LOG AND SET IT IN STA $B,I THE 'B' REG INB INDEX TO THE 1ST LDA 1,I OPTIONAL WORD AND SET IT STA $RQP5,I IN THE USER'S BUFFER INB NOW DO THE LDA 1,I 2ND OPTIONAL STA $RQP6,I WORD INB STEP TO STATUS WORD LDA B,I GET COMPLETION STATUS. STA $A,I AND SET IT IN THE A REG. INB GET THE BUFFER LENGTH LDA B,I AND SET IT STA TEMP5 FOR RETURN INB STEP TO USER CLASS WORD LDA B,I GET IT JSB SECCK CHECK SECURITY CODE INB LDA 1,I GET OPT. USER PARAMETER STA $RQP8,I & RETURN IT STB TEMP4 SAVE THE BUFFER ADDRESS LDA TEMP5 ADA N10 LOP THE HEADER LENGTH TO LDB 0 GET DATA LENGTH CMA,INA SET MOVE COUNT NEG ADA TMP8 USE LESSOR OF THE TWO COUNTS SSA USE QUEUE COUNT IF SMALLER LDB TMP8 SSB IF COUNT LESS THAN ZERO THEN JMP G.05 THEN SKIP MOVE * ISZ TEMP4 STEP THE BUFFER ADDRESS. LDA TEMP4 (A)= SOURCE STB TEMP SAVE COUNT LDB $RQP3 (B)= DESTINATION JSB .MVW DEF TEMP $$CLA EQU * $.CLA EQU * NOP G.05 LDA $RQP2,I IF SAVE RAL,RAL QUEUE OPTION SLA,ELA THEN JMP L.2 THEN EXIT * LDA PTR,I ELSE STA CLSAD,I UPDATE THE LIST SSA IF POINTER, SKIP COUNT CHECK AND B377 GET # PENDING REQUESTS LEFT SEZ,SZA,RSS NO REQUESTS LEFT STA CLSAD,I AND IF DEALLOCATE WANTED, DO IT. SEZ,SZA,RSS STA CLSA2,I 2ND WORD AS WELL JSB $RTN RETURN THE MEMORY PTR NOP AND TEMP5 NOP THEN JMP G.08 SCHEDULE WAITERS AND EXIT * G.06 LDA 1 JSB SECCK CHECK SECURITY CODE RBL,CLE,ELB MOVE BIT14 (SOMEONE WAITING) TO E G.065 LDA CLSAD,I GET CLASS WORD AND B377 CMA,SEZ ANYONE WAITING? (SET ONES COMP) JMP SCEDT YES,SORRY SOMEBODY BEAT YOU TO IT * STA $A,I SET A FOR POSSIBLE RTN (NON-POSITIVE) INA GET CORRECT 2'S COMPLEMENT STA B LDA $RQP2,I GET THE OPTION FLAG ELA,RAL SET E=BIT15 NO-WAIT OPT. SZB,RSS IF PENDING CNT= 0 SSA AND BIT13 SET, JMP G.07 DON'T DEQUEUE * STB CLSAD,I IF Q-H=0 AND BIT14=0 DEQUEUE! STB CLSA2,I G.08 LDA $CLTA NOW SCHEDULE ALL THOSE WAITING JSB $SCHD FOR AN AVAILABLE CLASS NUMBER. OCT 52 JMP L.2 RETURN * G.07 CLA,SEZ,INA JMP L.2 BIT15=1 FOR NO-WAIT. RETURN. RAR,RAR 1 INTO BIT 14 IOR CLSAD,I SET "SOMEONE IS WAITING" FLAG STA CLSAD,I IN CLASS TABLE LDA CLSAD GET CLASS ADDR IN A FOR L.8 JMP L.8 PUT PGM INTO SUSPENSION * * SCEDT ERB,RBR CLEAR THE BIT AND STB CLSAD,I RESET THE CLASS HEAD LDA CLSAD GET HEAD ADDRESS TO A AND JSB $SCHD RESCHEDULE THE WAITER IF ANY OCT 52 LDB .10 LDA $LIST CLE,SZA WAS THERE A WAITER? JMP ERRIO YES, DOUBLE REQ ON CLASS - ERROR JMP G.065 NO. MUST HAVE BEEN ABORTED, CONTINUE SKP * * SUBROUTINE TO VERIFY USER'S CLASS NUMBER * ON RETURN, A&B HAVE CLASS TABLE VALUES * VERFY NOP STA CLASS USER'S CLASS AND B174C ISOLATE SECURITY CODE STA SECCD LDA CLASS JSB SETCA SETUP CLASS ENTRY ADDRS CMA,CLE,INA,SZA,RSS NEGATE, WAS IT ZERO? JMP ERR00 YES, ERROR IO00 ADA $CLTA,I SET E IF CLASS IN RANGE LDA CLSAD,I GET CONTENTS OF ENTRY LDB CLSA2,I GET "FLUSH" FLAG SEZ,SZA ALLOCATED AND WITHIN RANGE? SSB YES, SKIP IF NOT FLUSHING JMP ERR00 OTHERWISE GIVE IO00 JMP VERFY,I RETURN SPC 1 * * THIS SUBROUTINE DECREMENTS THE PENDING COUNT, AND * IF IT GOES TO ZERO AND THE "FLUSH" FLAG IS SET, THE * CLASS IS DEALLOCATED. ON EXIT, E-REG=1 IF FLUSH SET. * PENDG NOP LDA CLSAD STA TMP8 LDA TMP8,I CHASE THE CLASS LIST SSA,RSS CLASS WORD FOUND? JMP *-3 NO, KEEP GOING ADA N1 DECREMENT PENDING COUNT STA TMP8,I LDA CLSA2,I GET 2ND WORD CLE,SSA,RSS FLUSHING? JMP PENDG,I NO, RTN LDA TMP8,I AND B377 EXAMINE PENDING COUNT SZA,RSS MORE PENDING? JSB CLRCL NO, CLEAR CLASS, RESCHED WAITERS CCE FLAG FLUSH JMP PENDG,I SPC 1 * SUBROUTINE TO CLEAR CLASS & SCHEDULE WAITERS FOR A CLASS # CLRCL NOP STA CLSAD,I A IS ZERO ON ENTRY STA CLSA2,I CLEAR BOTH WORDS OF CLASS TABLE LDA $CLTA ADDR OF CLASS TABLE JSB $SCHD RESCHEDULE THOSE WAITING OCT 52 FOR A CLASS # JMP CLRCL,I SPC 1 * SUBROUTINE TO SET-UP ADDRESSES FOR CLASS TABLE ENTRY SETCA NOP AND B377 LDB 0 LEAVE CLASS # IN A REG ADB $CLTA POINT TO 1ST WORD OF CLASS ENTRY STB CLSAD ADB $CLTA,I POINT TO 2ND WORD STB CLSA2 JMP SETCA,I HED ** RTE-L CLASS I/O MODULE - FLUSH CALL ** * CLASS FLUSH ROUTINE * * THIS ROUTINE ALLOWS THE FLUSHING OF CLASS I/O REQUESTS * AND CLASS NUMBERS WITH VARIOUS OPTIONS FOR THE USE OF * PROGRAM TERMINATION/ABORT PROCESSING AND THE "CLRQ" * CLASS MANAGEMENT SUBROUTINE. * * CALLING SEQUENCE: * LDB (DVT ADDRESS) (CODE 2&3 ONLY) * LDA (ID SEG ADDR (CODE 0&2) OR CLASS # (CODE 1&3) * JSB $F.CL * (CODE) * * CODES ARE 0 = FLUSH ALL COMPLETED BUFFERS FOR CLASSES OWNED * BY THE PASSED ID SEGMENT. IF PENDING COUNT * IS ZERO, DEALLOCATE THE CLASS, ELSE SET THE * "FLUSH" FLAG IN THE CLASS TABLE ENTRY. * (USED UPON PGM TERMINATION OR ABORT) * 1 = SAME AS ABOVE USING ONLY THE CLASS # PASSED * IN THE A REGISTER (I.E. INDEPENDENT OF * CLASS OWNERSHIP. * (USED BY "CLRQ" CLASS FLUSH) * 2 = FLUSH ALL NON-ACTIVE PENDING REQUEST BUFFERS * FOR CLASSES OWNED BY THE PASSED ID SEGMENT. * FOR ALL ACTIVE REQUESTS (DVT BUSY), CALL * "$ABRQ" TO INITIATE A REQUEST ABORT. IF * PENDING COUNT IS ZERO AND "FLUSH" FLAG IS * SET, DEALLOCATE THE CLASS. * (USED UPON PGM ABORT) * 3 = SAME AS ABOVE USING ONLY THE CLASS # PASSED * IN THE A REGISTER. * (USED BY "CLRQ" CLASS FLUSH AND LU FLUSH) * $F.CL NOP STA TEMP1 SAVE CLASS OR OWNER STB TEMP2 INB STB TEMP6 SAVE POSSIBLE ADDR OF DVT2 LDB $F.CL,I GET CODE SLB OWNER OR CLASS? JMP F.05 CLASS LDB TEMP1 OWNER JSB $IDNO COMPUTE ID SEG # STA TEMP1 SAVE IT JMP F.08 * F.05 JSB SETCA SETUP CLASS ENTRY ADDRS LDA CLSAD,I GET 1ST WORD SZA,RSS IS CLASS ALLOCATED? JMP F.EX NO SSA END OF STATE 2 LIST? JMP *+3 YES B160K LDA 0,I GET NEXT LINK JMP *-3 XOR TEMP1 COMPARE SECURITY CODE IN AND B174C BITS 12-8 SZA SECURITY CODE OK? JMP F.EX NO, RTN ON INVALID CLASS * F.08 LDB $F.CL,I GET CODE AGAIN RBR,SLB FLUSH PENDING OR COMPLETED BUFFERS? JMP F.30 GO FLUSH PENDING REQUEST BUFFERS. * SSB BY CLASS OR OWNER? JMP F.20 CLASS * CODE = 0, FLUSH OWNED AND COMPLETED CLASS BUFFERS LDA $CLTA,I CMA,INA STA TEMP2 COUNT OF CLASSES CLA JSB SETCA SETUP CLASS ENTRY ADDRS * F.10 ISZ CLSAD ADVANCE CLASS TABLE ISZ CLSA2 POINTERS LDA CLSA2,I GET OWNER ID CPA TEMP1 MATCH? JSB FL.BF YES, FLUSH IT ISZ TEMP2 JMP F.10 EXAMINE NEXT CLASS * F.EX ISZ $F.CL JMP $F.CL,I RETURN * * CODE = 1 FLUSH COMPLETED REQUEST BUFFERS & DEALLOCATE CLASS * F.20 JSB FL.BF FLUSH COMPLETED BUFFERS JMP F.EX & EXIT SKP * * FLUSH PENDING REQUESTS * F.30 CCA STA TEMP4 INITIALIZE "ACTIVE ABORT FLAG" LDB TEMP6,I GET ADDR OF 1ST ENTRY RBL,CLE,ERB CLEAR SIGN STB HEAD SAVE IT'S ADDRESS * F.32 SZB,RSS MORE ENTRIES? JMP F.60 NO LDA 1,I GET LINK TO NEXT STA TEMP5 STB PTR SAVE ADDR OF REQUEST BLOCK INB POINT TO CONWD LDA 1,I GET IT RAL SSA,SLA,RSS CLASS REQUEST? JMP F.35 NO, SKIP IT ADB .7 LDA 1,I GET CLASS WORD STA TEMP JSB SETCA SET-UP CLASS ENTRY ADDRS LDB $F.CL,I GET CALLING CODE SLB DOING IT BY CLASS? JMP F.40 YES LDA CLSA2,I GET 2ND WD OF CLASS ENTRY XOR TEMP1 TEST OWNER AND B377 SZA,RSS OWNER MATCH? JMP F.50 YES, GO FLUSH * F.35 LDB TEMP5 GET LINK TO NEXT RBL,CLE,ERB CLEAR SIGN JMP F.32 GO EXAMINE NEXT * F.40 LDA TEMP GET CLASS XOR TEMP1 AND B.017 SZA IS THIS THE FLUSHING CLASS? JMP F.35 NO * * DEALLOCATE THE PENDING REQUEST F.50 LDB PTR ADDR OF THIS REQUEST CPB HEAD IS THIS AT HEAD OF THE DVT? CLE,RSS YES JMP F.55 NO LDA TEMP6 ADDR OF DVT2 ADA .4 POINT TO DVT6 LDA 0,I GET "AV" FIELD CLE,SSA IS THIS DVT BUSY? JMP F.58 YES, WE'LL ABORT IT SHORTLY * F.55 JSB $UNLK UNLINK REQ FROM DVT INIT Q TEMP6 NOP LDA TEMP2 JSB $RTSM RTN SAM & CHK FOR BELOW B.L. JSB PENDG DECR.PENDING CNT, CHK FLUSH JMP F.35 EXAMINE NEXT * F.58 STB TEMP4 SET FLAG SO $ABRQ GETS CALLED JMP F.35 * F.60 LDB TEMP2 GET ADDRESS OF DVT ISZ TEMP4 ACTIVE ENTRY TO ABORT? JSB $ABRQ YES, THEN DO IT JMP F.EX SKP * * THIS SUBROUTINE FLUSHES COMPLETED CLASS BUFFERS, AND DEALLOCATES * THE CLASS IF PENDING COUNT IS ZERO, OTHERWISE THE FLUSH FLAG IS * SET. FL.BF NOP LDA CLSAD GET CLASS TBLE ADDR JSB $SCHD RESCHEDULE ANY WAITER OCT 52 LDA CLSAD,I GET 1ST WORD OF CLASS TABLE FL.B2 SSA MORE COMPLETED BUFFERS? JMP FL.B4 NO STA TEMP SAVE BLOCK ADDRESS LDB 0,I STB TEMP5 SAVE LINK WD OF BLOCK ADA .7 LDB 0,I GET BLOCK LENGTH OUT OF 8TH WD STB TMP8 * JSB $RTN RETURN SYSTEM AVAILABLE MEMORY TEMP NOP TMP8 NOP LDA TEMP5 GET LINK WD JMP FL.B2 ITERATE * FL.B4 STA CLSAD,I STORE CLASS WORD IN TABLE AND B377 ISOLATE PENDING COUNT CCE,SZA,RSS ANYTHING PENDING? JMP FL.B5 NO, DEALLOCATE CLASS NOW * LDA CLSA2,I GET 2ND WORD RAL,ERA SET FLUSH FLAG STA CLSA2,I IN 2ND WORD JMP FL.BF,I RETURN * FL.B5 JSB CLRCL CLEAR THE CLASS & SCHED WAITERS JMP FL.BF,I * CLSAD NOP CLSA2 NOP NEWCL NOP NEWC2 NOP SKP * * THIS ROUTINE CHECKS SECURITY CODE SECCK NOP AND B174C ISOLATE SEC.CODE CPA SECCD MATCH? JMP SECCK,I YES, RETURN * ERR00 CLB,RSS ILLEGAL CLASS# OR SECURITY CODE ERR04 LDB .4 ILLEGAL BUFFER ADDRESS ERRIO CLA STA NEWCL,I CLEAR-OUT IF NEW CLASS STA NEWC2,I WORD 2 ALSO LDA ERIO (A) = ASCII "IO" JMP $ERAB WRITE MESSAGE AND EXIT * ERIO ASC 1,IO ORG * LENGTH OF MODULE END