/GEORGE FRIEDMAN /MAN VEHICLE CONTROL LABORATORY /MASSACHUSETTS INSTITUTE OF TECHNOLOGY /CAMBRIDGE, MASSACHUSETTS / /ONE PAGE SUBROUTINES FOR READ, WRITE & SEARCH OF DECTAPE /WITH OR WITHOUT INTERUPT OPERATION /FOR DECTAPE CONTROL TYPE 552 ONLY. / /CALL IS JMS I X /X CONTAINS READ OR WRITE / CORE /ADDRESS FOR DATA / ERROR /RETURN ADDRESS IN CASE OF ERROR / UNIT /IN BITS 2-5,ZEROS ELSEWHERE / NUMBER /OF BLOCKS, 0 FOR SEARCH ONLY / BLOCK /INITIAL BLOCK ON TAPE / /NON-INTERUPT OPERATION, DEFINE DISM=NOP IN ASSEMBLY / PROGRAM IS HELD UP UNTIL OPERATION COMPLETE /INTERUPT OPERATION, DEFINE DISM=JMP Z SCAT OR JMP I Z SCAT / AS EXPLAINED FOR DEC STANDARD SUBROUTINES / SET UP INTERUPT ROUTINE / INT,(SAVE AC, LK, CLEAR AC) / MMRS / RAL / SNL SMA (CLA) / SKP / JMP I Y / ... / ... / Y, RETURN /RETURN=WRITE+141 / DONE (=READ) CAN BE TESTED FOR COMPLETION. / /TO SEARCH ONLY, REQUEST 0 BLOCKS, CORE IMMATERIAL /THE 129TH WORD IS PROPERLY HANDLED. /ALL BLOCKS (INCLUDING 0) CAN BE READ AND WRITTEN /IN CASE OF ERROR RETURN, STATUS IS IN AC. / WRITE,0 /WRITE ENTRY CLA TAD WRITE /GET ADDRESS OF LIST JMS PICKUP /GO PICKUP AND SEARCH STL RTL /SET AC=2,2+RDF=WRITE FORWARD BITS JMP READ+4 READ,0 /READ ENTRY CLA TAD READ JMS PICKUP TAD RDF /GET READ FORWARD BITS WORK,MMLF /SET FUNCTION TAD NBLOCK SNA CLA JMP EXIT /0 BLOCKS REQUESTED, EXIT RLP,TAD CORE /SET CORE ADDRESS MMML TAD CORE TAD K0200 DCA CORE TAD I CORE /SAVE 129TH WORD DCA SAVE JMS DELAY /WAIT FOR END OF BLOCK TAD SAVE /RESTORE 129TH WORD DCA I CORE ISZ NBLOCK /COMPLETE? JMP RLP /NO! EXIT,MMMF /YES! STOP TAPE JMS DELAY /WAIT FOR TAPE TO STOP CLA CMA /SET DONE=-1 DCA DONE MMCF DISM /EXIT JMP I Z 0 PICKUP,0 /PICKUP LIST IOF DCA Z 0 DCA DONE /DONE=0 TAD I Z 0 DCA CORE /GET CORE ADDRESS TAD I CORE /SET UP SAVE IN CASE OF SEARCH ERROR DCA SAVE ISZ Z 0 TAD I Z 0 /GET ERROR RETURN ADDRESS DCA ERROR ISZ Z 0 TAD I Z 0 /GET UNIT NUMBER AND MASK DCA UNIT ISZ Z 0 TAD I Z 0 /GET NUMBER OF BLOCKS CIA DCA NBLOCK ISZ Z 0 TAD I Z 0 /GET INITIAL BLOCK CIA DCA MRBLK ISZ Z 0 /FIRST RETURN IS VIA Z 0 SEARCH,TAD ABLOCK /SEARCH FOR BLOCK MMML TAD C8 /SET UP REVERSAL ERROR COUNTER DCA COUNT SFWD,TAD SRCHF /SEARCH FORWARD TAD UNIT MMMM JMS DELAY /WAIT FOR SET-UP DELAY FSC,DCA DIREC /SET DIRECTION SWITCH SCONT,JMS DELAY /WAIT FOR BLOCK NUMBER TAD BLOCK /ACTUAL BLOCK TAD MRBLK /-REQUESTED BLOCK SNA /ARE WE THERE? JMP FOUND /YES! ISZ DIREC /NO, WHAT DIRECTION? JMP .+4 /FORWARD! SMA CLA /REVERSE, IS REVERSE CORRECT? JMP RSC /YES, LET SEARCH CONTINUE JMP REVD /NO, REVERSE DIRECTION SPA CLA /IS FORWARD CORRECT? JMP FSC /YES, LET SEARCH CONTINUE REVD,ISZ COUNT /REVERSE DIRECTION SKP JMP TILT+4 /ERROR, BLOCK CAN'T BE FOUND TAD DIREC SNA CLA /REV=0,FWD=1, AT THIS TIME JMP SFWD SREV,TAD SRCHR /SEARCH REVERSE MMMF JMS DELAY /WAIT FOR SET-UP FLAG RSC,CLA CMA /DIRECTION SWITCH=-1 JMP SCONT-1 FOUND,ISZ DIREC /BLOCK FOUND, DIRECTION? JMP I PICKUP /FORWARD,RETURN JMS DELAY /REVERSE,WAIT TO PASS OVER IT JMP SFWD /GO SEARCH FORWARD DELAY,0 /WAIT FOR DT FLAG MMCF /CLEAR FLAGS DISM /NOP OR JUMP TO SCAT RETURN,MMSF /RETURN ON INTERUPT JMP .-1 CLA CLL MMSC JMP I DELAY TILT,MMRS /END ZONE? RTL SPA CLA JMP REVD /YES, REVERSE DIRECTION MMMF /NO, STOP TAPE TAD SAVE /RESTORE 129TH WORD DCA I CORE MMRS /GET STATUS MMSF JMP .-1 JMP I ERROR /ERROR RETURN /CONSTANTS AND VARIABLES ABLOCK,BLOCK SRCHF,21 SRCHR,31 RDF,22 K0200,200 C8,7770 BLOCK,0 CORE,0 UNIT,0 MRBLK,0 NBLOCK,0 DIREC,0 COUNT,0 SAVE,0 MASK,1700 ERROR=WRITE DONE=READ $