* * SKP * * ******************************* *** *** *** TIME-SHARE DRIVER *** *** CONTINUATOR SECTION *** *** *** ******************************* * * * DRIV NOP * * CHECK I/O FLAG * LDB IOFLG LOAD I/O FLAG SLB CHECK IF INPUT JMP INPUT YES - GO TO INPUT SECTION * * *** OUTPUT SECTION *** * * LDA CHIN TEST FOR STOP COMMAND INA COMPUTE ADDRESS OF LIA INSTR LDA A,I LOAD LIA INSTRUCTION STA INST. STORE FOR EXECUTION INST. NOP EXECUTE LIA CHANXX AND M177 MASK TO LOWER 7-BITS CPA RBOUT IS IT A RUBOUT JMP OK YES JMP STOP SET STOP FLAG OK LDA NCNT SSA,RSS CHECK IF DONE JMP OT1 YES LDB BUFAD CHECK BUFFER ADDRESS SZB,RSS IS IT ZERO? JMP LEADR YES OT5 JSB ACCHR GET NEXT CHARACTER IOR M200 ADD PARITY LDB IOFLG LOAD I/O FLAG JSB CHOUT,I OUTPUT CHARACTER JMP DRIV,I RETURN * * CHECK FOR CR-LF * OT1 LDA OCNT GET ORIGINAL COUNTER SSA CHECK IF CR-LF JMP OT2 NO - DONE LDA M4 LOAD -4 CHARACTERS LDB CRLFA LOAD CARRIAGE RETURN LINE FEED STA OCNT SAVE COUNT STA NCNT SAVE NEGATIVE COUNTER STB BUFAD SAVE BUFFER CLA CLEAR POSITIVE COUNTER STA PCNT JMP OT5 OUTPUT * OT2 LDA M15 LOAD BIT 15=1 STA DATA SET DATA OUT FLAG JSB CLC,I JMP DRIV,I * * *** SET STOP FLAG * STOP LDA STPIN LOAD STOP INHIBIT SZA INHIBITED? JMP OK YES JSB CLEAR CLEAR USER TTY BOARD LDA &EXU SET EXU FLAG TO I/O STOP ADA USNT BY SETTING IT TO -2 LDB M2 STB A,I JMP OK STOP FLAG SET- OUTPT NEXT CHAR * * * *** PUT RUBOUT CHARACTER INTO TTY * CLEAR NOP LDA CHOUT GET CHARACTER OUTPUT ADDRESS INA INDEX TO OTB INST. LDA A,I LOAD INSTRUCTION STA INS.. STORE IT LDB RBOUT LOAD RUBOUT CHARACTER INS.. NOP INSTRUCTION LOCATION JMP CLEAR,I RETURN SKP * *** INPUT SECTION *** * * INPUT JSB CHIN,I INPUT CHAR CPA RT CARRIAGE RETURN? JMP IN1 YES - DONE LDB NCNT LOAD NEG COUNTER SSB,RSS CHECK IF DONE JMP IN2 YES SZA,RSS TEST FOR NULL RECORD JMP TPTST GO SEE IF IN TAPE INPUT MODE CPA LF TEST FOR LINE-FEED JMP DRIV,I YES, THEN IGNORE CPA RBOUT TEST FOR RUBOUT JMP DRIV,I RUBOUT, IGNORE CPA AMODE ALT MODE? JMP IN4 YES, SET DELETE FLAG CPA EMODE ESCAPE MODE? JMP IN4 YES, SET DELETE FLAG CPA LFTAR IS IT A LEFT ARROW? JMP DLETE YES, DELETE PREVIOUS CHARACTER JSB STORC STORE CHARACTER IN2 JMP DRIV,I RETURN * IN1 LDB NCNT LOAD NEG COUNTER CLA,INA SET A=1 SSB CHECK IF OK JMP IN3 YES SLB MAYBE - CHECK BIT 0 CCA SET A=-1 IN3 STA DATA STORE DATA FLAG LDB BPTR LOAD TAPE FLAG SZB,RSS TAPE? JMP IN3.5 NO SSB SET BPTR POSITIVE CMB,INB STB BPTR LDA PCNT LOAD POSITIVE COUNTER SZA,RSS 0? JMP RSTRT YES INA COMPUTE # OF WORDS CLE,ERA DIVIDE BY 2 AND SAVE ODD/EVEN STA !L! STORE WORD COUNT CMA,SEZ,INA,RSS INA ODD NUMBER OF CHARS ADA BUFAD COMPUTE START OF TAPE BUFFER STA BUFAD RESTORE TAPE BUFFER ADDRESS * JSB MVSTK MOVE STRING TO I/O BUFFER !L! NOP * LDA PCNT RELOAD COUNT LDB TCNTA LOAD TAPE COUNTER ADDRESS TABLE ADB USNT INDEX TO USER STA B,I SAVE COUNT * LDA DATA LOAD DATA FLAG STA STPIN SAVE IN INTERRUPT INHIBIT JSB DRIVI START NEW OPERATION LDA STPIN STA DATA RESTORE DATA FLAG JMP DRIV,I RETURN * IN3.5 JSB CLC,I TURN OFF TTY JMP DRIV,I RETURN * IN4 LDA M2 RECORD DELETED LDB BPTR IN TAPE? SZB,RSS JMP IN3 NO * LDA PCNT YES LOAD COUNT INA ARS CMA,INA ADA BUFAD COMPUTE TAPE BUFFER ADDRESS STA BUFAD RESTORE TAPE BUFFER RSTRT JSB DRIVI RESTART INPUT JMP DRIV,I RETURN * * *** DELETE CHARACTER FROM BUFFER (_) * DLETE LDB PCNT FETCH BUFFER COUNTER SZB,RSS IS BUFFER EMPTY? JMP DRIV,I YES, IGNORE AND RETURN CCA SET A=-1 ADB A DECREMENT CHARACTER COUNT STB PCNT RESTORE BUFFER COUNT ADA NCNT DECREMENT NEGATIVE COUNTER STA NCNT RESTORE IT SLB,RSS TEST FOR ODD/EVEN CHARACTER JMP DRIV,I EVEN, JUST DECREMENT COUNT CCA RESET A =-1 ADA BUFAD DECREMENT ADDRESS POINTER STA BUFAD AND STORE IT LDA BUFAD,I LOAD LAST TWO CHARACTERS AND MSK1 DELETE LAST CHARACTER STA BUFAD,I RESTORE CHARACTER JMP DRIV,I RETURN * * LEADR LDB OCNT LOAD ORIGINAL COUNTER SZB,RSS IS IT ZERO? JMP OT1 YES - CR-LF LDB IOFLG GET I/O FLAG CLA NULL CHARACTER JSB CHOUT,I ISZ NCNT JMP DRIV,I JMP DRIV,I * *** SECTION TO TEST FOR LEADER / TRAILER TAPE * TPTST LDA BPTR LOAD TAPE FLAG SZA,RSS 0? JMP DRIV,I YES SSA LEADER? JMP DRIV,I YES CLA END-OF-TAPE STA PCNT CLEAR COUNTER STA BPTR CLEAR TAPE FLAG CLA,INA SET DATA FLAG JMP IN3 CRLFA DEF *+1 OCT 6412,177777 RT OCT 15 CARRIAGE RETURN LFTAR OCT 137 AMODE OCT 176 * SKP * * *************************************** *** *** *** SPECIAL SERVICE SUBROUTINES *** *** *** *************************************** * * SUBROUTINE TO STORE CHARACTER * * STORC NOP LDB PCNT GET POSITIVE COUNTER SLB,RSS CHECK UPPER/LOWER FLAG ALF,SLA,ALF UPPER - ROTATE AND SKIP IOR BUFAD,I LOWER - ADD TO UPPER CHAR STA BUFAD,I STORE WORD SLB,INB CHECK U/L AND INC COUNTER ISZ BUFAD LOWER - NEW WORD STB PCNT STORE POS COUNTER ISZ NCNT INC NEG COUNTER JMP STORC,I RETURN ISZ NCNT DATA IN - SET DINF JMP STORC,I RETURN * * * SUBROUTINE TO ACCESS ONE CHARACTER * * ACCHR NOP LDB PCNT LOAD POSITIVE COUNTER LDA BUFAD,I LOAD WORD SLB,RSS CHECK UPPER OR LOWER ALF,ALF ROTATE UPPER CHAR TO LOW BITS AND M177 MASK OFF UPPER BITS IFN * CSL MODIFICATIONS TO REMOVE BRACKETS. * DO NOT INCLUDE IN HP VERSION*** * CPA LBRAK LDA LPREN CPA RBRAK LDA RPREN * * XIF SLB,INB CHECK IF NEW WORD NEEDED ISZ BUFAD YES - INCREMENT ADDRESS STB PCNT SAVE POS COUNTER ISZ NCNT INCREMENT NEG COUNTE JMP ACCHR,I RETURN JMP ACCHR,I RETURN EXUA DEF EXU1 EXUA. EQU EXUA &EXU DEF EXU1-1 IFN * * * BRACKET TEST UNNECESSARY IN HP VERSION * LBRAK EQU 442B LPREN EQU 417B RPREN EQU 420B RBRAK OCT 135 XIF SKP * *** THIS SECTION OF TIME-SHARE DRIVERS AND MONITOR *** IS DESIGNED TO SAVE ALL RUNNING CONDITION *** POINTERS WHEN A POWER FAIL OCCURS AND TO RE- *** INITIATE THE COMPUTER WHEN POWER RETURNS. * * *** THIS SECTION STOPS THE COMPUTER * !FAIL NOP ENTRY POINT FROM INTERRUPT CLF 0 TURN OFF INTERRUPT SFC PFL UP OR DOWN? JMP UP^^^ GO TO RESTERT SECTION STA ASTR SAVE A - REGISTER STB BSTR SAVE B - REGISTER ERA,ALS SOC INA SAVE E & O REGISTERS STA EO LDA !FAIL LOAD RETURN ADDRESS STA RETAD SAVE FOR RETURN CLC PFL TURN ON RESTART HLT PFL STOP COMPUTER JMP UP^^^ * *** THIS SECTION RE-INITIATES THE COMPUTER * UP^^^ CLO LDA EO SLA,ELA RESTORE E & O REGISTERS STO LDB RBOUT LTTY4 OTB 0 SET RUBOUT CHAR IN LOG TTY NOP (OTB USER #1) NOP (OTB USER #2) NOP (OTB USER #3) NOP (OTB USER #4) LDB IO1 LOAD CHAN 1 I/O FLAG NOP OTB CHAN 1 LDB IO2 LOAD CHAN 2 I/O FLAG NOP LDB IO3 LOAD CHANNEL 3 I/O FLAG NOP OTB CHAN3 LDB IO4 LOAD CHANNEL 4 I/O FLAG NOP OTB CHAN4 LDB IOL LOCAL TTY I/O FLAG ZT[ NOP * * LDA .4 CL4 OTA 0 LDA ASTR RESET A - REGISTER LDB BSTR RESET B-REGISTER LTTY5 STC 0,C NOP (STC,C CHAN 1) NOP (STC,C CHAN 2) NOP (STC,C CHAN 3) NOP (STC,C CHAN 4) ?PFLI NOP (CLC RDR IF IN SYSTEM) NOP (CLC CARD IF IN SYSTEM) CL3 STC 0,C STC PFL SET UP FOR NEXT FAILURE STF 0 TURN ON INTERRUPT JMP RETAD,I RETURN TO INTERRUPTED SEQUENCE * *** STORAGE FOR POWER FAIL PROGRAM * ASTR NOP BSTR NOP EO NOP RETAD NOP LWAMS EQU * * * * SKP * ********************************** *** *** *** BASE PAGE LINKAGE AREA *** *** *** ********************************** ORG 3B DEF PTSBS JSB PFAIL,I POWER FAIL INTERRUPT LOCATION HLT 5B * * I/O CHANNELS * PFL EQU 4B POWER FAIL CHANNEL ORG 10B REP 9 NOP INTERRUPT NOP'S ORG 30B * * INTERRUPT LINKS * * I/O1 ABS TIMR I/O2 ABS INT1 I/O3 ABS INT2 I/O4 ABS INT3 I/O5 ABS INT4 I/O6 ABS INTL I/O7 ABS RDINT I/O8 ABS CRINT PFAIL DEF !FAIL LINK TO POWER FAIL ROUTINE * *** BASE PAGE LINKS TO BASIC AND MONITOR * ORG 60B DEF CARDS LINK TO CARD READER INITIATE PTAP BSS 1 DEF .HSPR USN BSS 1 ASTK BSS 1 EXU1 EQU * EXU2 EQU *+1 EXU3 EQU *+2 EXU4 EQU *+3 ORG 71B BSK1 DEF SK1 BSK2 DEF SK2 BSK3 DEF SK3 BSK4 DEF SK4 ORG 101B DEF LOGOF DEF MSSG &MON& DEF MONIT DEF SEXU DEF IMON DEF IMOFF XECUT BSS 1 I.STP BSS 1 ACTIV EQU * WRITE EQU ACTIV+1 REED EQU ACTIV+2 FWAM EQU ACTIV+3 LWAM EQU ACTIV+4 .BUFA EQU ACTIV+5 SYMTA EQU .BUFA+1 PBUFF EQU SYMTA+2 PBPTR EQU PBUFF+1 .LNUM EQU PBPTR+2 SBUFA EQU ACTIV+7 BADDR EQU ACTIV+12 CCNT EQU ACTIV+13 SBPTR EQU ACTIV+18 ORG 205B TEMPS EQU * INFO1 EQU TEMPS+18 INFO2 EQU TEMPS+19 INFO3 EQU TEMPS+20 ONADR EQU 100B RDYDA EQU 255B TSRCH EQU RDYDA+5 PEXMA EQU RDYDA-1 OUTIA EQU RDYDA+13 OUTIN EQU OUTIA DIGCK EQU RDYDA+18 LETCK EQU DIGCK+1 GETCR EQU DIGCK-1 OUTCR EQU DIGCK-2 ORG 370B .1 EQU * .2 EQU *+1 .3 EQU *+2 .4 EQU *+3 .6 EQU *+4 .7 EQU *+5 .10 EQU *+8 .12 EQU *+9 LF EQU .10 BLANK EQU *+17 .32 EQU BLANK .15 EQU *+10 .36 EQU *+21 .41 EQU *+24 .48 EQU *+29 .63 EQU *+32 .72 EQU *+36 EMODE EQU *+13 M177 EQU .72+7 RBOUT EQU M177 M200 EQU M177+1 M377 EQU M177+2 ORG 477B M1 EQU * M2 EQU *+1 M3 EQU *+2 M4 EQU *+3 M5 EQU *+4 M6 EQU *+5 M7 EQU *+6 M8 EQU *+7 M9 EQU *+8 M10 EQU *+9 M11 EQU *+10 M16 EQU *+12 M19 EQU *+13 M21 EQU *+14 M25 EQU *+15 D72 EQU *+18 D100 EQU *+19 MSK1 EQU *+24 D1000 EQU *+26 M15 EQU D1000+5 [SEX[ EQU .SEX.-1 B177 EQU M177 SEXUA EQU &MON&+1 .77 EQU .72-4 TFLAG EQU CCNT+1 AT EQU .63+1 .30 EQU .10+7 .37 EQU .10+14 SP EQU .32 BLNK EQU PBPTR+1 LNUM EQU PBPTR+2 RUNA EQU PEXMA-2 DRQST EQU PEXMA+2 STK19 EQU TEMPS-7 ERROR EQU 544B ..ERR EQU 545B LINK TO ERROR+1 IN BASIC RN.$. EQU 2141B LINK TO "RUN" ADDRESS IN BASIC $RUN$ EQU PEXMA-2 $LST$ EQU PEXMA+3 $FS3$ EQU PEXMA-1 ORG 53B X1 DEF Y1 X2 DEF Y2 X3 ABS 2012B X4 DEF Y3 X6 DEF Y6 LINK TO Y6 FROM LIST, ETC. * *** SET UP USER STACKS * ORG 13203B STCKS EQU * SK1 ABS TAPE1 ABS WRIT1 ABS READ1 FWAM1 NOP LWAM1 NOP BSS 83 SK2 ABS TAPE2 ABS WRIT2 ABS READ2 FWAM2 NOP LWAM2 NOP BSS 83 SK3 ABS TAPE3 ABS WRIT3 ABS READ3 FWAM3 NOP LWAM3 NOP BSS 83 SK4 ABS TAPE4 ABS WRIT4 ABS READ4 FWAM4 NOP LWAM4 NOP BSS 83 * FINIS EQU * END 22255-80009 D