ASMB,R,L,C HED PTOPM 91700-16124 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM PTOPM,2,30 91700-16124 REV A 760209 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. 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. * ****************************************************************** SPC 2 ENT PTOPM EXT EXEC EXT RNRQ EXT D65CL IFZ EXT DBUG XIF SPC 5 * * PTOPM * SOURCE:91700-18124 * BINARY:91700-16124 * SHANE DICKEY * JULY 30,1974 * * MODIFIED NOV 1975 BY CHUCK WHELAN * * * Z OPTION INCLUDES DEBUG PACKAGE PTOPM NOP * * START LDA B,I IS P1=I/O CLASS IFZ SZA,RSS IF ZERO-INITIALIZE CALL-SET UP JMP *+3 AND TERMINATE- IF REAL LSTEN XIF STA ICLAS SCHEDULE--SET UP GET AND DO IT IFZ JMP GET * JSB DBUG SET UP DBUG DEF *+1 * JSB EXEC SAVE RESOURCES AND TERMINATE DEF *+4 DEF D6 DEF ZERO DEF D1 * JMP START LSTEN CALL STARTS HERE XIF * * ISSUE GET ON I/O CLASS * GET JSB DOGET SUSPEND IN CLASS GET UNTIL REQ. RCVD ICLAS DEC 4 NOP LDA IRBUF+2 SET PARMB REPLY FLAG FOR LATER RETURN IOR MSK5 STA IRBUF+2 * * IS THIS A NEW REQUEST OR AN ACCEPT/REJECT * ON A PREVIOUS ONE? AND B1400 SAVE ONLY THE FLAG FIELD SZA NEW REQUEST? JMP ACREJ NO, POFF/FINISH LDA IRBUF+2 YES AND D7 ADA CODEA ADD ADDRESS OF PROCESS TABLES JMP A,I AND GO DO IT * ALL INCOMING NEW PROG/PROG OPEN REQUESTS * REQUESTS ARE PROCESSED HERE * OPEN REQUESTS CONSIST OF THREE BASIC STEPS TO PROCESS * THESE ARE : * 1) FIND CURRENT LIST SLOT FOR ENTRY(NEW SLOT OR EXISTING ONE) * THEN SET UP C.L. SLOT * 2)UPDATE THE PARMB TO REFLECT THE C.L. SLOT USED * 3) SCHEDULE PROGRAM TO RECEIVE REQUEST * OPEN REQUESTS ARE OF TWO TYPES:PREVIOUSLY EXISTING * AND NEW REQUESTS. THE FIRST OF THESE IS PROCESSED * BEGINNING AT THE LABEL "FOUND" AND THE OTHERS ARE * PROCESSED STARTING WITH THE CODE LOCATED AT * NOTFD (NOT FOUND) * FIRST THE CURRENT LIST MUST BE SEARCHED TO SEE IF * THE REQUESTING PROGRAM NETWORD HAS BEEN EXTABLISHED * (OR FOUND) OPENP JSB SERCL IS THIS AN EXISTING HOOKUP JMP NOTFD NO-NOT FOUND-SET UP NEW ONE * * SET UP THE"FORM B"OF THE PARMB AND PASS IT ON TO THE USER JSB BPARM REPLACE NAME WITH I.D. WORDS * NOTE THAT THE SYSTEM WILL ONLY SCHEDULE A CENTRAL USER * ONCE I.E. WHEN THE 1ST SATELLITE OPEN IS RECEIVED * IF THE CENTRAL USER TERMINATES WITHOUT * ISSUING A FINIS CALL * SYSTEM BUFFER SPACE WILL EVENTUALLY BE FILLED * BY INCOMING SATELLITE MASTER REQUESTS * JMP GET * * * NEW PTOP USERS SET UP HERE * * * * GET SLOT IN CURRENT LIST NOTFD CLA,INA STA PRID# INITIALIZE PROGRAM ID# TO 1 * SEARCH FOR EMPTY ENTRY IN CURRENT LIST LDA CRLSA STARTING TABLE ADDR GET1 LDB 0,I CPB M1 JMP ERMT ERROR IF TABLE FULL SZB,RSS JMP *+4 IF 1ST IS ZERO, THIS ENTRY IS FREE ADA D4 POINT TO NEXT ISZ PRID# INCREMENT PROGRAM ID # JMP GET1 TRY NEXT STA ADDR3 SAVE ADDRESS OF THIS ENTRY ADA D2 LDB NNAME+2 STB A,I INA STA CLSAD ADDR OF CLASS # IN TABLE DLD NNAME ADDR3 EQU *+1 DST * MOVE 1ST 2 WORDS OF NAME LDA B13 GET "NEW CLASS" CLASS WORD STA CLSAD,I TO SET UP CALL * JSB EXEC GET THE I O CLASS NUMBER DEF *+8 BY GETTING AN I-O CLASS DEF D20 DEF ZERO DEF IRBUF DEF D1 DEF D1 DEF D1 CLSAD NOP SZA HOW WAS THE ALLOCATION ? JMP ERMS BAD, ERROR EXIT * CLEAR REQUEST LDA CLSAD,I STA *+2 JSB DOGET THE PREVIOUS WRITE READ LEFT NOP A DUMMY REQUEST IN THE CLASS, CLR IT. NOP IGNORE ABORT CONDITION JSB BPARM * * SCHEDULE THE PROGRAM JSB EXEC DEF *+4 SCHEDULE REQUESTED PROGRAM DEF D10SB WITHOUT WAIT & PASS IT DEF ADDR3,I IT'S I/O CLASS AS PARAMETER DEF CLSAD,I P1 * * THE PROGRAM MUST BE IN THE DORMANT LIST OR * AN ERROR EXISTS JMP REMER ERROR RETURN-RTE TRIED TO ABORT US SZA,RSS IN DORMANT LIST? JMP GET YES CLA,RSS REMER CLA,INA FLG ERROR STA TEMP INITIALIZE ERROR FLAG * REMOVE CLASS REQUEST WITH A GET CLA CLEAR THE ENTRY IN STA ADDR3,I THE CURRENT LIST LDA CLSAD,I TAKE OFF "DONT DEALLOCATE" BIT AND MSK8 STA UCLA2 * JSB DOGET CLEAR THE UNUSED REQUEST FROM THE UCLA2 NOP I/O CLASS ESTABLISHED * ISZ TEMP WOULD HAVE ABORTED LDB M43 LDA TEMP ABORT ERROR? SZA ADB D2 YES, ERROR -41 JMP ERR PROCESS THE ERROR * * PLIST JSB EXEC WRITE DIRECTORY TO DISC IN LOCN PASSED DEF *+7 DEF D2 DEF IRBUF+1 DISC LU DEF CRLST DIRECTORY ADDRESS DEF D81 DIRECTORY LENGTH DEF IRBUF TRACK ADDRESS DEF IRBUF+3 SECTOR ADDRESS * JSB RNRQ NOW START UP REMAT BY CLEARING RN # DEF *+4 DEF D4 DEF IRBUF+4 DEF IRBUF+5 JMP GET HED ACEPT/REJCT PROC. * (C) HEWLETT-PACKARD CO. 1976 * * HANDLE SLAVE OFF AND FINISH REQUESTS HERE * ACREJ LDA IRBUF+2 AND MSK4 MASK OUT THE REST OF THE PARMB CPA D10 JMP POFF HANDLE SLAVE OFF CPA D9 RSS JMP ER103 UNRECOGNIZED * FINIT JSB SERCL IS PROGRAM IN CURRENT LIST? JMP GET NO, NOT DEFINED JSB FINIS CLEAN OUT ENTRY IN CURRENT LIST JMP GET * * CLEAR ENTRY OUT OF CURRENT LIST, AND ABORT PROGRAM IF IT'S HANGING * ON THE CLASS SO THE CLASS NUMBER CAN BE DEALLOCATED. * FINIS NOP STB ADDR3 SAVE ADDR OF NAME * * NOW CLEAR ALL REQUESTS FROM THE I/O CLASS * (ONE AT A TIME) AND CAUSE IT TO BE RELEASED * LDA CLSAD,I GET CLASS NUMBER IOR B1315 SET BIT 13 & 15 IN CLASS WORD STA TEMP THEN SAVE FOR CALL STA CLFLG SET CLASS CLEAR FLAG NON-ZERO * NXGET JSB DOGET GET REQUEST TEMP NOP JMP ABTIT FIRST, PGM MUST BE TERMINATED * CLB CPB CLFLG RELEASE PROCESSING COMPLETE? JMP FIEND YES INA,SZA ALL PENDING REQUESTS CLEARED? JMP NXGET NO, CLEAR MORE STA CLFLG SET FOR ONE MORE LDA TEMP AND MSK8 CLEAR NO DE-ALLOCATE FLAG STA TEMP JMP NXGET * * ABORT USER PROGRAM ABTIT JSB EXEC TERMINATE PROGRAM DEF *+3 DEF D6N DEF ADDR3,I CLB,RSS GET OUT IF WOULD HAVE ABORTED JMP NXGET NOW RELEASE CLASS # * FIEND STB ADDR3,I CLEAR ENTRY IN PTOPM'S LIST JMP FINIS,I & EXIT SPC 5 POFF LDA NNAME PICK UP ENTRY TO BE CLEARED SZA CLEAR ENTIRE TABLE? JMP FINIT NO, CLEAR INDICATED ENTRY LDB CRLS3 POINTER TO CLASS #S LOOP STB CLSAD ADB M3 POINT TO NAME LDA 1,I GET 1ST WORD OF ENTRY CPA M1 END OF TABLE? JMP GET YES SZA SKIP IF THIS SLOT IS EMPTY JSB FINIS OTHERWISE CLEAR & TERMINATE IT LDB CLSAD ADB D4 POINT TO NEXT CLASS # JMP LOOP AND RETURN FOR MORE * * PROCESS ERRORS AND ABNORMAL CONDITIONS HERE * THE B REGISTER CONTAINS THE DETECTED ERROR CODE * RECOGNIZED ERROR CONDITIONS * -42 CURRENT LIST FULL-NO ROOM-RETRY * -43 PROGRAM NOT IN DORMANT LIST * -103 ID#'S IN PARMB OFF OR F.CDE PR PROG ID#,OR SAT#,OR CLASS# * FROM VALCK IN ERROR * FORMAT RETURN PARMB * PUT ERROR CODE IN THE PARMB * * * ERMS CLA STA ADDR3,I CLEAR ENTRY IN CURRENT LIST * ERMT LDB M42 RSS * ER103 LDB M103 ILLEGAL PCB ERR STB IRBUF+3 STORE ERROR WORD * HERE WE CLEAR THE DRIVER TO GET RID OF DATA LDA IRBUF+24 AND MSK9 STA TEMP * JSB D65CL SEND STOP DEF *+7 DEF IRC CONTROL REQUEST DEF TEMP CONWORD (=LU) DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY * JSB ERR1 ERROR RETURN * LDA IRBUF+24 AND MSK9 STA IRBUF+24 CLEAR ALL BUT LU * LDA IRBUF IOR BTRPY SET REPLY & FRIENDLY BITS STA IRBUF INTO STREAM WORD * JSB D65CL SEND THE REPLY DEF *+7 DEF IRWW DEF IRBUF+24 REQ ONLY DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY * JSB ERR1 ERROR RETURN JMP GET * NOTE: IF PARMB WORD #4 IS RETURNED NON-ZERO * (ERROR CONDITION) THE FLAG FIELD (WORD 2), TAG FIELD, * AND PROGRAM NAME FIELD WILL NOT BE RELIABLE SPC 5 ERR1 NOP DST SAVAB SAVE ERROR CODE FROM A AND B REG. JSB EXEC OUTPUT ERROR MESSAGE DEF *+5 DEF D2 DEF D1 DEF MESS DEF MESSL * JMP ERR1,I RETURN SPC 5 * THIS SUBROUTINE SET'S UP THE PARMB IN A MODIFIED * B FORMAT SO THAT IT'S ENTRY CAN BE FOUND WHEN IT * COMES BACK ACCEPTED OR REJECTED FROM THE USER SUBROUTINE * MODIFY PARMB TO REFLECT C.L. INFORMATION BPARM NOP LDB PRID# PICK UP ID# PREVIOUSLY BUILT STB IRBUF+5 AND SAVE IT IN PARMB LDB CLSAD,I PICK UP USER I/O CLASS STB IRBUF+6 & PUT IN PARMB JSB BLATZ SEND PARMB JMP BPARM,I SPC 5 * VERIFY THAT A READ, WRITE, OR CLOSE REQUEST * IS BEING ISSUED ON A VALID TERMINAL PREVIOUSLY * OPENED AND KNOWN TO THE MONITOR AND IF OK PASS IT TO THE PGM READP LDA IRBUF+5 PICK UP PROG IO # AND MSK3 MASK ALL BUT LOW ORDER 3 BYTE SZA IS I.D. ZERO? ADA M21 GREATER THAN 20? SSA,RSS JMP ER103 ERROR IF YES * THE PROGRAM ID IS IN THE RIGHT RANGE-NO FURTHER CHECKING CAN BE * DONE ON IT * NOW CHECK THE REQUESTED I/O CLASS-IT MUST MATCH ADA D20 THE CURRENT LIST INDEX ALS,ALS CONVERT TO CURRENT LIST ADDRESS ADA CRLSA AND SAVE IN STA ADDR3 * ADA D3 NOW STEP TO THE CLASS WORD STA CLSAD SAVE ADDR OF CLASS # LDA 0,I GET CLASS # LDB M44 PICK UP ERROR CODE CPA NNAME+1 DO THEY MATCH ? CLA,RSS JMP ERR NO- AN ERROR EXISTS * THE PROG ID # AND I/O CLASS APPEAR ALL RIGHT CPA ADDR3,I HAS ENTRY BEEN DELETED? JMP ERR YES REJECT REQUEST JSB BLATZ SEND PARMB JMP GET SPC 5 BLATZ NOP JSB EXEC DO A WRITE READ TO DEF *+8 PASS REQUEST ON DEF D20 TO THE USER FOR HIS DEF ZERO NEXT GET DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY DEF CLSAD,I JMP BLATZ,I SPC 5 * * DO A CLASS I/O GET * DOGET NOP JSB EXEC DEF *+5 DEF D21N DEF DOGET,I CLASS # DEF IRBUF DEF IRBFL RSS SKIP IF WE COULD HAVE ABORTED ISZ DOGET ELSE RETURN TO P+2 ISZ DOGET JMP DOGET,I RETURN * * THIS SUBROUTINE SEARCHES THE CURRENT LIST * ON RETURN * B REGISTER POINTS TO THE START OF THE MATCHING * CURRENT LIST ENTRY * (NORMAL RETURN ONLY) * NORMAL RETURN (P+2) * ERROR RETURN (P+1) * * * THE CURRENT LIST WILL NOW BE SEARCHED FOR * A MATCH UNTIL A -1 IS ENCOUNTERED (END OF TABLE) * * SERCL NOP CLB STB PRID# INITIALIZE PROGRAM ID# LDB CRLSA LOOP1 ISZ PRID# LDA B,I CPA M1 JMP SERCL,I NOT FOUND * THIS IS A VALID ENTRY SO CHECK NAME & THEN LU CPA NNAME INB,RSS JMP LOOP7+1 LDA 1,I CPA NNAME+1 INB,RSS JMP LOOP7 LDA 1,I CPA NNAME+2 JMP DUN FOUND ONE ADB M1 LOOP7 ADB M1 ADB D4 JMP LOOP1 * DUN INB STB CLSAD SAVE ADDR OF CLASS # ADB M3 B POINTS TO ENTRY IN CURRENT LIST ISZ SERCL JMP SERCL,I HED CONSTANTS AND VARIABLES * (C) HEWLETT-PACKARD CO. 1976 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D6 DEC 6 D7 DEC 7 D9 DEC 9 D10 DEC 10 D20 DEC 20 B1400 OCT 140000 CRLSA DEF CRLST ADDR OF CURRENT LIST TABLE CRLS3 DEF CRLST+3 ADDR OF CLASS # IN 1ST ENTRY CODEA DEF CODES,I CODES DEF ER103 DEF OPENP DEF READP DEF READP DEF READP DEF PLIST DEF FINIT DEF ER103 IRBFL DEC 35 REQUEST BUFFER LENGTH B13 OCT 020000 BTRPY OCT 044000 B1315 OCT 120000 MSK4 OCT 17 D81 DEC 81 M1 DEC -1 M3 DEC -3 M21 DEC -21 MESSL DEC -30 M42 DEC -42 M43 DEC -43 M44 DEC -44 M103 DEC -103 MSK3 OCT 377 MSK5 OCT 200 MSK8 OCT 157777 MSK9 OCT 77 CLFLG NOP DUMMY OCT 0 D6N OCT 100006 D21N OCT 100025 OP CODE FOR CLASS I/O GET (NO ABORT) IRC OCT 100003 STOP CODE IRWW OCT 100002 WRITE CODE D10SB OCT 100012 PRID# NOP * IRBUF REP 5 OCT 0 NNAME REP 3 OCT 0 REP 27 OCT 0 A EQU 0 B EQU 1 ZERO OCT 0 MESS ASC 12,COMM ERROR OUTPUT-PTOPM ASC 1, SAVAB OCT 0,0 * * 20 ENTRIES OF 4 WORDS EACH IN THE CURRENT LIST * * EACH ENTRY CONTAINS: * WORDS 1-3 = PROGRAM NAME * WORD 4 = ASSIGNED I/O CLASS * CRLST BSS 80 INITIALLY ALL ZEROES UNL CRLST REP 80 NOP LST DEC -1 DELIMITER, DON'T REMOVE END PTOPM