File RWTAP9.LS (listing file)

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



AFIELD  0000ABS 
ARGAD   0200
ARG1    0253
ARG2    0254
ARG3    0255
BLOKK   0424
BUFF    0403
CFATAL  0600
CHKSUM  0605
CM200   0524
CM32    0603
CRDQUD  0401
CRWCOM  0601
CXFUN   0406
CXWCT   0411
C100    0412
C1000   0423
C1400   0604
C3      0415
C300    0700
C374    0416
C6201   0400
C70     0414
C7600   0640
DCAI    3400OP
DOIT    0251
DRIVE   0010ABS 
DTA0    0420
DTA1    0424
DTA1X   0430
ENDZ    0552
EQUFUN  0732
EQUTMP  0611
EROR    0261
EXIT    0562
FATAL   0564
FOUND   0571
GETARG  0202
GETCHK  0747
GO      0516
GTCDF1  0203
GTCDF2  0212
HANDT   0201
HANDTD  0262
JMPI    5400OP
JMSI    4400OP
K77     0653
K7700   0630
LEAVE   0567
MFIELD  0000ABS 
MWORDS  0404
M110    0550
M20     0407
PGCT    0410
RDLP    0674
RDLP2   0711
RDQUAD  0725
READ    0666
REVGRD  0620
RTAP9   0300EXT 
RWCOM   0500
SDLC    6774OP
SDLD    6775OP
SDRC    6776OP
SDRD    6777OP
SDSQ    6773OP
SDSS    6771OP
SDST    6772OP
SRCH    0525
TADI    1400OP
THEART  0215
TRYCNT  0413
TRY3    0556
UNIT    0405
WCOUNT  0402
WDSBLK  0201ABS 
WORDS   0606
WRITE   0632
WRLP    0650
WRQUAD  0716
WRQUQ   0720
WTAP9   0263EXT 
WTPRS   0266
XBUFF   0607
XFIELD  0612
XFUNCT  0602
XUNIT   0732
XWCT    0610
XXFELD  0417


                /    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)


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


                        LAP

                /  RTAPE,WTAPE SECTION OF THE HANDLER.


                ENTRY RTAP9             /READ TAPE ENTRY
                ENTRY WTAP9             /WRITE TAPE ENTRY

                /PARAMETER UNPACKING ROUTINE....

0200  0000      ARGAD,  0
0201  0000      HANDT,  0

0202  0000      GETARG, 0               /GETS NEXT ARGUMENT IN FORTRAN
                                        /GENERATED PARAMETER STRING
0203  7402      GTCDF1, HLT             /REPLACED BY CDF
0204  1664              TADI  WTAP9#    /GET PARAM DATA FIELD
0205  3212              DCA   GTCDF2
0206  2264              INC   WTAP9#    /BUMP LIST ADDRESS
0207  1664              TADI  WTAP9#    /GET PARAMETER ADDRESS
0210  3200              DCA   ARGAD     /SAVE FOR INDIRECT (OR ARRAY)
0211  2264              INC   WTAP9#
0212  7402      GTCDF2, HLT             /REPLACED BY CDF
0213  1600              TADI   ARGAD    /PASS VALUE IN ACC
0214  5602              JMPI   GETARG   /EXIT QUIETLY....


                /GENERAL DECODING AND PROCESSING (COMMON) DONE HERE.


0215  0000      THEART, 0
0216  4202              JMS   GETARG    /GET THE UNIT NUMBER
0217  0377              AND   (1        /MUST BE 0 OR 1, SO....
0220  7110              CLL RAR         /FORCE TO ZERO OR ONE.
0221  1262              TAD   HANDTD    /COMPUTE THE ENTRY POINT TO
                                        /THE SYSTEM HANDLER ROUTINE.
0222  7430              SZL             /DTA0 OR DTA1....?
0223  1376              TAD   (4
0224  3201              DCA   HANDT
0225  4202              JMS   GETARG    /GET THE BLOCK NUMBER.
0226  7510              SPA             /IF NEGATIVE VALUED THEN SET
0227  2253              ISZ   ARG1      /FLAG IN THE FUNCTION WORD
0230  7510              SPA             /TO START THE SEARCH IN THE
0231  7041              CIA             /FORWARD DIRECTION.
0232  3255              DCA   ARG3      /BLOCK NUMBER = ARG3
0233  4202              JMS   GETARG    /GET THE NUMBER OF WORDS
0234  0375              AND   (3700     /CONVERT TO NUMBER OF BLOCKS
0235  7110              CLL RAR
0236  1253              TAD   ARG1      /MASK INTO THE FUNCTION WORD
0237  3253              DCA   ARG1
0240  4202              JMS   GETARG    /FINALLY GET THE BUFFER
0241  7200              CLA
0242  1212              TAD   GTCDF2    /MASK THE DATA FIELD INTO THE
0243  0374              AND   (0070     /FUNCTION WORD.
0244  1253              TAD   ARG1
0245  3253              DCA   ARG1
0246  1200              TAD   ARGAD     /AND SET UP THE BUFFER ADDRESS
0247  3254              DCA   ARG2
0250  3261              DCA   EROR


                /  NOW CALL THE SYSTEM HANDLER....


0251  6201 05   DOIT,   JMS I HANDT
0252  4601   
0253  0000      ARG1,   0               /FUNCTION WORD
0254  0000      ARG2,   0               /BUFFER ADDRESS

0255  0000      ARG3,   0               /BLOCK NUMBER
0256  3261              DCA   EROR      /ERROR EXIT
0257  6201 05           JMP I THEART    /SEEMS RATHER PAINLESS....
0260  5615   

0261  0000      EROR,   0
0262  0420 01   HANDTD, DTA0



                / ENTRY POINT FOR WRITE FUNCTION (WTAP9)


0263  0000      WTAP9,  BLOCK 2
0264  0000   
0265  7130              CLL CML RAR     /SET WRITE FLAG
0266  3253      WTPRS,  DCA   ARG1      /INTO FUNCTION WORD
0267  1263              TAD   WTAP9     /SET UP DATA FIELD CHANGE
0270  3203              DCA   GTCDF1    /FOR GETTING PARAMETERS
0271  4215              JMS   THEART    /GO DO IT....
0272  4202              JMS   GETARG    /PASS BACK ERROR STSTUS
0273  7200              CLA
0274  1261              TAD   EROR
0275  3600              DCAI  ARGAD
0276  4040              RETRN WTAP9
0277  0002 06


                /  ENTRY POINT FOR READ FUNCTION (RTAP9)


0300  0000      RTAP9,  BLOCK 2
0301  0000   
0302  1300              TAD   RTAP9     /MOVE CALLING SEQ TO WTAPE
0303  3263              DCA   WTAP9
0304  1301              TAD   RTAP9#
0305  3264              DCA   WTAP9#    /ONLY DIFFERENCE IS THAT THE
0306  5266              JMP   WTPRS     /FUNCTION FLAG IS FOR READ.

0374  0070   
0375  3700   
0376  0004   
0377  0001   
                        PAGE



                /    HERE STARTS THE RELOCATABLE VERSION OF THE TWO
                /       PAGE TD8E HANDLER ROUTINE.

0400  6201      C6201,  6201
0401  0725 01   CRDQUD, RDQUAD
0402  0000      WCOUNT, 0
0403  0000      BUFF,   0
0404  7577      MWORDS, 7577
0405  0000      UNIT,   0
0406  0602 01   CXFUN,  XFUNCT
0407  7760      M20,    -20
0410  0000      PGCT,   0
0411  0610 01   CXWCT,  XWCT
0412  0100      C100,   100
0413  7775      TRYCNT, -3
0414  0070      C70,    70
0415  0003      C3,     3
0416  0374      C374,   374
0417  0612 01   XXFELD, XFIELD


0420  0000      DTA0,   0               /ENTRY POINT FROM UNIT 0
0421  7300              CLA CLL         /0 TO LINK
0422  5230              JMP DTA1X
0423  1000      C1000,  1000
                BLOKK,
0424  0000      DTA1,   0               /UNIT 2 ENTRY
0425  7320              CLA CLL CML     /1 TO LINK
0426  1224              TAD DTA1
0427  3220              DCA DTA0        /PICK UP ARGS AT DTA0
0430  7010      DTA1X,  RAR
0431  3205              DCA UNIT        /LINK TO UNIT POSITION
0432  1620              TADI DTA0       /GET FUNCTION WORD
0433  6775              SDLD            /PUT FUNCTION INTO DATA REGISTER
0434  7112              CLL RTR         /AC STILL HAS FUNCTION. PUT # WORDS PER
                                        /BLOCK INTO LINK
0435  7630              SZL CLA         /KNOCK ONE OFF WDSBLK?
0436  7001              IAC             /YES
0437  1204              TAD MWORDS
0440  3202              DCA WCOUNT      /STORE MASTER WORD COUNT
0441  2220              ISZ DTA0        /TO BUFFER
0442  1620              TADI DTA0
0443  3203              DCA BUFF
0444  2220              ISZ DTA0        /TO BLOCK NUMBER
0445  1620              TADI DTA0
0446  3224              DCA BLOKK
0447  2220              ISZ DTA0        /POINT TO ERROR EXIT
0450  6777              SDRD            /GET FUNCTION INTO AC
0451  7104              CLL RAL
0452  0324              AND CM200       /GET # PAGES TO XFER
0453  3210              DCA PGCT
0454  6777              SDRD
0455  0214              AND C70         /GET FIELD FOR XFER
0456  1200              TAD C6201       /FORM CDF N
0457  6201 05           DCA I XXFELD    /IF=0 AND DF=N AT XFER.
0460  3617   
0461  7346              CLA CLL CMA RTL
0462  3213              DCA TRYCNT      /3 ERROR TRIES
0463  1205              TAD UNIT        /TEST FOR SELECT ERROR
0464  6774              SDLC
0465  6776              SDRC
0466  0212              AND C100
0467  7640              SZA CLA
0470  5363              JMP EXIT#
0471  6777              SDRD            /PUT FUNCT INTO XFUNCT IN SECOND PG.
0472  3606              DCAI CXFUN
0473  1202              TAD WCOUNT
0474  3611              DCAI CXWCT
0475  6777              SDRD            /GET MOTION BIT TO LINK
0476  7110              CLL RAR
0477  5316              JMP GO          /AND START THE MOTION.
0500  6772      RWCOM,  SDST            /ANY CHECKSUM ERRORS?
0501  7640              SZA CLA         /OR CHECKSUM ERRORS?
0502  5356              JMP TRY3        /PLEASE NOTE THAT THE LINK IS ALWAYS
                                        /SET AT RWCOM. GETCHK SETS IT.
0503  1210              TAD PGCT        /NO ERROR..FINISHED XFER?
0504  1324              TAD CM200
0505  7450              SNA
0506  5362              JMP EXIT        /ALL DONE. GET OUT
0507  3210              DCA PGCT        /NEW PAGE COUNT
0510  2224              ISZ BLOKK       /NEXT BLOCK TO XFER
0511  1202              TAD WCOUNT      /FORM NEXT BUFFER ADDRESS
0512  7041              CIA
0513  1203              TAD BUFF
0514  3203              DCA BUFF
0515  7120              CLL CML         /FORCES MOTION FORWARD
0516  7232      GO,     CLA CML RTR     /LINK BECOMES MOTION BIT
0517  1223              TAD C1000
0520  1205              TAD UNIT        /PUT IN 'GO' AND UNIT #
0521  6774              SDLC            /LOOK FOR BLOCK NO.

0522  4601              JMSI CRDQUD     /WAIT AT LEAST 6 LINES TO LOOK
0523  4601              JMSI CRDQUD
0524  7600      CM200,  7600            /COULD HAVE SAVED A LOC. HERE
0525  6771      SRCH,   SDSS
0526  5325              JMP SRCH                /WAIT FOR SINGLE LINE FLAG
0527  6776              SDRC
0530  7106              CLL RTL         /DIRECTION TO LINK. INFO BITS 
                                        /ARE SHIFTED.
0531  0216              AND C374        /ISOLATE MARK TRACK BITS
0532  1350              TAD M110        /IS IT END ZONE?
0533  7450              SNA             /THE LINK STAYS SAME THRU THIS
0534  5352              JMP ENDZ
0535  1207              TAD M20         /CHECK FOR BLOCK MARK
0536  7640              SZA CLA
0537  5325              JMP SRCH
0540  6777              SDRD            /GET THE BLOCK NUMBER
0541  7430              SZL             /IF WE ARE IN REVERSE, LOOK FOR 3
                                        /BLOCKS BEFORE TARGET BLOCK. THIS
                                        /ALLOWS TURNAROUND AND UP TO SPEED.
0542  1215              TAD C3          /REVERSE
0543  7040              CMA
0544  1224              TAD BLOKK
0545  7040              CMA             /IS IT RIGHT BLOCK?
0546  7450              SNA
0547  5371              JMP FOUND       /YES..HOORAY!
0550  7670      M110,   SZL SNA CLA     /NO, BUT ARE WE HEADED FOR IT?
                                        /ABOVE SNA IS SUPERFLUOUS.
0551  5325              JMP SRCH        /YES
0552  6776      ENDZ,   SDRC            /WE ARE IN THE END ZONE
0553  7106              CLL RTL         /DIRECTION TO LINK
0554  7630              SZL CLA         /ARE WE IN REVERSE?
0555  5316              JMP GO          /YES..TURN US AROUND
                /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR
0556  2213      TRY3,   ISZ TRYCNT
0557  5316              JMP GO          /TRY 3 TIMES
0560  7300              CLL CLA
0561  5364              JMP FATAL               /LINK OFF MEANS AC=4000 ON RETURN
0562  2220      EXIT,   ISZ DTA0
0563  7120              CLL CML         /AC=0 ON NORMAL RETURN
0564  1205      FATAL,  TAD UNIT
0565  6774              SDLC            /STOP THE UNIT
0566  7230              CLA CML RAR
0567  6201 05   LEAVE,  JMP I DTA0
0570  5620   


0571  7630      FOUND,  SZL CLA         /RIGHT BLOCK. HOW ABOUT DIRECTION?
0572  5316              JMP GO          /WRONG..TURN AROUND
0573  1205              TAD UNIT        /PUT UNIT INTO LINK
0574  7104              CLL RAL         /AC IS NOW 0
0575  1203              TAD BUFF        /GET BUFFER ADDRESS
0576  5617              JMPI XXFELD

                        PAGE

0600  0564 01   CFATAL, FATAL
0601  0500 01   CRWCOM, RWCOM
0602  0000      XFUNCT, 0
0603  7746      CM32,   -32
0604  1400      C1400,  1400
0605  0000      CHKSUM, 0
0606  0000      WORDS,  0
0607  0000      XBUFF,  0
0610  0000      XWCT,   0
0611  0000      EQUTMP, 0



0612  7402      XFIELD, HLT             /CHANGE THE DATA FIELD
0613  3207              DCA XBUFF       /SAVE ADDRESS
0614  7010              RAR             /NOW GET UNIT #
0615  3332              DCA XUNIT
0616  1210              TAD XWCT
0617  3206              DCA WORDS       /WORD COUNTER
0620  6771      REVGRD, SDSS
0621  5220              JMP REVGRD              /LOOK FOR REVERSE GUARD
0622  6776              SDRC
0623  0253              AND K77
0624  1203              TAD CM32        /IS IT REVERSE GUARD?
0625  7640              SZA CLA
0626  5220              JMP REVGRD      /NO.KEEP LOOKING
0627  1202              TAD XFUNCT      /GET FUNCTION  READ OR WRITE
0630  7700      K7700,  SMA CLA
0631  5266              JMP READ        /NEG. IS WRITE
0632  6776      WRITE,  SDRC
0633  0300              AND C300        /CHECK FOR WRITE LOCK AND SELECT ERROR
0634  7120              CLL CML         /LOCK OUT AND SELECT ARE AC 0 ERRORS
0635  7640              SZA CLA
0636  5600              JMPI CFATAL     /FATAL ERROR. LINK MUST BE ON
0637  4325              JMS RDQUAD      /NO ONE EVER USES THIS WORD!
0640  7600      C7600,  7600
0641  1204              TAD C1400
0642  1332              TAD XUNIT       /INITIATE WRITE MODE
0643  6774              SDLC
0644  7240              CLA CMA
0645  4316              JMS WRQUAD      /PUT 77 IN REVERSE CHECKSUM
0646  7240              CLA CMA
0647  3205              DCA CHKSUM
0650  1607      WRLP,   TADI XBUFF      /GLORY BE! THE ACTUAL WRITE!
0651  4316              JMS WRQUAD
0652  2207              ISZ XBUFF       /BUMP CORE POINTER
0653  0077      K77,    77              /ABOVE MAY SKIP
0654  2206              ISZ WORDS       /DONE THIS BLOCK?
0655  5250              JMP WRLP        /NOT YET..LOOP A WHILE
0656  1202              TAD XFUNCT      /IS THE OPERATION FOR WDSBLK PER BLOCK?
0657  7112              CLL RTR         /IF NO, WRITE A 0 WORD
0660  7630              SZL CLA
0661  4316              JMS WRQUAD      /WRITE A WORD OF 0
0662  4347              JMS GETCHK      /DO THE CHECK SUM
0663  4316              JMS WRQUAD      /WRITE FORWARD CHECKSUM
0664  4316              JMS WRQUAD      /ALLOW CHECKSUM TO BE WRITTEN
0665  5601              JMPI CRWCOM


0666  4325      READ,   JMS RDQUAD
0667  4325              JMS RDQUAD
0670  4325              JMS RDQUAD      /SKIP CONTROL WORDS
0671  0253              AND K77
0672  1230              TAD K7700       /TACK 7700 ONTO CHECKSUM.
0673  3205              DCA CHKSUM      /CHECKSUM ONLY LOW 6 BITS ANYWAY
0674  4325      RDLP,   JMS RDQUAD
0675  4332              JMS EQUFUN      /COMPUT CHECKSUM AS WE GO
0676  3607              DCAI XBUFF      /IT GETS CONDENSED LATER
0677  2207              ISZ XBUFF
0700  0300      C300,   300             /PROTECTION
0701  2206              ISZ WORDS       /DONE THIS OP?
0702  5274              JMP RDLP        /NO SUCH LUCK
0703  1202              TAD XFUNCT      /IF OP WAS FOR WDSBLK-1, READ AND
0704  7112              CLL RTR         /CHECKSUM THE LAST TAPE WORD
0705  7620              SNL CLA
0706  5311              JMP RDLP2
0707  4325              JMS RDQUAD      /NOT NEEDED FOR WDSBLK/BLOCK
0710  4332              JMS EQUFUN      /CHECKSUM IT
0711  4325      RDLP2,  JMS RDQUAD      /READ CHECKSUM
0712  0230              AND K7700
0713  4332              JMS EQUFUN
0714  4347              JMS GETCHK      /GET SIX BIT CHECKSUM
0715  5601              JMPI CRWCOM

0716  0000      WRQUAD, 0               /WRITE OUT A 12 BIT WORD
0717  4332              JMS EQUFUN      /ADD THIS TO CHECKSUM
0720  6773      WRQUQ,  SDSQ            /SKIP ON QUADLINE FLAG
0721  5320              JMP WRQUQ
0722  6775              SDLD            /LOAD DATA  ONTO BUS
0723  7200              CLA             /SDLD DOESN'T CLEAR AC
0724  5716              JMPI WRQUAD

0725  0000      RDQUAD, 0               /READ A 12 BIT WORD
0726  6773              SDSQ
0727  5326              JMP RDQUAD#
0730  6777              SDRD            /READ DATA
0731  5725              JMPI RDQUAD
                XUNIT,
0732  0000      EQUFUN, 0               /COMPUTE EQUIVALENCE CHECKSUM
0733  7040              CMA
0734  3211              DCA EQUTMP      /ACTUALLY CHECKSUMS ON DECTAPE ARE
0735  1211              TAD EQUTMP      /EQUIVALENCE OF ALL WORDS IN A RECORD
0736  0205              AND CHKSUM      /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE
0737  7041              CIA             /IS ASSOCIATIVE, WE CAN DO IT 12
0740  7104              CLL RAL         /BITS AT A TIME AND CONDENSE LATER.
0741  1211              TAD EQUTMP      /THIS ROUTINE USES THESE IDENTITIES:
0742  1205              TAD CHKSUM      /A+B=(A.XOR.B)+2*(A.AND.B)
0743  3205              DCA CHKSUM      /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B)
0744  1211              TAD EQUTMP      /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B))
0745  7040              CMA
0746  5732              JMPI EQUFUN

0747  0000      GETCHK, 0               /FORM 6 BIT CHECKSUM
0750  7200              CLA
0751  1205              TAD CHKSUM      
0752  7040              CMA
0753  7106              CLL RTL
0754  7006              RTL
0755  7006              RTL
0756  4332              JMS EQUFUN
0757  7320              CLA CLL CML     /FORCES LINK ON AT RWCOM
0760  1205              TAD CHKSUM
0761  0230              AND K7700
0762  5747              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