ASMB,L,R,C HED %INTR 91704-16103 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %INTR,1,3 91704-16103 REV A 760212 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 SPC 1 ********************************************* * *%INTR PROGRAM TO HANDLE DISTRIBUTED SYSTEM INTERUPTS * *SOURCE PART # 91704-18103 REV A * *REL PART # 91704-16103 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-21-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: DEC 1975 * ********************************************** SPC 1 * * PROGRAM SCHEDULED BY DVR65 ON AN INTERUPT * WILL BRANCH TO CORRECT ROUTINE DEPENDING ON * STREAM TYPE * * DEFINE EXTERNALS * EXT REPLA,EXEC,FRPLY EXT FINDT,TRFLG,MSTFL,MSTB EXT %MOVE,DBSY SPC 2 * * DEFINE ENTRIES * ENT %BUF * * DEFINE LISTING OPTIONS * SUP * * DEFINE A AND B REGS * A EQU 0 B EQU 1 * SPC 3 START ISZ DBSY SET INTERUPT PROG BUSY JSB EQLU GET LU SZA,RSS LU DEFINED? JMP RPERR NO...IGNORE INTERUPT STA LU JSB RREQ READ REQUEST LDA %BUF GET STREAM TYPE AND BIT14 GET REQ/REPLY FLAG STA TEMP SAVE FOR LATTER LDA %BUF GET STREAM AGAIN AND B377 AND KEEP ONLY THE STREAM TYPE STA %BUF SAVE WITH BIT 14 OFF STA B CHECK LIMITS ADB M10 CAN'T BE LARGER THAN 9 SSB SSA LDA D10 SET FOR STREAM ERROR LDB A GET STREAM AGAIN ADA BRNTA ADB BRNTB STB TEMP1 LDB TEMP SZB,RSS REPLY? LDA TEMP1 NO...REQUEST LDA A,I JMP A,I AND GO TO THE ROUTINE SPC 2 * * REPLY * BRNTA DEF *+1 DEF RFAR GET LU DEF RFAR DLIST DEF RFAR PROGRAM LOAD SAVE DEF RPERR PROGL...ERROR DEF PTPR PROGRAM TO PROGRAM REPLY DEF RFAR REMOTE EXEC REPLY DEF RFAR REMOTE RFA REPLY DEF RPERR OPERATOR COMMANDS...ERROR DEF RPERR FORCED DOWN LOAD...ERROR DEF RPERR UNDEFINED...ERROR DEF RPERR UNDEFINED...ERROR SPC 2 * * REQUEST * BRNTB DEF *+1 DEF GETLU GET LU DEF RERR DLIST DEF RERR PROGRAM LOAD SAVE DEF RERR PROGL DEF PTPR PROGRAM TO PROGRAM..REQUEST DEF REXEC REMOTE EXEC REQUEST DEF RERR FMGR REQUEST DEF RERR OPERATOR COMMANDS DEF RERR FORCED DOWN LOAD DEF RERR UNDEFINED DEF RERR UNDEFINED SPC 2 * * HERE ON RFA REPLY * RFAR LDA REPLA GET REPLY BUFFER ADDRESS STA REPLY SAVE ADDRESS LDA RREQ1 GET SOURCE ADDRESS LDB D35 GET LENGTH JSB %MOVE MOVE TO REPLY BUFFER AREA REPLY NOP REPLY BUFFER ADDRESS LDA LINST GET STATUS OF REQUEST STA FRPLY SET FOR COMPLETION...AND LENGTH JMP TERM TERMINATE ,INTR SPC 3 * * HERE ON GET LU REQUEST * GETLU LDA LU GET LU OF SERIAL INTERFACE STA REFCD SAVE FOR REPLY JSB SRPLY SEND REPLY JMP TERM AND TERMINATE SPC 3 * * HERE FOR PROGRAM TO PROGRAM COMUNICATION * PTPR LDA RREQ1 GET REPLY BUFFER ADDRESS ADA C2 GET TO FUNCTION CODE WORD LDA A,I GET FUNCTION CODE ALF,ALF WANT TO CHECK BIT 7 SSA IS IT A REPLY? JMP RFAR YES...TREAT LIKE RFA SPC 2 * * HERE FOR SLAVE PROGRAM TO PROGRAM ROUTINES * THIS ROUTINE USES FINDT TO GET THE TRAP # * AS SPECIFIED BY CENTRAL. THE TRAP IS THEN SET * AND THE PARMB IS MOVED INTO CORE RESIDENT LIBRARY * FOR LATTER AXCESS BY BASIC ROUTINES THAT HANDLE * SLAVE CALLS. * LDB RREQ1 GET BUFFER ADDRESS ADB C7 GET TO TRAP# LDA B,I GET TRAP# ALF,ALF GET 10'S DIGIT AND B17 MASK OFF THE ASC 60 STB TEMP SAVE ADDRESS OF LU MPY D10 MULTIPY BY 10 STA TEMP1 LDA TEMP,I GET TRAP # AGAIN AND B17 MASK OFF TO BINARY # ADA TEMP1 ALF,ALF GET IN CORRECT POSITON FOR FINDT JSB FINDT SEE IF TRAP ASSIGNED JMP TRPNT TRAP NOT THERE LDA B,I B REG POINTS TO TRAP ACTIVE WORD IOR BIT15 SET TRAP ACTIVE STA B,I SAVE TRAP ACTIVE STA TRFLG SET TRAP PENDING FLAG LDA MSTBA GET MASTER PARMB BUFFER ADDRESS JSB INDCK STA MSTBA CLEAR OFF INDIRECTS LDA RREQ1 GET SOURCE BUFFER ADDRESS LDB D35 GET PARMB LENGTH STB MSTFL SET LENGTH OF TRANSFER JSB %MOVE MOVE PARMB TO CORE RESIDENT LIB MSTBA DEF MSTB BUFFER ADDRESS OF MASTER PARMB AREA JMP TERM ALL DONE, TERMINATE SPC 1 * * HERE IF TRAP NOT SET...SEND A -41 ERROR * TO CENTRAL * TRPNT LDB RREQ1 GET TO STATUS WORD ADB C2 LDA B,I GET STATUS WORD IOR NTERR NOT THERE ERROR... BITS 15,7,2 STA B,I SAVE ERROR STATUS INB GET TO ERROR WORD LDA M41 GET -41 ERROR STA B,I SAVE ERROR JSB ENLIN CLEAR LINE IF REQUIRED JSB SRPLY AND SEND REPLY JMP TERM DONE...TERMINATE SPC 1 M41 DEC -41 SPC 4 * * HERE ON REMOTE EXEC CALLS * REXEC LDA RCOD GET REQUEST CODE XOR C3 REVERSE DIRECTION IF READ OR WRITE STA DDIR SAVE DIRECTION FLAG XOR C3 GET IT BACK TO NORMAL IOR BIT15 SET FOR SPECIAL EXEC REQ CODE STA RCOD SAVE REQUEST CODE XOR BIT15 STIP OFF BIT 15 FOR CHECK CPA C1 IS IT A READ? JMP REQ1 YES CPA C2 IS IT A WRITE? JMP REQ2 YES CPA C3 IS IT A CONTROL REQUEST? JMP REQ3 YES CPA D13 IS IT A STATUS REQUEST? JMP REQ13 YES CPA D10 IS IT A TRAP CALL? JMP REQ10 YES * * ILLEGAL EXEC CALL FOR THIS TERMINAL * JSB ENLIN CLEAR THE LINE IF REQUIRED DLD RQER "RQ " REQUEST ERROR SPC 1 * * HERE TO TERMINATE REMOTE EXEC CALLS * A AND B REG CONTAIN CORRECT STATUS * AS TO WHAT THE CENTRAL USER RECEIVES * REDN DST SABRG SAVE A AND B REG JSB SRPLY SEND REPLY JMP TERM AND TERMINATE SPC 2 * * HERE ON READ REQUEST * REQ1 LDA DLEN GET LENGTH OF DATA BUFFER SPC 2 * * HERE ON WRITE REQUEST * REQ2 EQU REQ1 SAME AS READ LDB DLEN GET IT AGAIN ADA MMDBS IS IT GREATER THAN MAX DATA BUF SIZE? SZA OR IS THERE A DATA BUFFER LENGTH SSA,RSS RSS ERROR JMP REQ22 NO ERROR JSB ENLIN CLEAR THE LINE DLD BFER "BF " BUFFER ERROR JMP REDN AND TERMINATE REQUEST * REQ22 LDA DDIR GET DIRECTION AGAIN CPA C2 IS IT A READ (REMEMBER WE INVERTED...) JSB RWEX YES...READ FROM DEVICE FIRST DST ABREG SAVE A AND B REG LDA DDIR GET DATA DIRECTION STA IRW LDA LU GET LU AND B77 KEEP ONLY LOW 6 BITS IOR B300 SET DATA ONLY CODE STA CNWD SAVE JSB EXEC READ OR WRITE TO OR FROM CENTRAL DEF *+7 DEF IRW REQUEST CODE DEF CNWD COONTROL DEF %DBUF DEF DLEN DEF %BUF+33 PASS TIME-TAGS DEF %BUF+34 LDA DDIR GET DIRECTION CLE,ERA SET DIRECTION INTO E REG DLD ABREG GET STATUS AGAIN SEZ IS IT A READ? JSB RWEX NO...WRITE...WRITE TO DEVICE JMP REDN ALL DONE SPC 2 * * HERE ON CONTROL REQUEST * REQ3 JSB EXEC ISSUE LOCAL CONTROL REQUEST DEF *+4 DEF RCOD DEF PRM1 DEF PRM2 NOP ALLOW FOR ERROR CONDITION JMP REDN AND TERMINATE SPC 2 * * HERE ON A TRAP CALL * REQ10 LDA PRM3 GET TRAP # ALF,ALF GET TENS DIGIT AND B17 MPY D10 GET TO TENS POSITION STA TEMP LDA PRM3 GET ONES DIGIT AND B17 IOR TEMP MERGE TENS AND ONES ALF,ALF GET IN CORRECT ORDER FOR CHECK JSB FINDT SEE IF TRAP AVAILABLE JMP TRPER NO...ERROR..NO TRAP...OR NOT IN RUN STATS LDA B,I B REG POINTS TO TRAP ACTIVE FLAG IOR BIT15 SET TRAP ACTIVE STA B,I SAVE TRAP ACTIVE STA TRFLG SET FOR TRAP PENDING CLA SET FOR ALL OK CLB JMP REDN DONE SPC 1 * * HERE IF TRAP ERROR OCCURED * TRPER DLD SC05 SEND ERROR BACK...SCHEDULE ERROR JMP REDN DONE SPC 2 * * HERE ON STATUS REQUEST * REQ13 JSB EXEC ISSUE LOCAL STATUS CALL DEF *+5 DEF RCOD DEF PRM1 DEF PRM1 RETURN STATUS GOES HERE DEF PRM2 OPTION RETURN GOES HERE NOP ALLOW FOR ERROR RETURN JMP REDN AND TERMINATE CALL SPC 3 * * SUBROUTINE TO READ OR WRITE DATA TO I-O DEVICE * CALLING SEQUENCE * JSB RWEX * RWEX NOP JSB EXEC DO THE EXEC CALL DEF *+7 DEF RCOD DEF PRM1 DEF %DBUF DEF PRM2 DEF PRM3 DEF PRM4 NOP INCASE OF ERROR JMP RWEX,I AND RETURN SPC 3 * * SUBROUTINE TO SEND STOP IF NEEDED AND REENABLE LISTEN * MODE * ENLIN NOP LDA LU GET LU OF SDI CARD AND B77 IOR B100 SET IN ENABLE LISTEN MODE BIT STA CNWD SAVE FOR CALL JSB EXEC MAKE THE CALL DEF *+3 DEF D3 CONTROL DEF CNWD LSTEN JMP ENLIN,I AND RETURN SPC 1 ENLN1 NOP SPC 3 * * SUBROUTINE TO SEND REPLY * SRPLY NOP LDA M10 GET ERROR COUNTER STA ERCNT LDA %BUF GET STREAM TYPE IOR B1411 SET IN REPLY FLAG & FRIENDLY BIT STA %BUF AND REPLACE IT * LDA LU AND B77 STA CNWD RETRY JSB EXEC DEF *+5 DEF D2I WRITE DEF CNWD REQUEST ONLY DEF %BUF DEF D35 JMP RTR1 ALLOW FOR ERROR RETURN JSB STAT CHECK STATUS RSS ERROR...TRY AGAIN JMP SRPLY,I AND RETURN RTR1 ISZ ERCNT MAX# OF TIMES? JMP RETRY NO JMP SRPLY,I YES SPC 1 ERCNT NOP * * HERE ON UNKNOWN STREAM ERROR * FOR REQUEST * RERR JSB ENLIN CLEAR LINE IF DATA DLD ILERR "ILRQ"...ERROR MESSAGE RETURNED DST %BUF+2 JSB SRPLY SEND ERROR REPLY JMP TERM AND TERMINATE SPC 2 * * HERE FOR UNKNOW STREAM ERROR * FOR REPLY * RPERR JSB ENLIN CLEAR LINE IF DATA JMP TERM IGNORE INTERUPT SPC 3 * * ROUTINE TO READ A REQUEST * RREQ NOP LDA LU AND B77 STA CNWD JSB EXEC DEF *+5 DEF D1I READ DEF CNWD REQ. ONLY RREQ1 DEF %BUF READ INTO REQUEST BUFFER DEF D35 35 WORDS JMP RPERR ERROR RETURN AND B377 STA LINST SAVE STATUS JSB STAT GO CHECK STATUS JMP RPERR READ ERROR...IGNORE INTERUPT JMP RREQ,I A REG= BUF ADD B= BUF LEN * * DO A STATUS CHECK * STAT NOP SLA ALL OK? ISZ STAT YES JMP STAT,I YES SPC 3 * * INDIRECT CHASE DOWN * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I SPC 3 * * HERE TO TERMINATE PROGRAM * TERM CLA TELL BASIC NOT BUSY STA DBSY JSB EXEC TERMINATE PROGRAM DEF *+2 DEF C6 SKP * * ROUTINE TO FIND THE LOGICAL UNIT NUMBER OF A DEVICE * GIVEN THE ADDRESS OF WORD 4 OF ITS EQUIPMENT TABLE * CALLED AS FOLLOWS: * * LDB EQT4 (PASSED FROM DVR00) * JSB EQLU * A = 0 IF NOT FOUND -OR- * A = THE LOGICAL UNIT NUMBER IF FOUND SUP EQLU NOP ENTRY STB EQT4 SAVE B-REG FOR LATER TEST CLA STA LUNUM SET LU POINTER NEXT LDA LUNUM GET CURRENT LU NUM-1 CPA LUMAX DONE THRU ALL LU'S JMP NTFND YES, NOT FOUND!! ISZ LUNUM BUMP TO CURRENT LU ADA DRT POINT TO TABLE ADDRESS LDA 0,I GET CONTENTS AND O77 MASK OF SUBCHANNEL BITS MPY D15 CALCULATE ADDRESS OF WORD 4 ADA EQTA BASE ADDRESS ADA DM12 SUBTRACK ONE EQT & ADD DEC 3 CPA EQT4 COMPARE?? JMP FOUND YES !! JMP NEXT NO, TRY NEXT ONE SPC 1 NTFND STB LUNUM NOT FOUND RETURN A=0 FOUND LDA LUNUM FOUND RETURN A= LU NUMBER DIV D10 CONVERT TO ASCII ALF,ALF POSITION MOST SIG. DIGIT ADB 0 MIRGE IN LEAST ADB ASC00 CONVERT TO ASCII LDA LUNUM RESTORE BINARY VALUE JMP EQLU,I RETURN SPC 1 EQT4 NOP LUNUM NOP O77 OCT 77 ASC00 ASC 1,00 D15 DEC 15 DM12 DEC -12 EQTA EQU 1650B DRT EQU 1652B LUMAX EQU 1653B SKP * * DEFINE CONSTANTS * LINST NOP LU NOP B100 OCT 100 C6 OCT 6 C2 OCT 2 C1 OCT 1 C3 OCT 3 C7 OCT 7 D10 DEC 10 D35 DEC 35 D13 DEC 13 B17 OCT 17 B77 OCT 77 B300 OCT 300 D3 DEC 3 D1I OCT 100001 D2I OCT 100002 M10 DEC -10 BIT14 OCT 40000 B1411 OCT 44000 NBT14 OCT 137777 BIT15 OCT 100000 NTERR OCT 100204 B377 OCT 377 CNWD NOP IRW NOP DUMMY NOP ABREG BSS 2 TEMP NOP TEMP1 NOP ILERR ASC 1,ILRQ RQER ASC 2,RQ BFER ASC 2,BF SC05 ASC 2,SC05 MDBS EQU 512 MAX DATA BUFFER SIZE MMDBS ABS -MDBS-1 SPC 1 . EQU * SID NOP BSS 1 REFCD NOP BSS 2 SABRG NOP RCOD NOP PRM1 NOP PRM2 NOP PRM3 NOP PRM4 NOP DLEN NOP DDIR NOP SPC 1 ORG . RESET TO MAKE SURE 35 WORD PRAMB %BUF BSS 35 SPC 1 %DBUF BSS MDBS LENGTH OF DATA BUFFER * END EQU * END START