ASMB,R,L,C,Q HED R/W$ * NAME: R/W$ * SOURCE: 92067-18145 * RELOC: 92067-16125 * PGMR: G.A.A.,N.J.S. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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/W$,7 92067-16125 REV.1903 781214 EXT EXEC ENT R/W$ ENT D$XFR ENT D.R * * R/W$ WRITES THE CURRENT SECTOR BLOCK IF IT HAS * BEEN WRITTEN ON OR READS UNCONDITIONALLY. * * CALL SEQUENCE: * * SET E=0 FOR WRITE E=1 FOR READ * LDB DCB SET B TO DCB ADDRESS * JSB R/W$ * JMP DERR ERROR RETURN (A = -1) * NORMAL RETURN * R/W$ NOP STB RC SAVE THE DCB ADDRESS ADB .7 INDEX TO THE BLOCK SIZE LDA B,I FETCH THE BLOCK SIZE AND BLMSK MASK TO BITS 7-14 STB WOFLG SAVE ADDRESS OF THIS WORD ADB .9 INDEX TO DCB BUFFER STB BUFA SAVE IT'S ADDRESS LDB WOFLG,I GET WORD WITH WRITTEN ON FLAG SEZ,SLB,RSS CHECK READ\WRITE CODE AND WRITTEN-ON FLAG JMP EXIT JUMP IF WRITE AND WRITTEN ON FLAG NOT SET LDB RC GET THE DCB ADDRESS JSB D$XFR DO THE TRANSFER BUFA NOP JMP R/W$,I ERROR - RETURN LDB WOFLG,I GET THE WRITTEN-ON FLAG LDA RC GET WRITE OR READ REQUEST CODE CCE,SLA,RSS FOR WRITE CALL WANT TO CLEAR EOF CLE WRITTEN-ON FLAG AND IN-CORE FLAG EXIT RBR,RBR FOR READ CALL WANT TO CLEAR EOF AND RBR WRITTEN ON FLAG AND SET ELB,CLE,ELB IN CORE FLAG. CLE,ELB IF SKIPPED D$XFR (JMP EXIT) JUMPING STB WOFLG,I WITH E=0, B=WOFLG,I. WANT TO ISZ R/W$ CLEAR BOTH WRITTEN-ON AND JMP R/W$,I IN CORE FLAGS. SPC 2 .2 DEC 2 .7 DEC 7 .8 DEC 8 .9 DEC 9 * RC NOP TRACK NOP AT TRACK MUST BE TOGETHER SECT NOP AND SECTOR IN THIS ORDER LU NOP WOFLG NOP * B77 OCT 77 BLMSK OCT 77600 * * * DISC TRANSFER CALL SEQUENCE * * E=0 FOR WRITE * E=1 FOR READ * B= DCB ADDRESS * A= LENGTH (NO. OF WORDS) * JSB D$XFR CALL TO HERE * DEF BUFR BUFFER ADDRESS (MUST BE DIRECT) * JMP ERR ERROR RETURN (A=-1) * NORMAL RETURN SPC 2 D$XFR NOP ENTRY POINT STA LSAVE SAVE LENGTH CLA,SEZ,INA,RSS SET UP THE REQUEST CODE INA AND STA RC SET IT LDA B,I CONFIGURE THE CON WORD AND B77 ADA PRC STA LU ADB .8 GET THE NUMBER OF SECTORS PER TRACK STB #SC/T ADDRESS AND SAVE IT ADB .2 GET THE TRACK ADDRESS DLD B,I AND DST TRACK SAVE IT LDA D$XFR,I GET THE BUFFER ADDRESS STA BUF SAVE IT ISZ D$XFR STEP TO ERROR RETURN ADDRESS LDA B GET THE SECTOR ADDRESS TO A CMA,INA SET NEGATIVE AND NXTR ADA #SC/T,I CACULATE NUMBER OF WORDS LEFT ON THIS ASL 6 ON THIS TRACK STA #WORD SET FOR TRANSFER CMA,INA SET MAX COUNT NEGATIVE LDB LSAVE GET REMAINING COUNT ADA B AND SUBTRACT SSA IF LESS THAN REST OF TRACK STB #WORD RESET COUNT TO RIGHT NUMBER STA LSAVE SET REMAING WORDS FOR NEXT TIME JSB EXEC CALL EXEC TO DEF ERTS DEF RC WRITE/READ DEF LU FROM THE DISC BUF NOP AT THE SPECIFIED BUFFER DEF #WORD SIZE DEF TRACK TRACK AND DEF SECT SECTOR ERTS CCA SET UP FOR ERROR EXIT CPB #WORD ERROR? CLA,RSS NO ERROR SKIP JMP D$XFR,I ERROR RETURN ADB BUF UP DATE THE BUFFER STB BUF ADDRESS STA SECT SET THE SECTOR ADDRESS FOR NEW TRACK ISZ TRACK STEP THE TRACK ADDRESS LDB LSAVE GET THE REMAINING LENGTH CMB,SSB,INB,SZB CHECK IF ANY LEFT JMP NXTR NO CONTINUE XFER ISZ D$XFR END SO JMP D$XFR,I MAKE THE NORMAL RETURN SPC 2 LSAVE NOP #SC/T NOP #WORD NOP A EQU 0 B EQU 1 UNL PRC OCT 74000 LST D.R ASC 3,D.RTR SPC 1 END EQU * SPC 1 END