ASMB,R,L,C HED "SREAD" DOS ':JF,' -OR- RTE 'LS, READ SOURCE ROUTINE (DLB) * * NAME: SREAD * SOURCE: 92068-18027 * RELOC: PART OF 92067-16268 AND 92067-16035 * PGMR: R.A.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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 SREAD,7 92068-1X027 REV.2013 771116 ENT %READ,%JFIL,%RDSC EXT $OPSY,EXEC SPC 1 * SPC 1 * PURPOSE: * THIS ROUTINE READS SOURCE DEVICE OR DISC IF LOGICAL UNIT = 2 SPC 1 * USES: * THIS ROUTINE IS USED BY COMPILERS, EDITORS, ASSEMBLERS TO * READ SOURCE FROM DEVICES OR FROM RTE/DOS SOURCE DISK FILE * AREAS. I.E. DOS IN "JFILE" FORMAT, RTE IN "LS" FORMAT. SPC 1 * CALLED: * ASSEMBLY ONLY * JSB %JFIL INITIALIZE FOR :JF, OR *LS, POINTER * * ASSEMBLY ONLY * LDA LUTRK INITIALIZE FOR GIVEN DISCLU/TRACK * JSB %RDSC (IN RTE B-REG MUST = 0) * * ASSEMBLY ONLY * JSB %READ DEFAULT :JF,*LS IF %JFIL,%RDSC NOT CALLED * DEF *+5 * DEF LUN LOGICAL UNIT OF INPUT DEVICE * DEF BUFFR POINTER TO 1ST WORD OF BUFFER * DEF RLEN -(NUMBER CHARACTERS IN BUFFER) * END OF FILE RETURN (DISC ONLY) * A-REG = !15 DISCLU 8!7 TRACK# 0! LAST READ * B-REG = CHARACTER TRANSMISSION LOG. (POS.) SPC 1 * NOTES: * THE B-REGISTER WILL RETURN = 0 IF END OF TAPE IS READ OR * AN IMMBEDDED FILE MARK WHEN READING DISC. IF READING DISC * AN EVEN CHARACTER COUNT IS ALWAYS RETURNED. THE " %JFIL " * AND " %RDSC " ENTRY POINTS MAY BE USED TO RE-INITIALIZE * (REWIND) A READ FROM DISC. SPC 1 %READ NOP FTST1 JSB FTEST INITIALIZE IF FIRST TIME LDA %READ,I STA EXIT RETURN ADDRESS ISZ %READ LDA %READ,I STA LUNAD ADDR FOR LUN OF INPUT ISZ %READ LDA %READ LDA 0,I RAL,CLE,SLA,ERA TEST I-BIT AND CLEAR JMP *-2 INDIRECT, GO ON THRU INDIR.CHAIN STA RBFAD FWA OF READ-BUFFER ISZ %READ LDA %READ,I STA RLGTH RECORD-LENGTH ADDR ISZ %READ BUMP RETURN ADDR FOR EOF RETURN LDA LUNAD,I CPA .2 LUN = 2 JMP READ1 YES JSB EXEC READ FROM OTHER THAN DISK DEF *+5 DEF M1OR1 CODE = 1 OR -1 FOR READ LUNAD NOP ADDR OF INPUT-LUN OF CONTROL CARD FTEST EQU LUNAD ENTRY 1ST TIME ONLY RBFAD JMP BUFFR ADDR OF READ-BUFFER RLGTH NOP ADDR OF ASKED-FOR RECD LENGTH SAVA EQU RLGTH JMP EXIT,I EXIT EXIT NOP EXIT POINT SAVB EQU EXIT SPC 1 * JSB %JFIL DEFAULT THE :JF = *LS AREA READ1 JSB GETWD GET RECORD HEAD ALF,ALF (A)= NO OF WORDS LDB 0 SZA,RSS END OF TAPE ? JMP EXIT,I YES, EXIT WITH (B)=0 CMA,SSA,INA,RSS EOF? JMP %READ,I YES, EOF RETURN RBL A= -(WORDS IN RECORD) STB ALGTH RECORD LGTH IN +CHARS LDB RLGTH,I ASKED-FOR RECORD-LENGTH (-) BRS CONVERT TO -(WORD COUNT) STA RCOUN SET CURRENT-RECORD COUNT STB ACOUN SET ASKED-FOR RECORD COUNT MORE1 JSB GETWD GET WORD FROM DISK STA RBFAD,I WORD TO USER-S BUFFER ISZ RBFAD BUMP BUFFER ADDR ISZ ACOUN BUMP COUNT RSS JMP READ2 READY,FINISH UP ISZ RCOUN BUMP RECORD COUNT JMP MORE1 CONTINUE LDB ALGTH RETURN ACTUAL RECORD-LENGTH JMP MORE2 SPC 1 READ2 ISZ RCOUN SKIP TO END OF RECORD JMP MORE3 LDB RLGTH,I READY, RETURN ASKED-FOR REC.LGTH CMB,INB POS LGTH MORE2 LDA CODE !15 LU 8!7 TRACK 0! JMP EXIT,I SPC 1 MORE3 JSB GETWD GET NEXT WORD JMP READ2 AND SKIP SPC 1 BFRAD NOP POINTER FOR INTERNAL BUFFER SPC 1 GETWD NOP LDA BFRAD,I ISZ BFRAD ISZ BCOUN BUMP BUFFER COUNTER JMP GETWD,I EXIT ISZ SECTR BUMP SECTOR NO. DOS1 JMP RTECD STA SAVE LDB SECTR CPB 116B END OF TRACK? CLB,RSS YES,SECTOR = 0 JMP GETW1+1 STB SECTR SECTOR NO = 0 ISZ TRACK BUMP TRACK NO. JSB EXEC DEF *+5 DEF .M16 CODE = -16 FOR STATUS DEF .1 1 TRACK DEF TRACK STARTING TRACK DEF TRACK NEXT GOOD TRACK JMP GETW1+1 SPC 1 RTECD ISZ SECTR BUMP THE SECTOR 1 MORE TIME LDB O1755 ADB RLUN =1757B FOR SYST, 1760B FOR AUX. LDB 1,I CPB SECTR END OF TRACK? CLB,RSS YES, SECTOR NO.= 0 JMP GETW1 STA CODE !15 LU 8!7 TRACK 0! STB SECTR SECTOR NO =0 LSL 8 * LDA =D-8 * STA N * LDA CODE * CLE,ELA SHIFT UPPER 8 BITS OF * ELB,CLE A INTO B, OR LSL 8 * ISZ N * JMP *-3 ALF,ALF STA TRACK SET TRACK NO STB RLUN SET LUN JSB READS READ SECTOR JMP GETWD+1 GET RECORD WORD SPC 1 GETW1 STA SAVE JSB READS READ NEXT SECTOR LDA SAVE JMP GETWD,I SPC 1 READS NOP LDA BFWA STA BFRAD BUFFER-POINTER= FWA BUFFER LDA MSIZE -64 OR -128 STA BCOUN BUFFER COUNTER JSB EXEC READ SECTOR DEF *+7 DEF M1OR1 CODE = 1 OR -1 FOR READ DEF RLUN LUN BFWA DEF BUFFR FWA OF READ-BUFFER DEF PSIZE 64 OR 128 WORDS DEF TRACK TRACK NO. DEF SECTR SECTOR NO. JMP READS,I EXIT SPC 1 SAVE JSB %JFIL TEMP (PART OF INIT) ACOUN LDA SAVA ASKED-FOR RECD COUNT RCOUN LDB SAVB CURRENT-RECORD COUNT ALGTH JMP FTEST,I RECD LGTH TRACK NOP CURRENT TRACK NO SECTR NOP CURRENT SECTOR NO BCOUN NOP SECTOR-BUFFER COUNTER RLUN NOP LUN OF CURRENT TRACK CODE NOP *STYPE NOP SAVES SYSTEM TYPE CODE FROM OPSY *N NOP COUNTER M1OR1 DEC 1 SET FOR RTE, MAY CHANGE .M16 DEC -16 .2OR3 DEC 2 .2 DEC 2 .1 DEC 1 D3 DEC 3 O1755 OCT 1755 PSIZE DEC 64 CHANGE TO 128 IF DOS-III OR RTE MSIZE DEC -64 CHANGE TO -128 IF DOS-III TO RTE * *%RDSC READS A SECTOR *CALLING SEQUENCE: LDA CODE * LDB SECTR SECTOR NO. * JSB %RDSC * RETURN (A)= LAST WORD IN SECTOR %RDSC OCT -1 INITIALIZED FLAG FTST2 JSB FTEST INIT 1ST CAL STB SECTR SECTOR NO. CLB FIX GJ 6/76 LSL 8 * LDB =D-8 * STB N * CLB * CLE,ELA * ELB,CLE LSL 8 * ISZ N * JMP *-3 ALF,ALF STA TRACK DOS2 JMP *+3 DONT CHANGE UNIT FOR RTE CPB D3 SET LU NEG IF = 3 CMB,INB STB RLUN LUN= 2 OR 3 JSB READS READ SECTOR * LDB STYPE * LDA BUFFR+63 LAST WORD IN 64 WORD SECTOR * SLB * LDA BUFFR+127 LAST WORD IN 128 WORD SECTOR LDA LBUFA,I GET LAST WORD IN ETC. JMP %RDSC,I SPC 1 *%JFIL GETS SOURCE-FILE CODEWDRD FROM BASE PAGE, FORMS A WORD= *LUN,TRACK AND CALLS %RDIN WITH IT. SPC 1 %JFIL OCT -1 INITIALIZED FLAG FTST3 JSB FTEST INITIALIZE IF FIRST TIME * LDA =D-8 * STA N DOS3 JMP RTEFL RTE LDB 124B DOS OR IOMEC/DOS LDA .2OR3 LUN = 2 OR 3 RRL 8 * JSB RRL RRL 8 BLF,BLF JMP CONTU SPC 1 RTEFL LDA 1767B SOURCE-FILE CODE WORD RAL POSITION !TRACK! LU! IOR .2 CONVERT LU= 2 OR 3 ALF,ALF NOW ! LU!TRACK! STA CODE SAVE LUN, TRACK NO. CLB SECTOR NUMBER CONTU JSB %RDSC READ SECTOR JMP %JFIL,I EXIT SPC 1 LBUFA DEF BUFFR+63 SPC 1 BUFFR BSS 128 ORG BUFFR STA SAVA STB SAVB LDA $OPSY * STA STYPE 0 = DOS, 1 = IOMEC/DOS, -2 = RTE SSA JMP RTE RTE CLB STB DOS1 STB DOS2 STB DOS3 CCB DOS OR IOMEC/DOS STB M1OR1 SET M1OR1 = -1 SLA,RSS JMP DOS DOS DOSM LDB D3 IF DOS-III, SET LU=3 STB .2OR3 RTE LDB TD128 IOMEC/DOS. BUFFER SIZE = 128 STB PSIZE CMB,INB STB MSIZE LDA DF128 SET LAST WORD IN BUFFER POINTER STA LBUFA DOS CLA NOP THE 2ND ENTRY PTS. STA FTST1 STA FTST2 STA FTST3 LDA %JFIL FIND OUT IF PRE-INITIALIZED CPA %RDSC IF BOTH = -1, THEN NOT SSA,RSS DO THE JSB %JFIL OUTSIDE OF BUFFER JMP SAVE+1 JMP SAVE SPC 1 DF128 DEF BUFFR+127 TD128 DEC 128 *RL NOP PERFORMS RRL N * CLE,SSA IF MSB = 0, E=0 * CCE ELSE E=1 * ELB SHIFT E INTO B * ELA SHIFT E INTO A * ISZ N * JMP RRL+1 * JMP RRL,I SPC 1 ORR END *