File RWTAP9.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file


/    SPECIAL TD8E DEVICE HANDLER.

/	MODIFIED RTAPE AND WTAPE TO HANDLE 129 WORDS
/	PER BLOCK.  OCCUPIES THREE PAGES AND HAS CALLING
/	SEQUENCE AS FOLLOWS:

/	CALL WTAPE(IUNIT,IBLOCK,IWORDS,IBUF,IER)


ABSYM DRIVE  0010	/UNITS 0 AND 1 SELECTED
ABSYM AFIELD 0000	/INITIAL FIELD SETTING
ABSYM MFIELD 0000	/AFIELD*10=MFIELD
ABSYM WDSBLK 0201	/129 WORDS PER BLOCK
OPDEF	SDSS 6771	/SKIP ON SINGLE LINE FLAG
OPDEF	SDST 6772	/SKIP ON TIMING ERROR
OPDEF	SDSQ 6773	/SKIP ON QUAD LINE FLAG
OPDEF	SDLC 6774	/LOAD COMMAND REGISTER
OPDEF	SDLD 6775	/LOAD DATA REGISTER
OPDEF	SDRC 6776	/READ COMMAND REGISTER
OPDEF	SDRD 6777	/READ DATA REGISTER
OPDEF	TADI 1400
OPDEF	DCAI 3400
OPDEF	JMPI 5400
OPDEF	JMSI 4400


	LAP

/ RTAPE,WTAPE SECTION OF THE HANDLER. ENTRY RTAP9 /READ TAPE ENTRY ENTRY WTAP9 /WRITE TAPE ENTRY /PARAMETER UNPACKING ROUTINE.... ARGAD, 0 HANDT, 0 GETARG, 0 /GETS NEXT ARGUMENT IN FORTRAN /GENERATED PARAMETER STRING GTCDF1, HLT /REPLACED BY CDF TADI WTAP9# /GET PARAM DATA FIELD DCA GTCDF2 INC WTAP9# /BUMP LIST ADDRESS TADI WTAP9# /GET PARAMETER ADDRESS DCA ARGAD /SAVE FOR INDIRECT (OR ARRAY) INC WTAP9# GTCDF2, HLT /REPLACED BY CDF TADI ARGAD /PASS VALUE IN ACC JMPI GETARG /EXIT QUIETLY.... /GENERAL DECODING AND PROCESSING (COMMON) DONE HERE. THEART, 0 JMS GETARG /GET THE UNIT NUMBER AND (1 /MUST BE 0 OR 1, SO.... CLL RAR /FORCE TO ZERO OR ONE. TAD HANDTD /COMPUTE THE ENTRY POINT TO /THE SYSTEM HANDLER ROUTINE. SZL /DTA0 OR DTA1....? TAD (4 DCA HANDT JMS GETARG /GET THE BLOCK NUMBER. SPA /IF NEGATIVE VALUED THEN SET ISZ ARG1 /FLAG IN THE FUNCTION WORD SPA /TO START THE SEARCH IN THE CIA /FORWARD DIRECTION. DCA ARG3 /BLOCK NUMBER = ARG3 JMS GETARG /GET THE NUMBER OF WORDS AND (3700 /CONVERT TO NUMBER OF BLOCKS CLL RAR TAD ARG1 /MASK INTO THE FUNCTION WORD DCA ARG1 JMS GETARG /FINALLY GET THE BUFFER CLA TAD GTCDF2 /MASK THE DATA FIELD INTO THE AND (0070 /FUNCTION WORD. TAD ARG1 DCA ARG1 TAD ARGAD /AND SET UP THE BUFFER ADDRESS DCA ARG2 DCA EROR / NOW CALL THE SYSTEM HANDLER.... DOIT, JMS I HANDT ARG1, 0 /FUNCTION WORD ARG2, 0 /BUFFER ADDRESS ARG3, 0 /BLOCK NUMBER DCA EROR /ERROR EXIT JMP I THEART /SEEMS RATHER PAINLESS.... EROR, 0 HANDTD, DTA0 / ENTRY POINT FOR WRITE FUNCTION (WTAP9) WTAP9, BLOCK 2 CLL CML RAR /SET WRITE FLAG WTPRS, DCA ARG1 /INTO FUNCTION WORD TAD WTAP9 /SET UP DATA FIELD CHANGE DCA GTCDF1 /FOR GETTING PARAMETERS JMS THEART /GO DO IT.... JMS GETARG /PASS BACK ERROR STSTUS CLA TAD EROR DCAI ARGAD RETRN WTAP9 / ENTRY POINT FOR READ FUNCTION (RTAP9) RTAP9, BLOCK 2 TAD RTAP9 /MOVE CALLING SEQ TO WTAPE DCA WTAP9 TAD RTAP9# DCA WTAP9# /ONLY DIFFERENCE IS THAT THE JMP WTPRS /FUNCTION FLAG IS FOR READ. PAGE
/ HERE STARTS THE RELOCATABLE VERSION OF THE TWO / PAGE TD8E HANDLER ROUTINE. C6201, 6201 CRDQUD, RDQUAD WCOUNT, 0 BUFF, 0 MWORDS, 7577 UNIT, 0 CXFUN, XFUNCT M20, -20 PGCT, 0 CXWCT, XWCT C100, 100 TRYCNT, -3 C70, 70 C3, 3 C374, 374 XXFELD, XFIELD DTA0, 0 /ENTRY POINT FROM UNIT 0 CLA CLL /0 TO LINK JMP DTA1X C1000, 1000 BLOKK, DTA1, 0 /UNIT 2 ENTRY CLA CLL CML /1 TO LINK TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /LINK TO UNIT POSITION TADI DTA0 /GET FUNCTION WORD SDLD /PUT FUNCTION INTO DATA REGISTER CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER /BLOCK INTO LINK SZL CLA /KNOCK ONE OFF WDSBLK? IAC /YES TAD MWORDS DCA WCOUNT /STORE MASTER WORD COUNT ISZ DTA0 /TO BUFFER TADI DTA0 DCA BUFF ISZ DTA0 /TO BLOCK NUMBER TADI DTA0 DCA BLOKK ISZ DTA0 /POINT TO ERROR EXIT SDRD /GET FUNCTION INTO AC CLL RAL AND CM200 /GET # PAGES TO XFER DCA PGCT SDRD AND C70 /GET FIELD FOR XFER TAD C6201 /FORM CDF N DCA I XXFELD /IF=0 AND DF=N AT XFER. CLA CLL CMA RTL DCA TRYCNT /3 ERROR TRIES TAD UNIT /TEST FOR SELECT ERROR SDLC SDRC AND C100 SZA CLA JMP EXIT#
SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. DCAI CXFUN TAD WCOUNT DCAI CXWCT SDRD /GET MOTION BIT TO LINK CLL RAR JMP GO /AND START THE MOTION. RWCOM, SDST /ANY CHECKSUM ERRORS? SZA CLA /OR CHECKSUM ERRORS? JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. TAD PGCT /NO ERROR..FINISHED XFER? TAD CM200 SNA JMP EXIT /ALL DONE. GET OUT DCA PGCT /NEW PAGE COUNT ISZ BLOKK /NEXT BLOCK TO XFER TAD WCOUNT /FORM NEXT BUFFER ADDRESS CIA TAD BUFF DCA BUFF CLL CML /FORCES MOTION FORWARD GO, CLA CML RTR /LINK BECOMES MOTION BIT TAD C1000 TAD UNIT /PUT IN 'GO' AND UNIT # SDLC /LOOK FOR BLOCK NO. JMSI CRDQUD /WAIT AT LEAST 6 LINES TO LOOK JMSI CRDQUD CM200, 7600 /COULD HAVE SAVED A LOC. HERE SRCH, SDSS JMP SRCH /WAIT FOR SINGLE LINE FLAG SDRC CLL RTL /DIRECTION TO LINK. INFO BITS /ARE SHIFTED. AND C374 /ISOLATE MARK TRACK BITS TAD M110 /IS IT END ZONE? SNA /THE LINK STAYS SAME THRU THIS JMP ENDZ TAD M20 /CHECK FOR BLOCK MARK SZA CLA JMP SRCH SDRD /GET THE BLOCK NUMBER SZL /IF WE ARE IN REVERSE, LOOK FOR 3 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. TAD C3 /REVERSE CMA TAD BLOKK CMA /IS IT RIGHT BLOCK? SNA JMP FOUND /YES..HOORAY! M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. JMP SRCH /YES ENDZ, SDRC /WE ARE IN THE END ZONE CLL RTL /DIRECTION TO LINK SZL CLA /ARE WE IN REVERSE? JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR TRY3, ISZ TRYCNT JMP GO /TRY 3 TIMES CLL CLA JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN EXIT, ISZ DTA0 CLL CML /AC=0 ON NORMAL RETURN FATAL, TAD UNIT SDLC /STOP THE UNIT CLA CML RAR LEAVE, JMP I DTA0
FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? JMP GO /WRONG..TURN AROUND TAD UNIT /PUT UNIT INTO LINK CLL RAL /AC IS NOW 0 TAD BUFF /GET BUFFER ADDRESS JMPI XXFELD PAGE CFATAL, FATAL CRWCOM, RWCOM XFUNCT, 0 CM32, -32 C1400, 1400 CHKSUM, 0 WORDS, 0 XBUFF, 0 XWCT, 0 EQUTMP, 0 XFIELD, HLT /CHANGE THE DATA FIELD DCA XBUFF /SAVE ADDRESS RAR /NOW GET UNIT # DCA XUNIT TAD XWCT DCA WORDS /WORD COUNTER REVGRD, SDSS JMP REVGRD /LOOK FOR REVERSE GUARD SDRC AND K77 TAD CM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO.KEEP LOOKING TAD XFUNCT /GET FUNCTION READ OR WRITE K7700, SMA CLA JMP READ /NEG. IS WRITE WRITE, SDRC AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS SZA CLA JMPI CFATAL /FATAL ERROR. LINK MUST BE ON JMS RDQUAD /NO ONE EVER USES THIS WORD! C7600, 7600 TAD C1400 TAD XUNIT /INITIATE WRITE MODE SDLC CLA CMA JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM CLA CMA DCA CHKSUM WRLP, TADI XBUFF /GLORY BE! THE ACTUAL WRITE! JMS WRQUAD ISZ XBUFF /BUMP CORE POINTER K77, 77 /ABOVE MAY SKIP ISZ WORDS /DONE THIS BLOCK? JMP WRLP /NOT YET..LOOP A WHILE TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? CLL RTR /IF NO, WRITE A 0 WORD SZL CLA
JMS WRQUAD /WRITE A WORD OF 0 JMS GETCHK /DO THE CHECK SUM JMS WRQUAD /WRITE FORWARD CHECKSUM JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN JMPI CRWCOM READ, JMS RDQUAD JMS RDQUAD JMS RDQUAD /SKIP CONTROL WORDS AND K77 TAD K7700 /TACK 7700 ONTO CHECKSUM. DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY RDLP, JMS RDQUAD JMS EQUFUN /COMPUT CHECKSUM AS WE GO DCAI XBUFF /IT GETS CONDENSED LATER ISZ XBUFF C300, 300 /PROTECTION ISZ WORDS /DONE THIS OP? JMP RDLP /NO SUCH LUCK TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND CLL RTR /CHECKSUM THE LAST TAPE WORD SNL CLA JMP RDLP2 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK JMS EQUFUN /CHECKSUM IT RDLP2, JMS RDQUAD /READ CHECKSUM AND K7700 JMS EQUFUN JMS GETCHK /GET SIX BIT CHECKSUM JMPI CRWCOM WRQUAD, 0 /WRITE OUT A 12 BIT WORD JMS EQUFUN /ADD THIS TO CHECKSUM WRQUQ, SDSQ /SKIP ON QUADLINE FLAG JMP WRQUQ SDLD /LOAD DATA ONTO BUS CLA /SDLD DOESN'T CLEAR AC JMPI WRQUAD RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP RDQUAD# SDRD /READ DATA JMPI RDQUAD
XUNIT, EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE CIA /IS ASSOCIATIVE, WE CAN DO IT 12 CLL RAL /BITS AT A TIME AND CONDENSE LATER. TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMPI EQUFUN GETCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CHKSUM CMA CLL RTL RTL RTL JMS EQUFUN CLA CLL CML /FORCES LINK ON AT RWCOM TAD CHKSUM AND K7700 JMPI GETCHK END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search