File RXNS10.PA (PAL assembler source file)

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

/RX NON-SYSTEM HANDLER, GENERAL CONTROLLER TYPE
/FLOPPY DISK HANDLER FOR OS/8
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1978 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION 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 DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/

/DEFINITIONS OF RX8/E IOT'S RXVER= "N&77 DEVCOD= 750 /DEVICECODE LCD= 6001+DEVCOD /LOAD COMMAND REGISTER XDR= 6002+DEVCOD /TRANSFER DATA REGISTER STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE INIT= 6007+DEVCOD /INITIALIZE CONTROLLER AND RECALIBRATE DRIVES /NOTES ON THIS HANDLER: /THIS HANDLER READS AND WRITES THE DISK IN "12-BIT" MODE, IN WHICH /ONLY 6 BITS OF EVERY 8-BIT BYTE ARE USED. AN RX01 CARTRIDGE /CONTAINS 494 OS/8 BLOCKS UNDER THIS METHOD /TO MAXIMIZE SPEED ON THE DEVICE, THE HANDLER READS AND WRITES RX01 DATA /ON A TRACK WITH A TWO-WAY INTERLEAVE - I.E. RECORDS 1-26 ON A TRACK /ARE WRITTEN IN THE SEQUENCE: / 1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24,26 /DOUBLE DENSITY MEDIA ARE WRITTEN IN A THREE WAY INTERLEAVE / 1,4,7,10,13,16,19,22,25,2,5,8,11,14,17,20,23,26,3,6,9,12,15,18,21,24 /TRACK-SECTOR COMPUTATION IS DONE I/O TO/FROM THE SILO AC4000=CLL CLA CML RAR /SET AC TO 4000 AC7776=CLL CLA CMA RAL /SET AC TO 7776 AC0002=CLL CLA CML RTL /SET AC TO 0002 AC7775=CLL CLA CMA RTL /SET AC TO 7775
/ /BUILD DATA *0 / -2 /TWO ENTRY POINTS DEVICE RX02 /DEVICE GROUP NAME DEVICE RXA0 /ENTRY POINT NAME 4270 /CODE FOR MULTI-RX RXA0&177+4000 /ENTRY POINT OFFSET 0 0 DEVICE RX02 /DEVICE GROUP NAME DEVICE RXA1 /ENTRY POINT NAME 4270 RXA1&177+4000 /ENTRY POINT OFFSET 0 0
*200 / / / INIT CODE / POINT, HLT /ADDR OF SECOND PAGE AT INIT TIME UNIT, JMS I POINT /GO TO SECOND PAGE TO INIT / / LIST OF VECTORS TO SECOND PAGE / LQUO, QUO-. /LQUO MUST LEAD OFF LIST LRETRY, RETRY-. LREC, REC-. LSIZE, SIZE-. LREMD, REMD-. LFN, FN-. LDENSW, DENSW-. LENTRY, ENTRY-. VCOUNT=LQUO-. /FALLS THRU TO WHICH, HERE IS VECTOR COUNT / / COME HERE FROM ZOO / / PROCESS ENTRY POINT, DEVICE TYPE / WHICH, AC7775 /SET RETRY COUNTER DCA I LRETRY TAD I ZOO /GET UNIT NUMBER*20+402 DCA UNIT /HOLD FOR LATER ISZ ZOO /MOVE TO TYPE CODE TAD I ZOO /HAS THIS DRIVE BEED INIT'ED L7700, SMA CLA /SKIP IF NO JMP NORMAL /GO TO NORMAL PATH RSTART, TAD UNIT /PICK UP UNIT BIT, DOUBLE DENSITY +2 TAD L10 /MAKE A READ STATUS CODE SDN JMP .-1 LCD SDN JMP .-1 JMP BOUNCE /HOP OVER ENTRY POINT
/ / IFZERO .&177-33&4000 <_ERROR_> / / ENTRY POINTS ARE AT 32, 36 / *.&7600+32 / RXA0, 0 JMS ZOO /COMMON ENTRY ROUTINE 402 /UNIT 0, 402 FOR CONVENIENCE -1 /MINUS SAYS STILL HAVE TO INIT IT; / /SINGLE=0, DOUBLE=20, QUAD=22 RXA1, 0 JMS ZOO L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE DOOR, JMP WHICH /INIT TIME LITERAL (MUST BE MINUS) / /GETS SAME TYPE CODE AS OTHER ENTRY POINT / / REST OF SET UP CODE / BOUNCE, XDR /GET STATUS WORD AND L32 /KEEP DENSITY ERROR; DOUBLE; QUAD TAD L10 /SINGLE=10;SING/DOUB=40;DOUB=20;QUAD=22 AND L422 /SINGLE=0;SING/DOUB=0;DOUB=20;QUAD=22 DCA I ZOO /PLACE TYPE CODE SER /CLEAR ERROR FLAG L10, 10 /MAY SKIP TAD L416 /SET DONE FLAG AGAIN LCD NORMAL, TAD I ZOO /FETCH BACK TYPE CODE SZA CLA /SKIP IF A SINGLE DENSITY TAD L7700 /DOUBLE TAD L7700 /SINGLE=7700, DOUBLE=7600 DCA I LDENSW /PLACE FOR LOOP CONTROL TAD I ZOO CLL RTR /PUT QUAD BIT TO LINK SNA CLA /SKIP IF DOUBLE OR QUAD TAD L1734 /SINGLE TAD L4110 /D&Q=4110, S=6044 SNL /SKIP ON QUAD, IT'S OK RIGHT NOW CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2 DCA I LSIZE /S=7022, D=6044, Q=4110 TAD I LDENSW /7700 IF SINGLE, 7600 IF DOUBLE CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE AND UNIT /VOILA, 400*DOUBLE + 20*UNIT DCA I LFN /PLACE INTO FUNCTION CONTROL WORD AC7775 /BACK UP ZOO TO FETCH CALLING ADDR TAD ZOO DCA T1 /HOLD TEMPORARY TAD I T1 /HERE IS CALLING ADDR CLLFLD, HLT /PUT CDF TO CALLING FIELD HERE JMS I LENTRY /GO TO SECOND PAGE, LEAVING POINTER TO DIVSUB / / DIVSUB SUBROUTINE !!MUST!! FOLLOW IMMEDIATELY /
/ / DIVSUB / / CALL TO SET UP TRACK, SECTOR, FROM OVERALL SECTOR # / ALSO, SET UNIT WITH HEAD COMMAND IF WE ARE ON TO SECOND SIDE / / CALL WITH AC <0 IF IT IS REALLY AN ERROR RETRY / CALL WITH AC >=0 IF CALL TO DIVSUB / DIVSUB, 0 CDF 0 /AND DATA FIELD MUST BE TO HERE SPA CLA /SKIP IF REALLY A DIVIDE REQUEST JMP RSTART /NO, IT WAS AN ERROR RETRY!! DCA I LQUO /CLEAR DIVIDE QUOTIENT TAD I ZOO /IS IT A TWO HEADER RTR /PUT QUAD BIT TO LINK SNL CLA /SKIP IF YES JMP SHUNT /NO, GO DO DIVIDE TAD I LREC /WHICH RECORD ARE WE WORKING ON TAD LM3670 /NUMBER OF SECTORS ON FIRST SIDE SZL CLA /SKIP IF SECOND SIDED IT JMP SHUNT /NO, JUST REGULAR TAD I LFN /FORCE HEAD BIT ON AND L422 /KEEP DOUBLE, UNIT, READ-WRITE TAD L1000 /ADD IN SECOND SIDE DCA I LFN TAD LM3670 /BUT DECREASE RECORD NUMBER SHUNT, TAD I LREC /THIS FOR TRACK-SECTOR DIVLOO, ISZ I LQUO /MAIN DIIVIDIE LOOP TAD LM32 /DIVIDE BY 26 TO GET TRACK SMA /SKIP IF DONE JMP DIVLOO TAD L32 /REMAINDER 0-25 DCA T1 /HOLD IT IN TEMPORARY TAD I ZOO /SINGLE DENSITY SZA CLA /SKIP IF YES TAD T1 /MULTIPLY BY THREE FOR DOUBLE TAD T1 /AND BY TWO FOR SINGLE TAD T1 CLL IAC /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0 TAD LM32 /DIVIDE BY 26 TO GET SECTOR SMA SZA /SKIP IF DONE JMP .-2 TAD L32 /RESTORE POSITIVE VALUE TO BE SECTOR DCA I LREMD /WHEW, BUT WATCH IT, A FINAL CORRECTION COMING! RAL /IF LINK=0 AND SINGLE: 2,4,6,8,10,12,14,16... SERIES TAD I ZOO /BUT WE HAVE 1,3,5,7,9,11,13,15... SO WE MUST INCREMENT! SNA CLA /SKIP IF SOME OTHER CASE ISZ I LREMD /NOW HAVE IT 2,4,6,8,10,12,14,16... JMP I DIVSUB /OUT
/ / L416, 416 /SOME LITERALS L1000, 1000 L32, 32 LM32, -32 L1734, 1734 L4110, LM3670, -3670 / / / *.&7600+167 /FORCE TO END OF PAGE / ZOO SUBROUTINE / / TO SET UP ENTRY POINT PROCESSING, AND INIT CODE / ZOO, 0 /ADDR OF 'HIT' ENTRY POINT +2 COMES HERE CLA /FOR SAFETY RDF /SAVE CALLERS FIELD SETTING TAD LCDF0 /ADD IN CDF 0 DCA CLLFLD /RESET WHEN GOING TO I/O SUB LCDF0, CDF 0 /DATA FIELD HERE FOR INDIRECTS CLOSE, TAD DOOR /CLOSE DOOR TO ONCE ONLY CODE (JMP WHICH T1, DCA CLOSE /USE ONCE-ONLY FOR TEMPORARY LOCATION JMS POINT /LEAVE ADDR OF SECOND PAGE
/ / / VARIABLES, ALSO INIT CODE LIVES HERE / / BUF, 0 /POINTER TO CALLER'S BUFFER RETRY, 0 /RETRY COUNT SIZE, 0 /SIZE OF DEVICE SYS, 0 /POINTER TO CALL QUO, 0 /DIVIDE QUOTIENT, WHICH IS TRACK NUMBER REC, 0 /SECTOR NUMBER OF FLOPPY BC, 0 /CONTROL COUNT, WORDS TO TRANSFER FN, 0 /0 FOR WRITE; 2 FOR READ; HEAD, DENSITY, UNIT DENSW, 0 /7700 IF SINGLE DENSITY, 7600 IF DOUBLE DENSITY ENTRY, 0 /ENTRY POINT, LEAVE ADDR OF DIVSUB HERE JMP EXFLD /BACK TO CALLER TRANS, 0 /TEMPORARY FOR LDCMD TO SAVE COMMAND $



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