ASMB,L,C,Q ** REIO ** * NAME: REIO * SOURCE: 92067-18275 * RELOC: PART OF 92067-16268 AND 92067-16035 * PGMR: G.A.A.,C.M.M.,G.L.M. * * *************************************************************** * * (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 REIO,7 92067-1X275 REV.2013 790316 EXT .DFER,$LIBR,$LIBX,EXEC,.ENTR ENT REIO SUP SPC 1 * THIS ROUTINE DOES REENTRENT I/O IF THE USERS BUFFER * IS 37 OR MORE WORDS ABOVE THE PROG LOAD POINT. * THIS RESTRICTION IS ENFORCED BECAUSE THE USERS BUFFER * IS USED AS A TDB FOR THE REENTRANT PROCESSOR AND THUS * THREE WORDS(PLUS 2 FOR SAVE X AND Y REG WORDS AND 32 FOR * THE USER MAP SAVE AREA) ARE REQUIRED ABOVE IT. * * NOTE: FOR MEMORY RESIDENT PROGRAMS, THE BUFFER MUST BE 5 * OR MORE WORDS ABOVE THE PROGRAM LOAD POINT. * * * THESE THREE WORDS ARE SAVED LOCALLY AND THE TDB IS SET UP. * AFTER THE I/O HAS COMPLETED THE WORDS ARE RESTORED. * * IF THE BUFFER IS TOO CLOSE TO THE LOAD POINT THE I/O IS * PERFORMED IN THE STANDARD MANNER. THIS IS ALSO TRUE IF THE * BUFFER IS MORE THAN 129 WORDS LONG (TO CONSERVE SYSTEM MEMORY). * * CALLING SEQUENCE: * * THE SAME AS THE EXEC I/O CALL WITH OUT THE TRACK/SECTOR WORDS. * RQ BSS 4 PRAMETER ADDRESS AREA REIO NOP ENTRY POINT JSB .ENTR FETCH THE PRAMETERS DEF RQ LDA RQ+3,I PULL PRAMETERS IN LOCALLY STA RQ+3 INCASE THEY ARE LDA RQ,I ARE IN THE THREE WORD STA RQ AREA AHEAD OF LDA RQ+1,I THE BUFFER STA RQ+1 * LDA XEQT GET THE PROGRAM LOAD ADA D22 POINT XLA A,I LDB RQ+2 AND THE BUFFER ADDRESS CMB,INB NOW MAKE SURE THAT THE BUFFER ADB A IS ABOVE THE LOAD POINT OF CLE,SSB,RSS PROGRAM. JMP DIRIO BUFFER BELOW PROG MUST BE IN COMMON ADB D4 BUFFER ABOVE LOAD POINT, BUT IS IT CLE,SSB,RSS WITHIN 5 WORDS ? JMP DIRIO YES, SO FORGET IT * LDA XMATA FETCH ADDRESS OF CURRENT MAT ENTRY SZA,RSS IF THIS IS A MEMORY RESIDENT JMP OK PROGRAM IT'S OK TO DO REIO. * ADB D32 DISC RESIDENT, CHECK FOR MAP SAVE AREA CLE,SSB,RSS BUFFER MUST BE 37 WORDS ABOVE LOAD POINT. JMP DIRIO TOO BAD, THE BUFFER IS TOO CLOSE * * OK LDA RQ+2 GET THE BUFFER ADDRESS ADA N3 LESS THREE & SET STA TDBA UP THE $LIBR & STA TDBA2 $LIBX CALLS. * JSB .DFER ELSE SAVE THE THREE WORDS DEF S1 IN LOCAL SAVE AREA DEF TDBA,I LDB RQ+3 GET THE REQUEST LENGTH SSB,RSS IF POSITIVE SKIP CONVERSION JMP RE1 * BRS CONVERT CHARACTERS TO CMB,INB WORDS AND SET POSITIVE RE1 ADB D3 ADD THREE WORDS FOR TDB LENGTH STB A AND PUT IN A FOR LENGTH TEST ADA N133 SUBTRACT 133 (129 + 3 + 1) CLE,SSA,RSS IF POSITIVE OF ZERO JMP DIRIO DO IT DIRECT * CLA,CCE SET ZERO IN WORD ONE AND DST TDBA,I LENGTH IN WORD TWO OF THE TDB JSB DOIO GO DO THE I/O S1 OCT 0,0,0 RETURN SKIPS THREE WORDS DST RQ SAVE THE REGISTERS JSB .DFER RESTORE THE THREE WORDS DEF TDBA,I DEF S1 DLD RQ RESTORE THE A AND B REGS. JMP REIO,I AND EXIT TO USER. * DOIO NOP JSB $LIBR TELL THE SYSTEM WE ARE TDBA DEF * RENT DIRIO JSB EXEC DO THE I/O CALL DEF EX RETURN ADDRESS DEF RQ DEF RQ+1 DEF RQ+2,I DEF RQ+3 EX RSS SKIP IF ERROR EXIT ISZ REIO ELSE STEP RETURN ADDRESS SEZ,RSS IF DIRECT JMP REIO,I EXIT * JSB $LIBX ELSE EXIT RENT TDBA2 DEF * SECTION D3 DEC 3 +3 WORDS * D32 DEC 32 N133 DEC -133 N3 DEC -3 N2 DEC -2 D22 DEC 22 D4 DEC 4 XMATA EQU 1646B XEQT EQU 1717B A EQU 0 ORG * END