ASMB,R,L,C,Q HED R$PN$ SESSION TERMINAL HANDLER (RESPONSE) * NAME: R$PN$ * SOURCE: 92067-18263 * RELOC: 92067-16260 * PGMR: G.A.A.,C.M.M.,G.L.M. * DATE: AUGUST 1,1974 * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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 R$PN$,131,5 92067-16260 REV.2001 791107 SUP PRESS EXTRANEOUS LISTING EXT EXEC,FNDLU,XLUEX,CAPCK,MESSS,$STH,DTACH,$DSCS EXT $LIBX,$LIBR,IDGET,.CLRB,IDDUP,$CVT1 EXT VSCBA,$PARS,SELUR,LUTRU * A EQU 0 B EQU 1 EQTA EQU 1650B * * SPC 2 R$PN$ EQU * ENTRY POINT,SCHED BY PRMPT JSB DTACH GET OUT OF A POSSIBLE SESSION DEF DTRTN DEF BUFF DUMMY BUFFER TO FORCE DTACH TO SYS-CON DTRTN EQU * * XLA $DSCS IF NOT SET UP SSA JMP TERM GO TERMINATE (FOR ACCTS) SPC 2 XLA $STH GET CLASS # SZA,RSS IF NO CLASS # JMP TERM JUST GO TERMINATE * * * AND C160K MASK OFF CLASS NO ONLY STA RQCLS & SAVE IT IOR B20K SET FOR SAVE CLASS STA CLAS$ & SAVE IT ! * JSB BUFF INITILIZE ID ADDS (NOP AFTER FIRST CALL) SPC 2 WAIT JSB EXEC CLASS I/O GET DEF W.1 DEF DS21 DEF CLAS$ RELEASE BUFFER DEF BUFF DEF DM80 DEF ISCB DEF ID DEF RCLAS W.1 EQU * RETURN POINT JMP TERM GO TERMINATE IF CLASS REQUEST ABORTS * LDA RCLAS RAR,SLA WAS THIS A READ RETURN? JMP WAIT NO, WAIT * STB IB SAVE XFER LOG CHARS LDB ID FETCH EQT 4 ADDRESS OR SHUTDOWN FLAG SSB IF SHUT-DOWN, (HE WANTS TO RETURN THE CLASS #) JMP TERM GO TERMINATE * * SPC 1 * SEE IF WE CAN WRITE TO THE LU W/O BEING SUSPENDED SPC 1 * * B=EQT 4 ADDRESS * JSB FNDLU FIND OUT IF DOWN,GET DEV TYPE AND RN BYPASS WORD DEF *+1 STA LU SEZ LU OR EQT DOWN? JMP ENAB2 YES SO FORGET IT * STX RN# SAVE POSSIBLE RN BYPASS WORD STY DVTYP SAVE DEVICE TYPE * LDA IB FETCH TRANS LOG SZA,RSS IF NOTHING PASSED JMP ENABL GO ENABLE TERM ( CLEAR BIT MAP ) * * * WRITES & READS TO THIS TERMINAL ARE OK . * * MAKE SURE THE SESSION STILL EXISTS * JSB VSCBA DEF V.RT DEF ISCB V.RT EQU * CPA LU MUST MATCH SESSION ID RSS IT'S OK JMP ENABL SESSION DOESN'T EXIST * * (A)= TERMINAL LU * JSB .CLRB GO CLEAR THE DISABLE BIT * SKP * * THE CAPCK ROUTINE DETERMINES IF THE SESSION MAY ISSUE THE * THE REQUESTED COMMAND. * IF OK, THE ASCII COMMAND IS RETURNED IN THE * A REG AND THE PARAMETER COUNT IS RETURNED IN B. * JSB CAPCK DEF CAP.1 DEF BUFF DEF IB DEF ISCB * CAP.1 CPA N1 IF COMMAND NOT DEFINED, RETURN "OP CODE ERR" JMP PROCS "OP CODE ERROR" LET MESSS RETURN ERROR SSB IF CAPABILITY IS INSUFFICIENT,RETURN "INSUF ERR" JMP PROCS "INSUFFICIENT CAPABILITY" LET MESSS RETURN ERROR STA CMND SAVE THE ASCII COMMAND STB PCNT SAVE PARAMETER COUNT * * * SPC 2 CPA "FL" (A)=ASCII CMND. FLUSH REQEST? JMP FL YES-FLUSH THIS LU'S BUFFER * CPA "BR" IF BREAK JMP BRPR GO DO BREAK * CPA "OF" IF ABORT JMP OFPR GO DO ABORT THING * CPA "WH" WHZAT CALL? JMP WHPR YES GO DO IT * CPA "HE" HELP REQUEST? JMP HEPR YES GO DO IT * CPA "TE" TELL OPERATOR REQUEST? JMP TECMD YES DO IT * CPA "SL" SESSION LU SWITCH REQUEST JMP SLCMD YES GO DO IT * CPA "RS" RESTART FMGR CMND ? JMP RSCMD * CPA "SS" SUSPEND REQUEST ? JMP SMART * CPA "GO" GO REQUEST ? JMP SMART * CPA "UP" UP REQUEST ? JMP SMAUP GO SEE IF WE CAN FIND AN EQT TO UP * * * * PROCS LDA BUFFR DEFINE LOCATION OF POSSIBLE ERROR STA SMES MESSAGE FROM SYSTEM * SPC 3 JSB MESSS DEF MES BUFFR DEF BUFF DEF IB DEF D1 SESSION TERM IS LU 1 DEF ISCB * * MES SZA,RSS ANY MESSAGE RETURNED ? JMP ENABL NO. * STA IA * * CLA CLEAR CON WORD STA CONWD * JSB XLUEX & DISPLAY DEF *+10 SYSTEM DEF D18 MESSAGE DEF LU SMES DEF BUFF DEF IA DEF LU DEF ID DEF RQCLS DEF NOP DEF RN# SPC 2 JMP ENABL NOW WAIT SPC 2 FL EQU * LDA DVTYP GET DEVICE TYPE CPA DVR07 IF ITS DVR07 JUST JMP WAIT? FORGET IT. * LDA B2300 SET UP CNWRD STA CONWD TO FLUSH JSB XLUEX PERFORM DEF *+10 I/O DEF D3 CONTROL DEF LU NOTE*** LU IS 2WD PARM--CONWD MUST BE WD2 DEF CONWD DEF RQCLS DEF NOP DEF NOP DEF NOP DEF NOP DEF RN# SPC 2 ENABL EQU * WAIT? LDA LU CLEAR THE ENAB2 JSB .CLRB DISABLE BIT IN BIT MAP * * JMP WAIT * * * * TERM JSB EXEC DEF *+2 DEF D6 TERMINATE WHILE IN SHUT-DOWN MODE * SKP * * * BREAK THE CURRENT SESSION PROGRAM * BRPR SZB IF ANY PARMS SUPPLIED JMP PROCS LET SYSTEM HANDLE * JSB GETID GET THE LOWEST ID SEGMENT JMP PROCS FMGLU NOT FOUND * BRSET JSB $LIBR GO PRIV NOP ADB D5 INDEX TO BRAKE LOCATION XLA B,I GET THE WORD IOR BIT12 SET THE FLAG XSA B,I RESET THE WORD JSB $LIBX GET OUT DEF *+1 DEF ENABL RE- ENABLE THE TERMINAL * * SPC 10 * * SPECIAL PROCESSING OF THE "SS" AND "GO" * SMART SZB IF ANY PARMS SUPPLIED JMP PROCS LET THE SYSTEM HANDLE IT * STA CMDCM SAVE THE COMMAND UNTIL WE FIND FMGXX JSB GETID FIND LAST SON OF FMGXX OR FMGXX JMP PROCS NOT FOUND--LET THE SYS RETURN ERROR * JSB MNAME GO MOVE THE PROG NAME INTO COMMAND BUFFER DLD CMDCM FETCH THE COMMAND (FOLLOWED BY ", ") DST BUFF DROP THEN INTO THE CMND BUFFER LDA D10 DEFINE COMMAND LENGTH STA IB JMP PROCS GO DO IT * * CMDCM ASC 2,XX, * SPC 10 * * ABORT THE CURRENT SESSION PROGRAM * * OFPR SZB IF ANY PARMS SUPPLIED JMP PROCS LET SYSTEM HANDLE IT * JSB GETID GET LOWEST ID JMP PROCS FMGLU NOT FOUND * SEZ,RSS IF IT IS FMGR JMP BRSET GO SET BREAK * JSB MNAME GO MOVE PROG NAME INTO COMMAND BUFFER * LDA COM1 FETCH ASCII ",1" STA BUF6 AND SET IT INTO THE REQUEST BUFFER LDA D12 REQUEST LENGTH=12 STA IB DLD ROF FETCH ASCII "OF, " DST BUFF AND COMPLETE OFF MESSAGE JMP PROCS SEND THE MESSAGE * * MNAME NOP ADB N3 XLA B,I GET NAME STA BUF3 INB STEP TO NAM 2 XLA B,I GET IT STA BUF4 INB XLA B,I NOW NAM 3 AND C377 IOR B40 ADD BLANK PAD STA BUF5 SET AS THIRD WORD OF NAME JMP MNAME,I SPC 5 * * * RUN THE "HELP" PROGRAM FOR THIS SESSION * * HEPR SZB IF ANY PARAMETERS PASSED JSB NXBT GO CLEAN UP INPUT BUFFER (RTNS B=CHAR CNT) LDA DRUHE FETCH DEF TO "RU,HELP " JMP CN.1 GO COMPLETE COMMAND * * DRUHE DEF RUHE RUHE ASC 4,RU,HELP * SPC 5 * * * * RUN WHZAT FOR THIS SESSION * * WHPR SZB IF ANY PARAMETERS PASSED, GO JSB NXBT CLEAN-UP INPUT BUFFER (RTNS B=CHAR COUNT) LDA DRUWH FETCH ADDR OF "RU,WHZAT" CN.1 ADB D8 WE ADDED 8 CHARACTERS STB IB SAVE FOR MESSS CALL LDB DAB FETCH ADDRESS OF INPUT BUFFER-4 STB SMES DEFINE NEW BUFFER FOR POSSIBLE RETURN MESSAGE MVW D4 MOVE THE "RU,----" IN * CN.2 LDA ISCB FETCH SCB ADDRESS SSA,RSS SET IT CMA,INA NEGATIVE TO SKIP CAPABILITY CHECKS STA ISCB IN MESSS LDA DOF STA SMES DEFINE POSSIBLE ERROR MSG LOCATION * JSB MESSS DO IT! DEF CN.3 DOF DEF OF DEF IB DEF D1 TERMINAL LU DEF ISCB APPEND IT TO THIS SESSION CN.3 JMP MES GO CHECK FOR RETURN MESSAGE * * DRUWH DEF *+1 ASC 4,RU,WHZAT "WH" ASC 1,WH "UP" ASC 2,UP, SPC 10 * * * * ISSUE MESSAGE TO SYSTEM CONSOLE * * * TECMD LDA IB FETCH CHAR COUNT CMA,INA SET IT NEG STA IB * JSB EXEC DEF TE.1 DEF D2 DEF D1 DEF BUFF DEF IB TE.1 EQU * JMP ENABL * * SPC 10 * RS COMMAND * * ABORT THEN RESTART FMGLU * * RSCMD JSB GETID GO BUILD "FMGLU" AND SEE IF IT EXISTS JMP NOPAW DOESN'T EXIST- GO BUILD ONE * XLA B,I FETCH STATUS AND D15 ISOLATE IT SZA IF NOT DORMANT, JMP OFPAW GO GET HIM ABORTED ADB D2 ADVANCE TO TIME LIST XLA B,I IF "T" BIT IS SET ALF,SLA HE IS IN THE TIME LIST RSS SO GO ABORT HIM JMP RPAW ELSE GO TURN HIM ON * * * ISSUE AN "OF,FMGLU,1" COMMAND * OFPAW LDA DROF FETCH SOURCE ADDRESS LDB BUFFR FETCH DEST ADDR MVW D6 MOVE COMMAND INTO BUFFER LDA D12 SET COMMAND STA IB LENGTH AT 12 * JSB MESSS DEF RPAW DEF BUFF DEF IB * RPAW LDA DROF FETCH SOURCE ADDR AGAIN LDB DAB FETCH DEST ADDR MVW D6 MOVE "OF, FMGLU ,1" INTO BUF LDA D12 SET COMMAND LENGTH STA IB AT 16 LDA "RU" REPLACE "OF" STA OF WITH "RU" JMP CN.2 GO COMPLETE COMMAND * * * * ATTEMPT DUP OF REAL FMGR * * NOPAW JSB IDDUP DEF DUP1 DEF FMGR DEF PNAM DUP1 SZA ANY ERRORS ? JMP NOIDS YES, MUST BE OUT OF ID SEGMENTS * JSB GETID GO GET FMGLU'S ID ADDR JMP ENABL SHOULD NEVER GET HERE, BUT ! ADB D16 ADVANCE TO ID WD 32 (OWNER FLAG) JSB $LIBR NOP GO PRIV XLA B,I FETCH ID 32 AND NOWNR REMOVE OWNER FLAG IOR LU ADD THE CORRECT VALUE XSA B,I RESTORE THE WORD JSB $LIBX DEF *+1 DEF RPAW GO RUN THE LITTLE GUY * * NOWNR OCT 177400 * * MUST BE OUT OF ID'S * * NOIDS CLA STA CONWD CLEAR CONTROL WORD JSB XLUEX DEF DUP2 DEF D2 WRITE DEF LU NOTE: 2 WORD PARM DEF NOID MESSAGE BUF DEF D9 DUP2 JMP ENABL * * NOID ASC 9,R$PN$\ NO FREE ID * * SPC 5 * * * SUBROUTINE GETID * * RETURNS ADDRESS OF ID STATUS WORD OF LOWEST SON OF FMGXX * IN (B) REGISTER. NOTE: THIS ROUTINE WILL NOT RETURN THE * ADDRESS OF D.RTR OR SMP UNLESS THE CURRENT COMMAND IS A * "UP" COMMAND. THIS IS BECAUSE YOU SHOULD NEVER ABORT * EITHER OF THOSE PROGRAMS. * * * GETID NOP SUBROUTINE TO TRACK DOWN THE LOWEST ID LDA LU CONVERT THE LU INTO CLB THIS GUY'S DIV D10 FMGXX IOR "G0" FORM 'GX' PART OF FMGXX STA PNAM+1 SET IT ADB NUL0 ADJUST LOW X TO ASCII BLF,BLF ROTATE IT STB PNAM+2 SET LOW X IN HIGH PART OF WORD 3 JSB IDGET GET THE ID ADDRESS DEF *+2 DEF PNAM OF THIS FMGR SEZ GET ONE?? JMP GETID,I NO RETURN TO CALLER * ISZ GETID * NXSON STA B SET IN B AND STB IA SET IN IA ADB D15 INDEX TO THE STATUS XLA B,I GET IT TO A ALF,SLA WAITING FOR A SON?? JMP TRK YES TRACK DOWN * JMP GETID,I NO THIS IS IT * TRK ISZ IA SET TO PICK UP SON'S ID STB TMP1 SAVE ID STAT ADDR XLA IA,I GET THE SON'S ID TO (A) LDB CMND IF WE ARE PROCESSING CPB "UP" AN "UP" COMMAND JMP OKD. SKIP D.RTR & SMP CHECKS. LDB TMP1 RESTORE ID STAT ADDR * CPA D.RTR IF D.RTR OR JMP GETID,I * CPA SMP SMP THEN STOP JMP GETID,I HERE * OKD. CCE SET E TO SHOW NOT FIRST ONE LDB TMP1 RESTORE ID STAT ADDR JMP NXSON GO GET IT * * * * SPC 10 * * COMMANDS WHICH PASS PARAMETERS TO OTHER PROGRAMS (HE & WH) * COME HERE. * * * CLEAN UP INPUT BUFFER -- EATS EVERYTHING BEFORE THE FIRST "," * * NXBT NOP CLA RESET CHARACTER STA CCNT COUNT LDA IB SET CHAR CMA,INA COUNT NEGATIVE STA TMP3 * LDB BBUF FETCH BYTE ADDR OF INPUT BUFFER STB TMP1 STB TMP2 RESULT GOES INTO SAME BUFFER * NXB LBT GET CHAR CPA COMMA CHECK FOR "," JMP NXB2 ISZ TMP3 BUMP CHAR COUNT NOP SHOULD NEVER SKIP, BUT ....... JMP NXB GET NEXT ONE * NXB2 STB TMP1 UPDATE SOURCE POINTER LDB TMP2 FETCH DESTINATION POINTER SBT STORE THE BYTE ISZ CCNT BUMP FOUND CHAR COUNT STB TMP2 UPDATE DEST POINTER LDB TMP1 RESTORE SOURCE POINTER LBT FETCH NEXT POSSIBLE BYTE ISZ TMP3 BUMP CHAR COUNT JMP NXB2 GO GET NEXT CHAR * LDB CCNT FETCH COUNT OF CHARS JMP NXBT,I SPC 5 * * SL COMMAND PROCESSING * * B = PARM COUNT * SLCMD SZB,RSS IF NO PARMS JMP ALL DO ALL OF THEM CPB D1 IF MORE THAN ONE PARM JMP SL.1 DO JUST THAT ONE * INER LDA DINER FETCH ADDR OF ERROR BUFFER STA SMES LDA D6 FETCH LENGTH JMP MES GO ISSUE ERROR AND GET OUT * * * SL.1 CXA FETCH ADDRESS OF FIRST PARM LDB D6 SIX CHARS MAX JSB $PARS GO GET THE SESSION LU DEF OF * LDA FSLU FETCH PARM TYPE FLAG SLA,RSS IF NOT NUMERIC JMP INER INPUT ERROR * LDA SLU FETCH LU PARM SSA IF NEGATIVE JMP INER INPUT ERROR ! * * JSB ISSUE JMP ENABL * ALL CLA,INA SET START LU STA SLU LDA DM63 SET BOUND ON SCAN STA TMP1 NXLU JSB LUTRU SEE IF THIS ON IS DEFINED DEF NX.1 DEF SLU DEF TMP2 DUMMY DEF ISCB USE THIS SCB NX.1 EQU * SSA,RSS IF DEFINED JSB ISSUE GO ISSUE THE MESSAGE ISZ SLU BUMP LU # ISZ TMP1 SCAN COUNTER JMP NXLU GO DO THE NEXT ONE JMP ENABL ALL DONE ! * * * ISSUE NOP JSB SELUR GO FORMAT MESSAGE DEF SY.1 DEF SLU DEF BUFF PLACE MESSAGE HERE DEF ISCB SY.1 EQU * * STA IB SAVE MESSAGE LENGTH CLA STA CONWD JSB XLUEX ISSUE MESSAGE DEF SY.2 DEF D18 DEF LU DEF BUFF DEF IB DEF NOP DEF NOP DEF RQCLS DEF NOP DEF RN# SY.2 EQU * JMP ISSUE,I * * * DINER DEF INE INE ASC 6,INPUT ERROR SKP * ** UP COMMAND PROCESSING * SMAUP SZB,RSS IF ANY PARMS SUPPLIED, DO STD THING, ELSE JSB GETID GO FIND ID ADDR OF "CURRENT" PROG JMP PROCS NOT FOUND - LET SYS GIVE ERROR * XLA B,I THE PROG MUST BE IN AND D15 STATE 3 CPA D3 OR NOTHING WE CAN DO. RSS JMP PROCS LET SYSTEM RETURN ERROR * ADB DM14 BACK UP TO XTEMP1 XLA B,I AND FETCH IT. CPA D4 IF THIS GUY IS WAITING ON A DOWN DEVICE INB,RSS ADVANCE TO XTEMP2 JMP PROCS ELSE BAIL OUT. * XLA B,I FETCH EQT/LU INFO SSA IF XTMP2 < 0 THEN JMP EQT IT IS A NEG EQT ADDR * INB ELSE EQT# IS IN XTMP3 XLA B,I SO FETCH IT CONEQ CCE JSB $CVT1 GET ASCII EQT# STA BUFF+2 AND SAVE DLD "UP" GET ASCII "UP, " DST BUFF AND DROP THEM IN COMMAND BUFFER LDA D6 SET UP COMMAND LENGTH STA IB JMP PROCS GO DO IT * * * * CONVERT EQT ADDR TO EQT # FOR UP COMMAND * EQT CMA,INA SET EQT ADDR POSITIVE LDB EQTA FETCH START ADDR OF EQTS CMB,INB ADA B GET OFFSET TO OUR EQT CLB DIV D15 INA COUNTS FROM 1, NOT 0 JMP CONEQ * SKP "RU" ASC 1,RU "RS" ASC 1,RS "BR" ASC 1,BR "SL" ASC 1,SL "TE" ASC 1,TE "HE" ASC 1,HE "G0" ASC 1,G0 "GO" ASC 1,GO "SS" ASC 1,SS "OF" ASC 1,OF ****************************************** ROF ASC 2,OF, * PNAM ASC 3,FMGXX CURRENT MASTER FMGR * COM1 ASC 1,,1 * ****************************************** DROF DEF ROF BIT12 OCT 10000 D10 DEC 10 SMP NOP ADDRESS OF SMP'S ID D.RTR NOP ADDRESS OF D.RTR'S ID D5 DEC 5 B40 CLE C377 OCT 177400 COMPLEMENT OF 377B D15 DEC 15 N3 DEC -3 NUL0 ASC 1, 0 * FMGR ASC 3,FMGR CCNT NOP COMMA OCT 54 BBUF DBL BUFF IA NOP IB NOP ID NOP D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D6 DEC 6 D8 DEC 8 D9 DEC 9 D12 DEC 12 D16 DEC 16 C160K OCT 17777 KEEP BITS 0-12 DM80 DEC -80 DM14 DEC -14 DM63 DEC -63 DAB DEF OF * ***********************MUST BE AT LEAST 33 WORDS LONG****** * OF BSS 2 DON'T MOVE THE NEXT 4 WORDS NAM1 NOP NAM2 NOP BUFF BSS 40 MUST FOLLOW THE OF, CODE TMP1 NOP MUST FOLLOW BUFF TMP2 NOP MUST FOLLOW BUFF TMP3 NOP MUST FOLLOW BUFF * ************************************************************* * SLU EQU OF+1 FSLU EQU OF BUF3 EQU BUFF+2 BUF4 EQU BUFF+3 BUF5 EQU BUFF+4 BUF6 EQU BUFF+5 ORG BUFF NOP INIT SUB. NEEDED ONLY ONCE JSB IDGET GET D.RTR'S ID DEF *+2 DEF D. SEZ CLA IF NONE SET TO ZERO STA D.RTR SAVE IT JSB IDGET NOW GET SMP'S DEF *+2 DEF SM SEZ IF NONE CLA USE ZERO STA SMP CCB GET THE CALL TO HERE ADB BUFF AND CLA CLEAR STA B,I IT JMP BUFF,I RETURN * SM ASC 3,SMP D. ASC 3,D.RTR * LEFT EQU BUFF+26-* ERROR IF NEGATIVE ORR OUT OF THE BUFFER D18 DEC 18 RN# NOP RCLAS NOP "FL" ASC 1,FL *************** LU NOP CONWD NOP *************** B2300 OCT 2300 DVR07 OCT 3400 NOP NOP DVTYP NOP B20K OCT 20000 RQCLS NOP CLAS$ NOP CMND NOP PCNT NOP ISCB NOP N1 DEC -1 DS21 OCT 100025 EOP EQU * SPC 2 END R$PN$