ASMB,R,L,C HED RTE AND DOS TAPE POSITIONING ROUTINE * * NAME: PTAPE * SOURCE: 92068-18024 * 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 PTAPE,7 92068-1X024 REV.2013 750701 ENT PTAPE EXT EXEC,.ENTR SPC 2 * CALLING SEQUENCE * CALL PTAPE(UNIT, #FILES, #RECORDS) * * UNIT ------ EQT ORDINAL FOR EXEC CALL * #FILES ---- > 0 FOR FORWARD * < 0 FOR REVERSE * #RECORDS -- > 0 FOR FORWARD * < 0 FOR REVERSE * (A FILE MARK ENCOUNTERED DURING RECORD * SPACING COUNTS AS ONE RECORD) * * A BACKSPACE FILE LEAVES THE TAPE AT THE BEGINNING OF THE FILE. * AN END-OF-TAPE CONDITION CAUSES IMMEDIATE RETURN TO THE USER. SPC 2 UNIT NOP ADDRESS OF LOGICAL UNIT NUMBER FILES DEF ZERO ADDRESS OF FILE COUNT RECS DEF ZERO ADDRESS OF RECORD COUNT SPC 1 PTAPE NOP ENTRY POINT JSB .ENTR TRANSFER DEF UNIT PARAMETERS LDA UNIT,I GET EQT ORDINAL (UNIT NUMBER) SZA IF ZERO SSA OR NEGATIVE: JMP EXIT UNIT NUMBER IN ERROR: RETURN AND B77 ISOLATE UNIT NUMBER IOR B200 CONFIGURE BACKSPACE CONTROL WORD STA BSR AND STORE IT IOR B100 CONFIGURE FORWARD SPACE CONTROL * WORD STA FSR AND STORE IT XOR B500 CONFIGURE DYNAMIC STATUS REQUEST * CONTROL WORD STA DSTAT AND STORE IT LDA RECS,I GET NUMBER OF RECORDS STA RECS AND SAVE IT LDB FILES,I GET NUMBER OF FILES JSB ABS GO SET UP FOR FILE SPACING JMP RCRD RETURNS HERE IF NO FILES: * GO DO RECORDS JSB SPACE GO SPACE A RECORD JMP *-1 FILE MARK NOT FOUND: DO ANOTHER ISZ COUNT FILE MARK FOUND: ENOUGH SPACED? JMP *-3 NO: REPEAT LDA FILES,I GET ORIGINAL FILE COUNT AGAIN SSA HAVE WE BEEN BACKSPACING? ISZ RECS YES: ADD 1 TO THE RECORD COUNT RSS IF NOT ZERO, GO SPACE RECORDS JMP EXIT ELSE GO RETURN TO USER RCRD LDB RECS GET NUMBER OF RECORDS JSB ABS GO SET UP FOR RECORD SPACING JMP EXIT NO RECORDS: RETURN TO USER JSB SPACE GO SPACE A RECORD OR * TO FILE MARK NOP FILE MARK NOT FOUND ISZ COUNT ENOUGH RECORDS SPACED? JMP *-3 NO: GO SPACE ANOTHER EXIT LDA ZERO CLEAR FILE STA FILES AND RECORD STA RECS ADDRESS WORDS JMP PTAPE,I RETURN TO USER SPC 1 SPACE NOP ENTRY POINT TO * TAPE MOTION SECTION JSB EXEC GO GET DYNAMIC STATUS DEF *+3 RETURN ADDRESS DEF RCODE ADDRESS OF I/O CONTROL * REQUEST CODE DEF DSTAT ADDRESS OF DYNAMIC STATUS * CONTROL WORD AND B40 ISOLATE EOT BIT SZA END OF TAPE? JMP EXIT YES: RETURN IMMEDIATELY TO USER JSB EXEC NO: SPACE THE TAPE DEF *+3 RETURN ADDRESS DEF RCODE ADDRESS OF I/O CONTROL * REQUEST CODE DEF FUNCT ADDRESS OF FUNCTION CONTROL WORD JSB EXEC GET DYNAMIC STATUS AGAIN DEF *+3 RETURN DEF RCODE REQUEST CODE DEF DSTAT CONTROL WORD RAL SHIFT SOT BIT ALF,ALF TO POSITION 15 SSA START OF TAPE? JMP EXIT YES: RETURN TO USER SLA NO: END OF FILE MARK FOUND? ISZ SPACE YES: INCREMENT RETURN ADDRESS * BY 1 BEFORE RETURNING JMP SPACE,I RETURN SPC 1 ABS NOP ENTRY TO SPACE SET UP ROUTINE LDA FSR GET FORWARD SPACE CONTROL WORD SSB IS COUNT NEGATIVE? LDA BSR YES: GET BACKSPACE CONTROL WORD STA FUNCT STORE CONTROL WORD * AT CORRECT ADDRESS SSB,RSS IS COUNT POSITIVE? CMB,INB YES: TAKE 2'S COMPLIMENT STB COUNT STORE NEGATIVE COUNT SZB IS COUNT ZERO? ISZ ABS NO: INCREMENT RETURN ADDRESS JMP ABS,I RETURN SPC 1 ZERO NOP ZERO WORD FSR OCT 000300 FORWARD SPACE CONTROL WORD BSR OCT 000200 BACKSPACE CONTROL WORD RCODE DEC 3 I/O CONTROL REQUEST CODE DSTAT OCT 000600 DYNAMIC STATUS CONTROL WORD FUNCT NOP DEFINED ADDRESS OF CONTROL WORD COUNT EQU UNIT 'UNIT' DOUBLES AS RECORD COUNT B77 OCT 77 UNIT NUMBER MASK B40 OCT 40 EOT BIT MASK B100 OCT 100 FORWARD SPACE CONWD COMPONENT B200 OCT 200 BACKSPACE CONWD COMPONENT B500 OCT 500 STATUS CONWD COMPONENT END * *