File: LINK.PA of Tape: OS8/OS8-V40/v40-9
(Source file text)
/ASCII/IMAGE LINK HANDLER FOR BATCHL / / / / / / / / / /COPYRIGHT (C) 1980 BY DATAPLAN GMBH, LAUDA, BRD / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH. /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR /IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN. / /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN. / / / / / / / / / / / /WVDM, DP, ZURICH, 1-JAN-80 *0 -2 DEVICE LINK;DEVICE LKA;600;LKA&177+4000;ZBLOCK 2 DEVICE LINK;DEVICE LKI;600;LKIF&177+4000;ZBLOCK 2 LKAVERSION="M&77 LKIVERSION="M&77 *200 LKA70, 70 /**KEEP HERE** LKA, LKAVERSION STL CLA RAR /4000 TAD I LKA /RETRIEVE FUNCTION WORD, BUT PUT R/W BIT IN LINK AND L3700 /EXTRACT NUMBER OF DOUBLE-WORDS TO TRANSFER CMA /GET COUNT+1 DCA BUFSIZ /STORE AWAY RDF /FIND OUT THE USER'S DATA FIELD TAD CIFCDF /FORM OUR EXIT CIF CDF DCA LKAXIT /STORE AWAY FOR EXIT ROUTINE TAD I LKA /GET FUNCTION WORD LKA200, AND LKA70 /ISOLATE FIELD OF BUFFER TAD LKACDF /FORM CDF TO FIELD OF BUFFER DCA TTCDBF /STORE WHERE IT WILL BE USEFUL ISZ LKAEOF /AT SAME TIME, INITIALIZE LKAEOF ISZ LKA /POINT TO BUFFER ADDRESS TAD I LKA /AND GET IT DCA LKACA /AND SAVE IT ISZ LKA /POINT TO BLOCK # ISZ LKA /POINT TO ERROR RETURN RAR DCA LKAWC /SAVE IN/OUT STATUS CIFCDF, CIF CDF TAD I BATLOC /CHECK IF UNDER BATCH RAL SMA CLA JMP LKAERR /NO; TOO BAD! TAD I BATLOC /YES AND LKA70 TAD CIFCDF /YES; GET BATCH FIELD DCA BFLD STL RAR /WRITE NOTHIHG FOR SETTING DF JMP TELP LKALP, TAD LKAWC /WAS IT WR OR RD? RAL SNL CLA /LINK=1 MEANS OUTPUT JMP LKAGET /INPUT IS FROM LKA: /LINK MUST BE SET FIRST TIME THROUGH HERE. /IT ACTS AS A GUARD BIT IN THE SHIFT REGISTER ROTL, RTL RTL SPA /DO WE HAVE 8 BITS SHIFTED IN? JMP TELP DCA SHIFT /SAVE SHIFT REGISTER TAD I LKACA SZA JMS HCORE /PRINT A CHARACTER TAD I LKACA ISZ LKACA /BUMP INPUT POINTER TT7400, 7400 /PROTECT ISZ AND TT7400 CLL RAL TAD SHIFT /SHIFT HIGH ORDER 4 BITS INTO JMP ROTL /SHIFT REGISTER TELP, JMS HCORE /PRINT 3RD CHARACTER OF DOUBLE-WORD LKAKLG, ISZ BUFSIZ /DONE? JMP LKALP /NOT YET LKAX, TAD LKAEOF /IF INPUT AND WE WERE PADDING WITH 0'S LKARTN, SZA SMA /TAKE SOFT ERROR EXIT ISZ LKA /POINT TO NORMAL RETURN AND LN4000 /KEEP HARD ERROR ON INPUT OR OUTPUT LKAXIT, HLT /RETURN TO USER'S FIELD JMP I LKA /RETURN TO USER LKAERR, STL CLA RAR JMP LKAXIT LKAWC, 0 BUFSIZ, 0 LKACA, 0 SHIFT, /OUTPUT SHIFT REGISTER LKAEOF, 0 /0 IF SAW ^Z AND WISH TO PAD BUFFER WITH 0'S HCORE, 0 /SUBROUTINE FOR HIGH CORE ACCESS SNA JMP BFLD /ITS INPUT AND LKA177 SNA JMP TTCDBF /DON'T PRINT NULLS TAD LKAM32 /CHECK FOR EOF SNA TAD LKA200 /CONVERT TO 8-BIT CONTROL TAD LKA32 BFLD, HLT /SET BATCH FIELD - CIFCDF! DCA LTEMP TAD I VFYLKA /CHECK IF HIGH-CORE STILL OK DCA HLINK /POINTER TO LINK CHECK TAD I HLINK TAD MWVDM SZA CIF CDF /NO RESET TO F 0 SZA CLA JMP LKAERR ISZ HLINK /NEXT WORD IS ADRESS OF TAD I HLINK /THE I/O ROUTINE IN HIGH CORE DCA HLINK TAD LTEMP JMS I HLINK /CALL HIGH CORE JMP LKARTN /GO AWAY, WE SAW A ^Z OR ERROR=4000 TTCDBF, HLT /CDF BUFFER FIELD JMP I HCORE /RETURN LTEMP, 0 HLINK, 0 LN4000, 4000 VFYLKA, 5601 /**VOLATILE** FOR BATCHL.PA V 1A MWVDM, -2715 /**-WM** LKA177, 177 LKAM32, -32 LKA32, 32 LKAGET, TAD BUFSIZ CLL RAL /CONVERT DOUBLE-WORDS TO WORDS DCA LKAWC /SET SIZE OF BUFFER TSTEND, TAD LKAEOF SNA CLA JMP ZERO JMS HCORE /CALL HCORE TO GET A CHARACTER AND LKA177 TAD LKAM32 /-^Z SNA /EOF? DCA LKAEOF /YES, SET FLAG TAD LKA32 /RESTORE TAD LKA200 /ADD PARITY BIT FOR OS/8 ZERO, DCA I LKACA ISZ LKACA /NEXT LOC L3700, 3700 ISZ LKAWC /IS BUFFER FULL? JMP TSTEND /NO - LOOP JMP LKAX /YES, GET OUT LKACDF, CDF 0 BATLOC, 7777 ZBLOCK 374-. LKIF, LKIVERSION /FAKE ENTRYPOINT TO LKI CLA CLL /JUST SO IT IS IN FIRST PAGE TAD LKIF /TRANSPORT CALL TO SECOND PAGE SKP LKI, LKIVERSION /MUST BE ON PAGE BOUNDARY (LKIEND) DCA LKI /WE CAME IN WITH CALL IN AC! CLA STL RAL /CLEAR AC FROM USER DCA LKIEOF /INIT TO NO EOF=1 TAD I LKI /RETRIEVE FUNCTION WORD AND L7700 /EXTRACT NUMBER OF WORDS TO TRANSFER CLL RAL /AND PUT R/W BIT IN LINK SNA /A TRANSFER OF 0 MEANS EOF V3 ETC. DCA LKIEOF /SET FLAG SO WE KNOW CMA /GET COUNT+1 DCA LKIWC /STORE AWAY RDF /FIND OUT THE USER'S DATA FIELD TAD CIFCD /FORM OUR EXIT CIF CDF DCA LKIXIT /STORE AWAY FOR EXIT ROUTINE TAD I LKI /GET FUNCTION WORD AND LKI70 /ISOLATE FIELD OF BUFFER TAD LKICDF /FORM CDF TO FIELD OF BUFFER DCA HCCDBF /STORE WHERE IT WILL BE USEFUL TAD HCCDBF DCA LKILP /AND SOMEWHERE ELSE TAD LKIRTN /'SMA SZA' DCA HCPAD /RESET PAD ZEROES SWITCH ISZ LKI /POINT TO BUFFER ADDRESS TAD I LKI /AND GET IT DCA LKICA /AND SAVE IT ISZ LKI /POINT TO BLOCK # ISZ LKI /POINT TO ERROR RETURN CML RAR /MAKE 0 ON WRITE, 4000 ON READ DCA LKIWR /SAVE IN/OUT STATUS LKICDF, CDF 0 TAD I BATADD /CHECK IF UNDER BATCH RAL L7700, SMA CLA JMP LKIERR /NO; TOO BAD! TAD I BATADD /YES AND LKI70 TAD CIFCD /YES; GET BATCH FIELD DCA BFLD2 JMP LKIKLG /JUMP INTO LOOP LKILP, CDF 0 /BUFFER DF IS STORED HERE TAD LKIWR /WAS IT WR OR RD? SPA CLA /+ MEANS OUTPUT JMP LKIGET /INPUT IS FROM LKI: LKIPUT, TAD I LKICA BSW /LEFT HALF FIRST AND LKI77 TAD LK4000 /SO THAT NULLS CAN BE WRITTEN JMS HCORE2 TAD I LKICA AND LKI77 /RIGHT HALF SECOND TAD LK4000 JMS HCORE2 JMP LKIADV LKIGET, JMS HCORE2 BSW DCA I LKICA JMS HCORE2 TAD I LKICA DCA I LKICA LKIADV, ISZ LKICA /BUMP INPUT POINTER LKI70, 70 /PROTECT ISZ LKIKLG, ISZ LKIWC /DONE? JMP LKILP /NOT YET TAD LKIWR /IF WRITE OPERATION TAD LKIEOF /AND EOF FLAG SET SZA CLA /WE HAVE A REAL EOF? JMP LKIX /NO, GET NEXT BUFFER-FULL TAD LK4232 /YES, WRITE CONTROL EOF JMS HCORE2 /WILL RECEIVING PROG. DELETE IT? / ------------- /NO RETURN; GOES TO LKIRTN LKIX, TAD LKIEOF /IF INPUT AND WE WERE PADDING WITH 0'S LKIRTN, SZA SMA /TAKE SOFT ERROR EXIT ISZ LKI /POINT TO NORMAL RETURN AND LK4000 /KEEP HARD ERROR ON INPUT OR OUTPUT LKIXIT, HLT /RETURN TO USER'S FIELD JMP I LKI /RETURN TO USER LKIERR, STL CLA RAR JMP LKIXIT LKIWC, 0 LKICA, 0 LKIEOF, 1 /0 IF SAW ^Z AND/OR PADDING BUFFER WITH 0'S LKIWR, 0 HCORE2, 0 /SUBROUTINE FOR HIGH CORE ACCESS HCPAD, SZA SMA /IS PATCHED WITH 'CLA2' ON INPUT EOF JMP HCCDBF /SKIPS ALWAYS;INPUT 0, OUTPUT - BFLD2, HLT /SET BATCH FIELD - CIFCD! DCA LTEMP2 TAD I VFYLKI /CHECK IF HIGH-CORE STILL OK DCA HLINK2 /POINTER TO LINK CHECK TAD I HLINK2 TAD MWVDM2 SZA CIFCD, CIF CDF /NO, RESET TO F 0 SZA CLA JMP LKIERR ISZ HLINK2 /NEXT WORD IS ADRESS OF TAD I HLINK2 /THE I/O ROUTINE IN HIGH CORE DCA HLINK2 TAD LTEMP2 JMS I HLINK2 /CALL HIGH CORE JMP LKIRTN /GO AWAY, WE SAW A ^Z ON OUTPUT /EOF=1 OR ERROR=4000 TAD LKM232 /DID WE GET EOF ON INPUT? SNA JMP LKIPAD /YES, WRITE BUFFER ^Z0000... TAD LKI232 /NO, RESTORE VALUE HCCDBF, HLT /CDF BUFFER FIELD JMP I HCORE2 /RETURN LKIPAD, TAD LK7600 /SET HCORE2 TO READ 0'S DCA HCPAD /WILL BE RESET ON NEXT ENTRY DCA LKIEOF /SET FOR SOFT ERROR TAD HCORE2 AND LK7600 /GET PAGE BOUNDARY TAD LKIEND /SET RETURN ADRESS OF HCORE2 DCA HCORE2 /IN ORDER TO SET DF JMP HCCDBF-1/AND STORE ONE ^Z LKIEND, LKIADV-1-LKI /IF LKI ON PAGE BOUNDARY LTEMP2, 0 HLINK2, 0 LK4000, 4000 VFYLKI, 5601 /**VOLATILE** FOR BATCHL.PA V 1A MWVDM2, -2715 /**-WM** LKM232, -232 LKI232, 232 LK4232, 4232 LKI77, 77 LK7600, 7600 BATADD, 7777 PAGE $$$