File RKS8ES.PA (PAL assembler source file)

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


/MAINDEC-X8-DHRK*-*-L  "DEC/X8"  RKS8ES

/RKS8E DISK SYSTEM MODULE FOR DEC/X8

/COPYRIGHT 1972, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.

/THIS MODULE OPERATIONAL ON PDP-8,8/I,8/L,8/E,8/M AND PDP-12 WITH AN RKS8E DISK CONTROL.

	/PRG:


	/BUILDER INSTRUCTIOUS:

	/1.PRIORITY:  NOT CRITICAL, BUT SHOULD BE ASSIGNED NEAR LEVEL 0
	/TO PROVIDE MAXIMUM DATA BREAK INTERACTION.

	/2.JOB SLOT:  4 PAGES REQUIRED, SLOT JX1 OR JX2.


	/INITIALIZER INSTRUCTIONS:


/CODE	DEFINED			RESPONSE				PRESET

/A:	LOWEST DISK TO USE	0-7					0
/B:	HIGHEST DISKTO USE	0-7					0
/C:	TYPE OF DATA		0=RANDOM; 1  NNNN=CONSTANT		RANDOM
/D:	ADDRESSING		0=RANDOM; 1  NNNN  NNNN=CONSTANT*	RANDOM
/				*NOTE: THE MAX ADDRESS ACCEPTED BY THIS
/				MODULE IS 010DDD  4536 WHERE (DDD) IS
/				THE DISK NUMBER.
/E:	LENGTH OF TRANSFER	0=RANDOM; 1  NNNN=CONSTANT		RANDOM
/				WHERE NNNN MAY BE1 TO 1000.
/F:	BUFFER ASSIGNMENT	0=RANDOM; 1  NNNN=CONSTANT		RANDOM



/SPECIAL USER MODIFICATIONS VIA RELATIVE "^O" FACILITY.

	/1."REPORT" MAY BECHANGED FROM 3777 TO XXXX WHERE ANY
	/  CLEAR BITS INHIBIT ANERROR REPORT FOR THAT CONDITION.

	/2."PARITY" MAY BE CHANGED FROM3767 TO 3777 TO INHIBIT
	/  DATA CHECKINGAFTER A CRC ERROR.

/REPORT SYMBOL DEFINITIONS: /1.REFER TO MODULE TABLE IN THIS LISTING FOR DESCRIPTION / OF CNTR, SA:-SG:, AND DA:-DC: /2."CODE" DEFINITIONS: /CODE DEFINED /0002 READ /0004 WRITE /001X FALSE DATA ERROR (BAD CHECKSUM BUT / DATA LOOKED GOOD ON WORD BY WORD CHECK.) /0012 THIS TYPE OF ERROR MAY BE REPORTED AFTER / A CRC ERROR AND INDICATES THE FOLLOWING: / 1. THE CRC ERROR STOPPED THE TRANSFER PRIOR TO / COMPLETION AND THEREBY CAUSED A SOFTWARE / SUMCHECK ERROR; 2. THE DATA THAT WAS READ IN / WAS GOOD. /RKS8E STANDARDS /DEVICE CODE: 74, 75 /RKS8E IOT DEFINITIONS DSKP=6741 /PC+1->PC IF TD OR ER DCLR=6742 /AC=0000 /0->AC; 0->SR /AC=0001 /0->AC; 0->CONTROL /AC=0002 /0->AC; RECALIBRATE SELECTED DRIVE DLAG=6743 /AC->DAR; GO; 0->AC DLCA=6744 /AC->CA; 0->AC DRST=6745 /SR->AC DLDC=6746 /AC->CM; 0->AC DMAN=6747 /AC BIT /FUNCTION /0 /ENTER MAINTENANCE /1 /ENABLE SHIFT TO LOWER BUFFER /2 /NOT USED IN THIS MODULE /3 /SHIFT CMTO LOWER BUFFER /4 /SHIFT SUR/SEC TO LOWER BUFFER /5 /NOT USED IN THIS MODULE /6 /NOT USED IN THIS MODULE /7 /0->AC; LOWER BUFFER TO AC /8-11 /NOT USED IN THIS MODLULE DCWC=6752 DLWC=6753 DRWC=6755
/MODULE TABLE *200 JOB, 0 /JOB NUMBER TEXT1, TEXT "RKS8ES" /DEVICE NAME TEXT "DHRK*-*" /MODULE DESIGNATOR HOMEDF, 0 /DF=IF HLT/CDF JMP I HOMEDF INTACK, CIF 00 /ACKNOWLEDGE INTERRUPT. JMS I IHRETP -1 /PRIORITY KILL, -1 /COMMAND TO KILL JOB. KILLED, -1 /MODULE SETS TO -1 WHEN JOB KILLED. CNTR, 0 /NUMBER OF EXERCISER LOOP PASSES. ERROR, 0 /ERROR CALL. DCA .+11 LAS AND Z K4 SZA DCA KILL JMS HOMEDF IOF CIF 00 JMS I ERRP 0 JMP I ERROR CODE, 0 /ERROR CODE. -7 /STATUS WORD TALLY ERRSA, 0 /STATUS REGISTER ERRSB, 0 /BUFFER DESIGNATOR ERRSC, 0 /INITIAL SOFTWAREWORDCOUNT ERRSD, 0 /FINAL SOFTWARE WORDCOUNT ERRSE, 0 /INITIAL CA ERRSF, 0 /INITIAL CMAND TRK0 ERRSG, 0 /INITIAL DAR (TRK/SUR/SEC) -3 /DATA ERROR ENTRY TALLY. ERRDA, 0 /BUFFER ADDRESS ERRDB, 0 /GOOD DATA ERRDC, 0 /BAD DATA /END OF MODULE TABLE
/INTERRUPT SERVICE - IMMEDIATE ONLY INT, 0 /MONITOR JMS HERE ISZ RENTRY /EXPECTED INTERRUPT? JMP INT1 /NO DC74A, DRST /READ STATUS JMS HOMEDF /NO. DF=IF DCA ERRSA /SAVE STATUS DC75B, DRWC /READ THEWORD COUNT DCA ERRSD /SAVEIT INERRSD DC74B, DCLR /CLEAR STATUS TAD (DEFSRV /SET DEFERREDSERVICE JMP INTACK /ACKNOWLEDGE INTERRUPT INT1, RDF /UNEXPECTED INTERRUPT. TAD Z KCIFDF DCA .+2 DCA RENTRY HLT JMP I INT /EXIT TO MONITOR CHAIN RENTRY, 0 SECDAR=ERRDA AGAIN=ERRDC
/ROUTINE TO SET UP RKS8E TO READ OR WRITE DATA /CALL MUST BE: /1. SET UP ERRSB,ERRSC,ERRSE,AT LEAST BITS 5,9-11 OF ERRSF,ERRSG /2. DF=IF /3. AC=2 FOR READ; AC=4 FOR WRITE /4. JMS I (GO /5. CM FOR READ OR WRITE DATA WITH INT ENA /6. ERROR RETURNHERE /7. GOOD RETURNHERE GO, 0 DCA CODE /SAVE ERROR CODE INCASE TAD KILL /KILLCHECK SNA JMP .+4 DCA KILLED JMS I (RELEAS SERVEX TAD ERRSF /KEEP ONLY DISK AND TRK0 IN INIT CM AND K107 DCA ERRSF TAD ERRSC /MAKE FINAL WC=INIT WC DCA ERRSD TAD ERRSF /ADD TRK0 AND DISK TAD I GO /ADD READ OR WRITE DATA+ENA ISZ GO /MOVE TO BAD EXIT DCA ERRSF TAD ERRSB /ADD FIELD BITS AND Z K70 TAD ERRSF DCA ERRSF /SAVE GOOD INIT CM CLA CMA /ALLOW ONE INTERRUPT IOF DCA RENTRY TAD ERRSC /LOAD WC DC75A, DLWC TAD ERRSE /LOAD CA DC74F, DLCA TAD ERRSF /LOAD CMAND CLEAR STATUS DC74G, DLDC TAD ERRSG /LOADDAR AND GO. DC74H, DLAG SERVEX /OUT GORET, JMP I GO /OUT DATCON, 0 TAD ERRDB JMP I DATCON /END OF PAGE *.
*400 /RANDOM NUMBER GENERATOR RANDOM, 0 ISZ RAN1 NOP TAD RAN2 TAD K1111A CLL RAL SNL IAC DCA RAN2 TAD RAN1 TAD RAN2 JMP I RANDOM SAVRAN, 0 /PRESET CDF 00 TAD I Z K0 DCA RAN2 JMS I (HOMEDF TAD RAN1 DCA SAV1 TAD RAN2 DCA SAV2 JMP I SAVRAN RESRAN, 0 /RESTORE TAD SAV1 DCA RAN1 TAD SAV2 DCA RAN2 JMP I RESRAN RAN1, 0 RAN2, 0 SAV1, 0 SAV2, 0 K1111A, 1111
DATCHK, 0 /CHECK DATA. TAD I (ERRSD /GET FINAL WC. JMS I (SUMCHK /SUMCHECK. CIA TAD I (SUMSAV /GOOD? SNA CLA JMP I DATCHK /YES. OUT. JMS RESRAN /NO. RESTORE DATA GENERATOR. TAD I (ERRSD /PRESET TO CHECK DATA. JMS DATSET DCA .+5 /SAVE CDF TO BUFFER FIELD. TAD I (DATGEV /MOVE DATA GENERATOR POINTER TO THIS DCA DATSET /PAGE JMS I DATSET /GENERATE 1 WORD. DCA I (ERRDB /SAVE IN GOOD. HLT/CDF /DF TO BUFFER FIELD. AUA, TAD I AUTO /GET WORD IN BUFFER. JMS I (HOMEDF /DF=IF DCA I (ERRDC /SAVE IN BAD. AUB, TAD AUTO /GET ADDR AND SAVE. DCA I (ERRDA TAD I (ERRDC /GOOD=BAD? CIA TAD I (ERRDB SZA JMS I (ERROR /NO. DATA ERROR (AC NOT 0) ISZ I (BUFTAL /DONE? JMP .-16 /NO. TAD I (CODE /YES. SET CODE=001X TAD Z K10 DCA I (CODE JMS I (ERROR /CLOSE ERROR ROUTINE. JMP I DATCHK /OUT. DATSET, 0 /SET UP FOR DATA GENERATE OR CHECK. CIA /COMPUTE LENGTH TO FILL OR CHECK. TAD I (ERRSC SNA JMP I DATCHK DCA I (BUFTAL /SAVEIT. CLA CMA TAD I (ERRSE /PUT CA IN AUTO INDEX. AUC, DCA AUTO TAD I (ERRSB /COMPUTE CDF TOBUFFER FIELD. AND Z K70 TAD Z KCDF JMP I DATSET /EXIT WITH IT IN AC.
/DEFERRED SERVICE ENTRY DEFSRV, CLA TAD I (ERRSA /ERROR REPORT? AND REPORT SZA CLA JMS I (ERROR /YES. STATUS ERROR REPORT. CLL CMA RAR /CHECK FOR ERROR RECOVERY JMP I (GOTER /DO IT. REPORT, 3777 RELEAS, 0 /RELEASE BUFFER TAD I (ERRSB /DESIGINAC IOF /MONITOR CALL CIF 00 RLBUFF JMP I RELEAS /EXIT WITH ION *.
*600 /RUNNER RUN, DCA I (ERRSB /CLEAR BUFFER DESIG DCA I (CNTR /0-> PASS COUNTER /START OFEXERCISER LOOP EXER, LAS /CHANGE DISKADDRESS? RAR SZL CLA JMP LGTGEN /NO EXERA, JMS I ADRGEV /YES. GET DSKAND TRK AND Z K7 DCA I (ERRSF TAD I (ERRSF />OR=LOW? TAD LODSK SPA CLA JMP EXERA /NO. REGENERATE TAD I (ERRSF /YES. <OR=HIGH? TAD HIDSK SMA SZA CLA JMP EXERA /NO. REGENERATE EXERB, JMS I ADRGEV /YES. GENERATE TRK/SUR/SEC DCA I (ERRSG JMS I ADRGEV /GEN RANDON NUMBER; -# MEANS SET CYL 0 SMA CLA /TRK0 TO BE SET? +# MEANS CLEAR CYL0 JMP LGTGEN /NO. TRK 0 IS ALREADY 0; WHATEVER IN DAR IS OK STL /YES; CHECK THE DAR; START WITH LINK SET TAD I (ERRSG /CHECK TRK/SUR/SEC<4537. NOTE LINK IS ALREADY SET. TAD M4537A SNL CLA JMP EXERB /OUT OF LIMITS. REGENERATE TAD Z K100 /DAR IN LIMITS; NOW SET BIT 5 IN ERRSF TAD I (ERRSF) DCA I (ERRSF) LGTGEN, JMS I LGTGEV /GENERATE TRANSFER LENGTH, 7000-7777 AND K777 TAD K7000A DCA I (ERRSC /SAVEININIT SOFT WC BUFGEN, JMS I BUFGEV /GET A BUFFER TAD I (ERRSB /MAKE INIT CA AND Z K7600 DCA I (ERRSE DATGEN, JMS I (SAVRAN /PRESET RANDOM JMS I (DATSET /FILL BUFFER DCA .+1 HLT/CDF JMS I DATGEV
AUD, DCA I AUTO ISZ BUFTAL JMP .-3 JMS I (HOMEDF /SUMCHECK JMS SUMCHK DCA SUMSAV /SAVE SUM TAD Z M3 /SET FOR 3 REREADS IF CRC ERROR DCA PARTAL TAD Z K4 /CODE 4 FOR WRITE JMS I (GO 4400 /WRITE DATA INT ENA JMP EXER /STATUS ERROR DSKRD, JMS I (DATSET /OK. CLEAR BUFFER DCA .+1 HLT/CDF AUE, DCA I AUTO ISZ BUFTAL JMP .-2 JMS I (HOMEDF STL RTL /2 FOR READ JMS I (GO /READ 0400 /READ DATA INT ENA JMP DKRK /STATUS ERROR JMS I (DATCHK /OK. CHECKDATA DSKOUT, ISZ I (CNTR /+1->CNTR K7000A, 7000 /NOP JMP EXER /LOOP DKRK, TAD I (ERRSA AND PARITY SNA CLA JMS I (DATCHK /CRC ERROR. CHECK DATA. TAD I (ERRSA /CRC ERROR? AND K3767A SNA CLA ISZ PARTAL /YES. 3 REREADS? JMP DSKRD /NO. 1 MORE. JMP DSKOUT /YES. OUT BUFTAL, 0 SUMSAV, 0 PARTAL, 0 PARITY, 3767 K777, 0777 K107, 0107 K3767A, 3767 LODSK, 0 /LOW DISK SELECT =(TYPED INVALUE) HIDSK, 0 /HIGH DISK SELECT =(TYPED INVALUE) M4537A, -4537 K600A, 600
SUMCHK, 0 /SUM CHECK BUFFER JMS I (DATSET DCA .+1 HLT/CDF CLL AUF, TAD I AUTO SZL IAC ISZ BUFTAL JMP .-5 JMS I (HOMEDF JMP I SUMCHK GOTER, AND I (ERRSA /ERROR? SNA CLA ISZ I (GO /NO. MAKE GOODEXIT IAC DC74E, DCLR /CLEAR CONTROL JMP I (GORET ADRCON, 0 JMP LGTGEN /END OF PAGE *. /NOTE: THESE LOC'S ARE SPECIFIED BELOW THE *. SO THAT THE ADDRESSES /INDICATED ARE MODIFIED PROPERLY BY THE DEC-X8 LOADER. LGTGEV, RANDOM /LGTCON BUFGEV, BUFRAN /BUFCON DATGEV, RANDOM /DATCON ADRGEV, RANDOM /ADRCON
*1000 /ROUTINE TO ASSIGN AND HOLD A SPECIFIED BUFFER WHICH MUST BE /LEGALLY SPECIFIED IN CONBUF (STANDARD BUFFER DESIGNATOR) BUFCON, 0 TAD ERRSB /GET CURRENTBUFFER WORD. CIA TAD CONBUF SNA CLA /SPECIFIED BUFFER ASSIGNED? JMP I BUFCON /YES. EXIT. JMS BUFRAN /NO. GET NEW BUFFER. JMP BUFCON+1 /CHECK IT CONBUF, 0 /MUST CONTAIN LEGAL BUFFER DESIGNATOR. /ROUTINE TO ASSIGN A BUFFER OBSERVING SR 10. LTRCOD=. BUFRAN, 0 LAS /PUT SR 10 (NOT) IN LINK. RTR CLA CML TAD ERRSB /BUFFER WORD IN AC. SNL SZA JMP .+6 /EXIT IF AC NON ZERO AND LINK SET. SZA CLA JMS RELEAS /RELEASE BUFFER IF AC NON ZERO. IOF /ASSIGNA BUFFER CIF 00 ASBUFF DCA ERRSB /SAVE BUFFER DESIGNATOR. JMP I BUFRAN /EXIT. LGTCON, 0 TAD I (ERRSC JMP I LGTCON
/INITIALIZER /"INIT" IS INITIALIZING ADDRESS. INIT, MESAGE TEXT1 INITLP, TAD Z K301 /SET CODE TO "A" DCA LTRCOD JMS INISR1 /GET LOW DISK. DCA LODSK /SAVE IN BITS 4-5 NEGATED JMS INISR1 /SAME FOR HIGH DISK. DCA HIDSK JMS INISR2 /TYPE OF DATA. JMP .+4 /RANDOM DCA I (ERRDB /CONSTANT-SAVE IN GOOD DATA. TAD (DATCON /PRESET POINTERS. SKP TAD (RANDOM DCA I (DATGEV JMS INISR2 /TYPE OF ADDRESSING: JMP .+10 /RANDOM DCA I (ERRSF /CONSTANT-SAVE EMA PART. SPACE2 /2 SPACES FOROCT /GET DMA PART. JMP INITLP DCA I (ERRSG /SAVE IT. TAD (ADRCON /PRESET POINTERS SKP TAD (RANDOM DCA I (ADRGEV JMS INISR2 /LENGTH OF TRANSFER: JMP .+5 /RANDOM CIA /CONSTANT-NEGATE AND SAVE DCA I (ERRSC /AS INITIAL WC. TAD (LGTCON /PRESET POINTERS. SKP TAD (RANDOM DCA I (LGTGEV JMS INISR2 /BUFFER ASSIGNMENT: JMP .+4 /RANDOM DCA CONBUF /CONSTANT-SAVE IN HOLDER. TAD (BUFCON /PRESET POINTERS. SKP TAD (BUFRAN DCA I (BUFGEV INITEX /OUT.
INISR1, 0 /SERVICE1. JMS INISR3 /DO SERVICE 3. CIA /NEGATE JMP I INISR1 /OUT. INISR2, 0 /SERVICE 2 JMS INISR3 /DO SERVICE 3. SNA CLA JMP I INISR2 /0=RANDOM OUT ISZ INISR2 /NOT 0 IS CONSTANT. SPACE2 /2 SPACES. FOROCT /GET 4 OCTAL NUMBERS JMP INITLP /ERROR. JMP I INISR2 /OUT INISR3, 0 /SERVICE 3. CRLF /CARRIAGE RET-LINE FEED. TAD LTRCOD /GET LETTER CODE. TYPE /PRINT IT SPACE2 /2 SPACES ONEOCT /GET ONE OCTAL NUMBER. JMP INITLP /ERROR. AND Z K7 /MAKE <OR=7 ARBITRARILY. ISZ LTRCOD /UPDATE LETTER CODE. JMP I INISR3 /OUT. /END /
/DEC/X8 EXTERNAL SYMBOL TABLE "EXTSYM /FOR USE IN ASSEMBLINGDEC/X8 SOFTWARE MODULES. /COPYRIGHT 1972, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. / XLIST /MAINDEC-X8-DIQAC ASBUFP=0060 AUTO=0017 CRLFP=0054 ERRP=0061 EXINIT=0020 EXSERV=0004 EXTMEM=0161 FOROCP=0043 IHRETP=0026 IOFMSP=0056 K0=0066 K10=0076 K100=0107 K11=0077 K116=0071 K13=0100 K17=0101 K177=0130 K20=0102 K200=0110 K2000=0122 K212=0111 K215=0112 K240=0113 K260=0114 K272=0115 K277=0116 K3=0072 K30=0103 K301=0117 K32=0067 K323=0120 K4=0073 K40=0104 K400=0121 K5=0074 K540=0124 K5200=0123 K5402=0003 K64=0070
K7=0075 K70=0105 K7510=0125 K7520=0126 K7540=0127 K7600=0131 K77=0106 K7735=0132 K7740=0133 K7750=0134 K7760=0135 K7771=0136 K7773=0137 K7774=0140 K7775=0141 KCDF=0064 KCIF=0005 KCIFDF=0020 KIOF=0004 LISNP=0040 M20=0135 M200=0131 M240=0127 M260=0126 M270=0125 M3=0141 M30=0134 M4=0140 M40=0133 M43=0132 M5=0137 M7=0136 MESAGP=0044 MUL26P=0065 ONEOCP=0042 PRNT1P=0051 PRNT2P=0052 PRNT4P=0053 RLBUFP=0057 SPACEP=0055 TWOOCP=0041 TYPEP=0050
/D E F I N E D C A L L S: MESAGE=JMS I MESAGP CRLF=JMS I CRLFP TYPE=JMS I TYPEP LISN=JMS I LISNP ONEOCT=JMS I ONEOCP TWOOCT=JMS I TWOOCP FOROCT=JMS I FOROCP PRNT1=JMS I PRNT1P PRNT2=JMS I PRNT2P PRNT4=JMS I PRNT4P SPACE2=JMS I SPACEP ASBUFF=JMS I ASBUFP RLBUFF=JMS I RLBUFP INITEX=JMP EXINIT SERVEX=JMP EXSERV / XLIST
/END OF PAGE AND END OF PROGRAMCODE EOP4=. *INIT+1;TEXT1 *EOP4 FIELD 1 /LOADER CALL *1200 INIT;RUN;INT DSKP;0;1;HLT;HLT;HLT -6;AUA;AUB;AUC;AUD;AUE;AUF -2 0740;-7;DC74A;DC74B;DC74E;DC74F;DC74G;DC74H;1 0750;-2;DC75A;DC75B 0 0 $$$$$$$$$$$



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