File: TM8EZ.PA of Tape: OS8/OS8-V40/v40-10
(Source file text)
/TM8EZ MAGTAPE HANDLER KBM V40 / / / / / / / / / /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, ZUERICH, 1-JAN-80 /TM8E HANDLER (TM8EZ.PA) / / MODIFIED BY / R. W. PHELPS / BEHAVIOR LAB / UNIV. OF ROCHESTER / 10/76 / AND BY / W.V.D.MARK / DATAPLAN GMBH / ZUERICH / JUL-79 / LWCR=6701 /LOAD WORD COUNT REGISTER AND CLEAR AC LCAR=6703 /LOAD CURRENT ADDRESS REGISTER AND CLEAR AC LCMR=6705 /LOAD COMMAND REGISTER AND CLEAR AC LFGR=6706 /LOAD FUNCTION REGISTER AND CLEAR AC CLT=6712 /CLEAR TRANSPORT RMSR=6714 /CLEAR AC AND READ MAIN STATUS REGISTER SKEF=6721 /SKIP IF ERROR FLAG IS SET SKJD=6723 /SKIP IF THE JOB IS DONE (MTTF IS SET) SKTR=6724 /SKIP IF TAPE UNIT READY MTAVERSION="M&77 /SPECIAL CODES USED WHEN PAGE COUNT=0 (CODES IN BITS 9-11 OF FN WORD) / /0 (CLOSE) WRITE 2 EOF'S; THEN BACKSPACE OVER ONE OF THEM /1 REWIND /2 SPACE FORWARD/REVERSE RECORDS / IF BIT 0 OF THE FUNCTION WORD IS A 0, / THIS CODE ADVANCES RECORDS. / THE NEGATIVE OF THE NUMBER OF RECORDS IS SPECIFIED IN ARG 3 / IF BIT 0 OF THE FUNCTION WORD IS A 1, / THIS CODE BACKSPACES RECORDS. / THE NEGATIVE OF THE NUMBER OF RECORDS IS SPECIFIED AS ARG 3. / THIS COMMAND ALWAYS STOPS AFTER READING A FILE MARK. /3 SPACE FORWARD/REVERSE FILES / IF BIT 0 OF THE FUNCTION WORD IS A 0 / THEN THIS FUNCTION ADVANCE FILE MARKS / THE NEGATIVE OF THE NUMBER OF FILE MARKS IS SPECIFIED BY ARG3 / THE TAPE IS LEFT POSITIONED AFTER THIS FILE MARK / BUT UNDER NO CIRCUMSTANCES DOES THE TAPE ADVANCE PAST / THE SECOND MARK OF TWO CONSECUTIVE FILE MARKS / IF BIT 0 OF THE FUNCTION WORD IS A 1, / THIS CODE BACKSPACES PAST FILE MARKS. / THE NEGATIVE OF THE NUMBER OF FILE MARKS IS SPECIFIED BY ARG 3. / THE TAPE IS LEFT POSITIONED BEFORE THE LAST FILE MARK, / SO THE USER PROBABLY WANTS TO DO A FORWARD RECORD NEXT. /4 REWIND AND PUT OFF-LINE (UNLOAD) /5 WRITE EOF; PHYSICALLY THE SAME AS FN 0 /6 PERFORM OPERATION WITH SPECIFIED BLOCKSIZE / THE NEGATIVE OF THE DESIRED BLOCKSIZE IS SPECIFIED AS ARG 3. / (BLOCKSIZE REFERS TO THE ACTUAL OS/8 BUFFER SIZE AND / MUST BE .LE. 5000(8) (7400(8) CHARACTERS).) /7 CURRENTLY UNUSED /TM8E DESCRIPTION / /LCMR: BITS: / / 7000 UNIT 0-7 / 0400 0=EVEN,1=ODD / 0200 INTENA ERROR / 0100 INTENA JOB DONE / 0070 EMA / 0003 BPI: 0=200,1=556,2=800,3=800(9-TRACK) / /LFGR: 7000 0: OFF LINE / 1: REWIND / 2: READ / 3: READ/COMPARE / 4: WRITE / 5: WRITE EOF / 6: SPACE FORWARD / 7: SPACE REVERSE / 0400 EXTEND GAP / 0200 ENABLE CHECK CHARS / 0100 GO / 0040 EMA INC ENABLE / /RMSR 0: ERROR FLAG 1: REWINDING 2: BOT / 3: NOT ON-LINE 4: PARITY ERR 5: EOF / 6: LENGTH ERR 7: DATA LATE 8: EOT / 9: WRITE PROT. 10: COMP. ERR 11: ILL. FUNC. / /RFSR 0-5:FUNCTION / 6: 9-CHANNEL 7: BAD TAPE 8: EMA 7 INC. ERR / 9: LAT. PARITY 10: NOTHING 11: LONG. PARITY /BUILD DESCRIPTOR BLOCK *0 -1 /1 ENTRY POINT DEVICE TM8X;DEVICE MTA0;200;MTA0&177+4000;ZBLOCK 2 / /NOTE: MOST OF FIELD X IS USED AND DESTROYED BY THE /EXTENDED SEGMENT OF THIS HANDLER. USER PROGRAMS MAY /USE THIS FIELD BUT NOT EXPECT ITS CONTENTS TO REMAIN /UNDISTURBED. / / ********** NOTE CAREFULLY! ********** / /THE EXTENDED HANDLER TM8EEX MUST BE STORED ON SYSTEM /BLOCK 26 FOR THIS HANDLER TO WORK. THAT BLOCK WAS HALF /USED BY THE ENTER PROCESSOR, THE SECOND HALF NOW CONTAINS /TM8EEX IN KBM V40. / /CALLING SEQUENCE FOR TM8EEX -- / / AC = 0 OR AC = -1 / CIF X / JMS TM8EEZ / FUNCTION WORD / BUFFER LOCATION / BLOCK NUMBER (USED FOR SPECIAL BUFFER SIZE) / / IF WRITE AND AC=0 ---> DO NOTHING / IF WRITE AND AC=-1 ---> UNPACK / IF COUNT=0 AND CODE=6 ---> SPECIAL BUFFER SIZE / IF READ AND AC=0 ---> PACK / IF COUNT=0 AND CODE=6 ---> SPECIAL BUFFER SIZE / IF READ AND AC=-1 ---> CLEAR CORE TAPBUF=400 *200 /THE FIRST TWO LOCATIONS ARE TEMPORARIES /AND NO LONGER MATTER RE: PARITY AND /BLOCK 0 BEHAVIOR OF THE HANDLER. SECOND, 0 SETBFR, 0 /CALL BUFFER PACK/UNPACK TM8XFL, HLT /CIF XFIELD JMS I TM8EEX MTFUN, 0 /FUNCTION NBUFF, 0 /CORE NBLOK, 0 JMP I SETBFR PARITY, 433 /CONTENTS OF COMMAND REGISTER TM8EEX, 202 /ENTRY POINT OF TM8EEX *KLUDGE* STOP, P7600, 7600 JMS SETBFR /PACK BUFFER TAD SECOND SNA /SECOND HALF OF BUFFER TO DO? JMP MTEXIT-1 /NO DCA MTFUN /YES - SET FUNCTION DCA SECOND JMP CKWRIT /GO DO IT / ISZ MTHX /BUMP FOR NORMAL EXIT MTEXIT, HLT /CIF CDF TO USER'S FIELD JMP I MTHX / / PNEXT, 0 /CONTAINS FIRST LOC ON NEXT PAGE CLA TAD K3700 AND I MTHX /CHECK NUMBER OF BLOCKS CLL RTL /L=1 IF .GE. 20; AC=0 IF .EQ. 20 SNA CLA CLL /L=0 IF .LE. 20; AC=0 SZL TAD K6077 /SET UP SECOND IF .GT. 20 BLOCKS AND I MTHX DCA SECOND /OTHERWISE IT BECOMES 0 CMA CML RTR /MASK OUT 20 BLOCKS OF .GT. 20 (L=1) AND I MTHX DCA MTFUN ISZ MTHX /POINT TO BUFFER ADDRESS TAD I MTHX /BUFFER ADDRESS DCA NBUFF /AND STORE AWAY ISZ MTHX /POINT TO BLOCK NUMBER TAD I MTHX /GET BLOCK NUMBER DCA NBLOK /STORE AWAY ISZ MTHX /POINT TO ERROR RETURN RDF /GET CALLING FIELD TAD MTCDIF /CREATE CIF CDF TO USER'S FIELD DCA MTEXIT /STORE AWAY WHERE WILL BE USEFUL LATER MTCDIF, CIF CDF 0 /GO TO FIELD 0 TAD I K7777 AND K70 TAD M40 /IF LESS THAN 4 USE FIELD 3 SPA CLA /NOT ENOUGH MEMORY, MAY NOT WORK! TAD K26 /PROTECT BATCH IF ENOUGH DCA SYSCTL /SHOULD REALLY BE K30 CLA IAC /K27 TAD SYSCTL TAD MTCDIF /K30 FOR CIF DCA TM8XFL TAD SYSCTL TAD TM8EEX /=202 FOR 2-PAGES AND K30 DCA SYSCTL JMS I SYSHND /READ IT INTO CORE SYSCTL, HLT /200+XFIELD 0 K26, 26 /ABSOLUTE BLOCK FOR EXTENDED HANDLER HLT /READ ERROR CKWRIT, CLA CMA /ZERO BUFFER FOR PIP IF READ JMS SETBFR /WRITE - UNPACK BUFFER TAD MTFUN PGCHK, JMS I PNEXT /GO READ OR WRITE NEXT PAGE / MTH /SET UP WC AND CA REGISTERS, LOAD FUNCTION AND GO /CALLING SEQUENCE: / TAD (FNWORD / JMS MTH / BUFFER ADDRESS-1 / -WORD COUNT / MASK FOR UNACCEPTABLE ERROR CONDITIONS / <NORMAL RETURN> / TAKES HANDLER ERROR RETURN ON ERRORS. / IF ERROR, AC HAS ERROR CODE FROM MAIN STATUS REGISTER / AC IS POSITIVE IF E.O.F. READ MTH, 0 /MUST BE AT 1ST LOC AFTER CALL TO NEXT DCA ERROR /SAVE FUNCTION TEMPORARILY SKTR JMP .-1 CLT /CLEAR THE WORLD TAD PARITY LCMR /LOAD COMMAND REGISTER TAD I MTH /GET CURRENT ADDRESS LCAR /LOAD IT ISZ MTH /POINT TO WORD COUNT TAD I MTH /GET WORD COUNT (TWO'S COMPLEMENT THEREOF) LWCR /LOAD IT ISZ MTH /POINT TO ERROR MASK TAD ERROR /GET FUNCTION BACK LFGR /GO BABY GO JMS ERROR /CHECK FOR ERROR SKJD /THROUGH? JMP .-2 /NO JMS ERROR /YES, ANY ERRORS? E1, ISZ MTH JMP I MTH /NORMAL RETURN IFNZRO MTH-PGCHK-1 <MTHERR,XXX> ERROR, 0 TAD P7600 KRS /IS IT CTRL/C? TAD M7603 /ALLOW PARITY SNA CLA KSF JMP SIFE CLT /ABORT I/O JMP I P7600 /RETURN TO OS/8 KEYBOARD MONITOR SIFE, SKEF /SKIP ON ERROR JMP I ERROR /RETURN, NO ERRORS RMSR AND I MTH /IS THIS AN ERROR TO IGNORE? SNA JMP E1 /YES (EOF DURING SKIP) AND L100 /IS IT AN E.O.F.? SZA CLA JMP ENDFIL /HANDLE END OF FILES SPECIAL RMSR JMP MTEXIT /AND LEAVE WITH STATUS IN AC / ENDFIL, JMS SETBFR /NOW PACK IT TAD SECOND DCA MTFUN CLA CMA JMS SETBFR /FIRST ZERO THE REST OF THE BUFFER JMS SETBFR /NOW PACK IT JMP MTEXIT /TAKE SOFT ERROR RETURN / / K3700, 3700 K6077, 6077 M7603, -7603 SYSHND, 7607 K7777, 7777 K70, 70 M40, -40 L100, 100 / IFZERO .-MTHX-1&4000 <PERR,ZZXX> *376 MTHX, MTA0, MTAVERSION JMS PNEXT /GET ADDRESS OF FIRST LOCATION ON NEXT PAGE PAGE *400 NEXT, 0 DCA RECNO /READ OR WRITE AND HOW MANY TAD NEXT TAD KSTOP DCA NSTOP /ADDRESS OF RETURN ROUTINES TAD NEXT TAD KBLOK DCA SIZE TAD I SIZE DCA SIZE TAD (3673 /MASK TO IGNORE EOF ERROR DCA EOF TAD RECNO CLL RAL /LINK SPECIFIES READ OR WRITE AND L7600 /-(# OF BLOCKS)^200 SNA JMP ZERO /0 PAGE COUNT! DCA RECNO SZL /READ OR WRITE? STL CLA RTR /WRITE. +2000 TO CONVERT READ CODE TO WRITE CODE TAD L2100 /READ (OR WRITE) & GO DCA TEMP /SAVE THIS COMMAND TAD MSIZE DCA SIZE /OS/8 USES 256 WORD BLOCKS TAD (3737 /IGNORE BLOCK SIZE ERRORS -- / THUS SHORT BLOCKS ARE PADDED WITH / ZEROS AND LONG BLOCKS ARE TRUNCKATED. DCA EOF /EOF IS LEGAL ERROR TAD (TAPBUF-1 DCA BUFFER RL1, TAD TEMP JMS DO TAD BUFFER /NEXT 400 WORDS TAD PSIZE DCA BUFFER TAD RECNO /ANY MORE? CLL CML TAD (-400 /SUBTRACT WORDS READ FROM WORD COUNT SNA SZL /IF NO OVERFLOW, WE'RE DONE JMP I NSTOP /FINISH DCA RECNO /MORE, LOOP JMP RL1 /REJOIN PROCESSING KSTOP, STOP-MTH /USED TO RELOCATE 'STOP' KBLOK, NBLOK-MTH COUNT, 0 TEMP, 0 EFL2, TAD L5100 /WRITE 2 EOF'S JMS DO TAD L5100 /WRITE AN EOF JMS DO JMP SPACE-1 /BACKSPACE OVER LAST EOF DO, 0 JMS I NEXT /GO DO IT (CALL MTH) BUFFER, 7777 /BUFFER LOCATION SIZE, 0 /NEGATIVE OF BLOCK SIZE EOF, 0 JMP I DO L5100, 5100 RECNO, 0 NSTOP, 0 L7, 7 L2100, 2100 ZERO, TAD RECNO /RETRIEVE FN WORD (MUST PRESERVE LINK) AND L7 /ISOLATE SPECIAL CODE TAD PJUMP DCA .+1 FN, HLT /BRANCH THROUGH JUMP TABLE TABLE, JMP EFL2 /0 CLOSE. WRITE TWO EOF'S JMP REW /1 REWIND JMP SPACE /2 SPACE FORWARD/REVERSE RECORDS JMP SEOF /3 SPACE FORWARD/REVERSE FILES JMP UNLOAD /4 REWIND AND OFF-LINE JMP EFL2 /5 WRITE EOF JMP SPEC /6 READ OR WRITE WITH SPECIAL BLOCKSIZE PJUMP, JMP TABLE SEOF, RAR /LINK ON MEANS REVERSE RTR DCA FN TAD SIZE /NEG. OF # BLOCKS OR FILES TO SKIP DCA TEMP STA DCA SIZE FILE, CLA IAC FILE2, DCA COUNT /BECOMES NON-ZERO IF ANY DATA FOUND BEFORE / FILE MARK IS READ. TAD FN TAD L6100 JMS DO RMSR AND P100 /SPACE FORWARD TO FILE MARK SNA CLA JMP FILE TAD FN TAD COUNT SZA CLA /WAS THERE ANY DATA? JMP FILE3 /YES, CONTINUE CLL CML /NO - EOT SPACE, RAR /LINK ON MEANS REVERSE (READ BIT) STL RAR STL RAR UNLOAD, TAD P100 /ADD IN 'GO' BIT JMS DO JMP I NSTOP FILE3, ISZ TEMP JMP FILE2 /CONTINUE? JMP I NSTOP L6100, 6100 P100, 100 L7600, 7600 MSIZE, -600 /BLOCK SIZE PSIZE, 600 SPEC, SZL /LINK STILL CONTAINS READ/WRITE BIT STL CLA RTR TAD L2100 JMP UNLOAD+1 REW, TAD (1000 JMP UNLOAD PAGE $