ASMB,R,B,L,C HED 2313B (NON-DMA) BCS DRIVER D.62V VERIF 8/22/73 * * NAM D.62V ENT D.62,I.62 EXT DELAY,GONLY SPC 2 * THIS DRIVER OPERATES THE 2313B SUB-SYSTEM IN THE * BCS ENVIRONMENT. IT IS CALLED DIRECTLY FROM * ASSEMBLY LANGUAGE. FOR USE WITH FORTRAN OR ALGOL * REFER TO THE ALGOL/FTN-DRIVER INTERFACE ROUTINE (V2313). * * THIS IS A REDUCED VERSION OF THE DRIVER FOR USE WITH THE * 2313B VERIFICATION PROGRAM. THERE ARE NO CALLS FOR DAC OR * SIMULTANEOUS SAMPLE AND HOLD. * * THE CALLS FOR CLEAR AND STATUS ARE STANDARD WITH * STATUS BIT 0 FOR OVERLOAD AND BIT 1 FOR PACE * RATE TOO FAST. STATUS IS DYNAMIC (BITS 14 AND 15 OF * EQT WORD 2 MAY BOTH BE SET). * * THE READ CALL IS AS FOLLOWS: * * JSB .IOC. * OCT 1SFUR * /JMP\ * DEF CBUFF * DEC 3 * --- * CBUFF DEF CHAN * DEC N * DEF DATA
* --- * * WHERE S & F ARE AS FOLLOWS: * * S CONSISTS OF REQUEST CODE WORD BITS 9, 10, & 11 * * S = 1 UNPACED * S = 3 PACED * * F CONSISTS OF REQUEST CODE WORD BITS 6, 7, & 8 * * F = 0 SINGLE CHANNEL * F = 1 TWO CHANNEL * F = 2 SEQUENTIAL SCAN * F = 6 SEQUENTIAL SCAN (DIFFERENTIAL INPUTS) SKP * THE WRITE CALL IS AS FOLLOWS (PACER & LAD): * * JSB .IOC. * OCT 2SFUR * /JMP\ * DEF CBUFF * DEC 2 * --- * * FOR PACER: * * --- * CBUFF OCT RATE * OCT RANGE * --- * * FOR LAST ADDRESS DETECTOR (LAD): * * --- * CBUFF OCT LAD <2313B CARD ADRS OF LAST ADRS DET> * OCT LADRS * * WHERE S & F ARE AS FOLLOWS: * * S = 5 FOR PACER CALL * * S = 7 FOR LAST ADDRESS DETECTOR CALL * * FOR THE PACER CALL F IS ACTUALLY F0 & F1 WHERE * F0 IS REQ CODE BIT 6 AND F1 IS REQ CODE BIT 7 * * F0 = 0 CHANGE RATE IMMEDIATELY * F0 = 1 CHANGE RATE AT NEXT PACE PULSE * * F1 = 0 DISABLE EXTERNAL START/STOP * F1 = 1 ENABLE EXTERNAL START/STOP * * FOR THE LAST ADDRESS DETECTOR F IS REQ CODE BITS 6, 7, & 8 * * F = 0 TURN OFF LAD * F = 1 TURN ON LAD AND GET NEW LAST ADDRESS SKP * ** INITIATOR SECTION ** SPC 1 D.62 NOP STA SAVA SAVE EQT ENTRY ADRS STB SAVB SAVE REQ CODE ADRS LDA A,I GET AND B77 SELECT CODE STA SC AND SAVE LDB A,I GET TRAP CELL STB TCC CONTENTS AND SAVE LDA SAVB,I GET REQ CODE AND B77 OCT 77 (ALF) SHIFT TO LSB'S B7 OCT 7 (NOP) \ AND B17 THEN ISOLATE REQUEST SZA CLEAR REQUEST? JMP NTCLR NO SPC 2 * ** CLEAR REQ - ISSUE SYN ** SPC 1 * CONFIGURE SYN I/O INSTRUCTIONS SPC 1 LDA SC IOR XSFS FORM "SFS SC" INST STA SFS1 AND STORE IT ADA B300 FORM "OTA SC" INST STA OTA1 AND STORE IT IOR B1100 FORM "STC SC,C" INST STA STCC1 AND STORE IT XOR B5000 FORM "CLC SC" INST STA CLC1 AND STORE IT STA CLC2 / XOR B4000 FORM "STC SC" INST STA STC1 AND STORE IT SPC 1 * ISSUE SYN TWICE SPC 1 CLC1 CLC ADI MAKE SURE ENCODE IS RESET LDA SYN GET AND OUTPUT THE OTA1 OTA ADI SYSTEM NORMALIZE COMMAND CLA CLEAR THE STA SC,I TRAP CELL (PREVENT INTERRUPT) STCC1 STC ADI,C ENCODE NOP STC1 STC ADI ENCODE AGAIN SFS1 SFS ADI JMP *-1 CLC2 CLC ADI TURN OFF I/O CARD STB SC,I RESTORE TRAP CELL ISZ SAVA CLEAR LDB ET EQT WORD 2 - STB SAVA,I BUSY AND STATUS STA BUSY YES - CLEAR DRIVER BUSY FLAG SPC 1 JMP D.62,I CLEAR REQUEST RETURN POINT SKP * ** OPERATION REQUEST ** * (READ OR WRITE) SPC 1 NTCLR LDB BUSY DRIVER SZB BUSY? JMP REJB YES - REJECT CALL ADA N2 SAVE REQ CODE AS -1=READ, STA REQ 0=WRITE, AND +1=CONTROL LDA XRSS SET FIRST READING FLAG STA FIRST SPC 2 * ** CONFIGURE I/O INSTRUCTIONS ** SPC 1 LDA SC IOR XSFS FORM "SFS SC" INST STA SFS3 AND STORE IT STA SFS4 / ADA B300 FORM "OTA SC" INST STA OTA2 AND STORE IT STA OTA3 / STA OTA4 / IOR B1100 FORM "STC SC,C" INST STA STCC3 AND STORE IT STA STCC4 / STA STCC5 / XOR B5000 FORM "CLC SC" INST STA CLC3 AND STORE IT XOR B4200 FORM "LIA SC" INST STA INPUT AND STORE IT SKP * ** SUB-FUNCTION CHECK ** SPC 1 LDA SAVB,I GET REQ CODE WORD ALF,RAL ISOLATE SUB-FUNCTION STA SFB11 BIT 11 AND SAVE ALF,RAR ISOLATE SUB-FUNCTION STA SFB8 BIT 8 AND SAVE RAL,RAL ISOLATE SUB-FUNCTION F AND B3 (BITS 6 AND 7) AS ADA N1 -1, 0, OR +1 AND STA F SAVE SPC 2 SFS3 SFS ADI IS THE 2313 OPERABLE? JMP REJB NO - BUSY SPC 2 LDA ETBSY SET EQT ISZ SAVA WORD 2 LDB SAVA FOR STA B,I BUSY (CLEAR STATUS) STA BUSY SET DRIVER BUSY FLAG CLA CLEAR STA RNFLG RANDOM MODE FLAG STA DECNT AND DELAY COUNTER SPC 1 LDA SAVB,I GET PACE MODE BIT AND B2000 FROM BIT 10 OF REQ RAL,RAL CODE WORD, ROTATE STA PBIT INTO BIT 12 AND SAVE IOR CLEAN FORM LAST DATA STA SFS3 COMMAND WORD & STORE SKP LDB SAVB \\\\\\\ ADB B2 \ LDA B,I \ INB GET \ LDB B,I AND \ CMB,INB SAVE \ STB TSAVA PARAMETER\ LDB CBUFF LIST / STB SAVAX FROM / GET LDB A,I CALL/ STB SAVAX,I / INA / ISZ SAVAX / ISZ TSAVA / JMP GET ////// SPC 2 LDA NUMBR SET NUMBER CMA,INA OF READINGS NEGATIVE STA CNTR FOR COUNTER SPC 1 LDA PBIT GET PACE MODE BIT LDB REQ REQUEST SSB CODE? JMP READ =1 SKP * ** PROCESS PACER REQUEST ** SPC 1 SZA LAD REQUEST? JMP LAD YES LDA SAVB,I GET BITS 6 AND 7 AND B300 OF REQ CODE WORD AND ALF,RAL MOVE INTO BITS 11 AND 12 STA B SPC 1 LDA CNBUF GET RATE AND B377 AND OR IOR B IT TO COMMAND STA B SPC 1 LDA NUMBR GET RANGE, AND B7 MOVE TO PROPER ALF,ALF POSITION AND OR IOR B IT TO COMMAND SPC 1 IOR PCR FORM PACER COMMAND JMP OTA3 SPC 2 LAD LDA NUMBR GET LAST AND B7777 ADDRESS LDB F CLEAR SZB,RSS OR SET? IOR PBIT SET - PUT IN BIT 12 STA PDATA SAVE LAST ADDRESS LDA BIT14 FORM DAC CMND IOR CNBUF WD TO ADRS LAD CLB STB SFB11 JMP OTA3 SPC 2 SKP * ** READ REQUESTS ** SPC 1 READ LDA BIT13 FORM MPX COMMAND SPC 2 * ** PROCESS HLMPX REQUEST ** SPC 1 IOR BIT15 FORM MPX DIGITIZE COMMAND CLB,INB CHECK NUMBER CPB NUMBR OF READINGS? XOR BIT13 =1 - CHANGE TO RANDOM STA CMND SAVE COMMAND WORD SPC 1 LDA B7777 SET CHANNEL STA MASK NUMBER MASK CLB,INB SEQUENTIAL CPB F SCAN? XOR B YES - CLEAR BIT 0 OF MASK STA MASK2 LDB BIT14 SET SEQUENTIAL STB SEQWD BIT WORD LDB SFB8 SUB-FUNCTION BIT 8 SLB,RSS CHECK FOR DIFF OR S.E. ISZ SEQWD S.E. - SET BIT 0 OF SEQWD SPC 1 SPC 1 JSB POW SET GAIN? LDA CNBUF,I GET FIRST CHANNEL AND MASK NUMBER AND OR IT IOR CMND ONTO COMMAND CLB,INB CHECK NUMBER CPB NUMBR OF READINGS JMP SRNFG =1 - GO SET RANDOM FLAG SPC 1 JSB FOUT OUTPUT 1ST CMND (BAD DATA BACK) ISZ CNTR INCREMENT # OF READINGS SPC 1 LDA CMND GET COMMAND WORD LDB F SUB- SZB,RSS FUNCTION F? JMP L2 BLOCK SCAN SSB JMP L1 SINGLE CHANNEL IOR SEQWD SEQUENTIAL SCAN - FORM SEQ SPC 1 L1 STA CMND2 SAVE COMMAND LDA CNBUF,I PUT AND MASK2 START CHANNEL CLB,INB ONTO THE CPB F COMMAND ADA N2 IOR CMND2 IOR PBIT STA CMND2 JMP START SKP L2 ISZ CNBUF INCREMENT CHANNEL # BUFFER LDA CNBUF,I GET CHANNEL AND MASK NUMBER AND OR IOR CMND IT ONTO COMMAND IOR PBIT PUT THE PACE BIT STA CMND2 ON THE COMMAND SPC 2 * ** OUTPUT COMMAND ** SPC 1 START LDA CMND2 OTA3 OTA ADI OUTPUT COMMAND WORD CLA CLEAR A & B CLB REGISTERS FOR NORMAL RETURN STCC3 STC ADI,C ENCODE THE 2313 SPC 1 JMP D.62,I RETURN TO .IOC. SPC 2 * ** ONE OPERATION ONLY ** SPC 1 SRNFG CCB SET RANDOM STB RNFLG MODE FLAG IOR PBIT PUT PACE BIT ON CMND JMP OTA3 SPC 2 * ** BUSY REJECT ** SPC 1 REJB LDB BIT15 SET BIT 15 OF B FOR DEVICE BUSY CLA,INA SET A REG TO 1 AS REJECT FLAG JMP D.62,I RETURN TO .IOC. SPC 2 * ** FLAG OUTPUT ROUTINE ** * THIS ROUTINE IS USED BY BOTH * THE INITIATOR AND * CONTINUATOR SECTIONS * FOR OUTPUTTING WITHOUT * INTERRUPT. SPC 1 FOUT NOP CLB CLEAR THE TRAP CELL STB SC,I TO PREVENT INTERRUPT OTA2 OTA ADI OUTPUT WORD PASSED IN A REG STCC4 STC ADI,C ENCODE SFS4 SFS ADI WAIT ON JMP *-1 FLAG CLC3 CLC ADI TURN OFF I/O CARD LDB TCC RESTORE STB SC,I TRAP CELL JMP FOUT,I SKP * ** CONTINUATOR SECTION ** SPC 1 I.62 NOP STA SAVAX SAVE A REGISTER STB OTA3 SAVE B REGISTER ERA,ALS SAVE SOC E AND INA O STA .2930 REGISTERS SPC 1 LDB REQ CHECK REQUEST CODE SSB READ REQ? JMP INPUT YES LDB SFB11 LAD REQ? SLB,RSS JMP DAC YES JMP THEND DONE SPC 2 * ** PROCESS READ REQUESTS ** SPC 1 INPUT LIA ADI GET DATA FROM I/O CARD AND INMSK ELIMINATE UNUSED BITS STA DBUFF,I AND STORE IN DATA BUFFER AND B3 ISOLATE BITS 0 & 1 FIRST RSS NOP AFTER FIRST READING JMP XYZ AND B1 ELIMINATE PACE ERROR BIT CLB CLEAR FIRST STB FIRST READING TEST INSTRUCTION XYZ SZA TRANSMISSION ERROR? IOR BIT14 YES - SET BIT 14 IOR SAVA,I SET STATUS INFORMATION STA SAVA,I INTO EQT WORD 2 SPC 1 ISZ CNTR INCR # OF READINGS - DONE? XRSS RSS NO JMP FINIS YES LDB F SUB- SZB FUNCTION F? JMP L20 NOT =1 ISZ DECNT =1 - (BLOCK SCAN) LDB DECNT DO DELAY SLB,RSS ON JSB WAIT ALT. CHANNELS JSB POW SET GAIN? ISZ CNBUF LDA CNBUF,I GET NEW CHAN # AND MASK IOR CMND SET COMMAND BITS IOR PBIT SET PACER CONTROL BIT JMP L31 SKP L20 ISZ DBUFF INCR DATA BUFF ADDR (SING OR SEQ) SSB DELAY ON JSB WAIT SINGLE CHANNEL JMP EXIT (FOR SINGLE CHAN OR SEQ) SPC 2 DAC LDA PDATA GET LAST ADDRESS CLB,INB SET TEST FOR FINISH STB SFB11 JMP OTA4 SPC 3 * ** GET LAST READING ** SPC 1 FINIS CCA ISZ RNFLG RANDOM MODE FLAG? JMP L30 NO - GET LAST READING SPC 2 * ** DONE - CLEAR BUSY, ETC ** SPC 1 THEND LDA SAVA,I CLEAR EQT WORD 2 ELA,CLE,ERA BUSY BIT STA SAVA,I CLA CLEAR DRIVER STA BUSY BUSY FLAG SPC 1 LDA CLC3 SET EXIT STA STCC5 CONDITION FOR DONE JMP EXIT SKP * ** GET LAST READING (CONT.) ** SPC 1 L30 STA CNTR SET # OF OPS TO -1 STA RNFLG SET RANDOM MODE FLAG LDB F SSB SINGLE CHANNEL? JMP W YES SZB NO - TWO CHANNEL? JMP *+5 NO, SEQ. JSB POW YES - SET GAIN LDA NUMBR ODD # OF SLA CHANNELS? W JSB WAIT YES - DELAY LDA SFS3 GET "CLEAN" CMND FOR LAST RDNG L31 ISZ DBUFF INC DATA BUFF (FOR BLOCK SCAN) OTA4 OTA ADI OUTPUT NEW COMMAND OR DATA SPC 2 * ** EXIT POINT, DONE OR OTHER ** SPC 1 EXIT LDA .2930 RESTORE CLO E AND SLA,ELA O STO REGISTERS LDA SAVAX RESTORE A REGISTER LDB OTA3 RESTORE B REGISTER STCC5 STC ADI,C ENCODE (EXCEPT WHEN DONE - CLC) SPC 1 JMP I.62,I SPC 2 * ** CALL FOR DELAY ** SPC 1 WAIT NOP DELAY ONLY IF PACER NOT SET LDA PBIT PACER SZA,RSS SET? JSB DELAY NO - SO DELAY NOP ALL0W ALGOL TO RETURN JMP WAIT,I CONTINUE SPC 2 * ** PROGRAM LLMPX GAIN ** SPC 1 POW NOP LDA GONLY DO WE WANT LDA A,I TO SET GAIN? SSA,RSS YES - GO ON JMP HENCE NO - RETURN LDA CNBUF,I FORM 1ST COMMAND AND B7740 WORD IOR BIT14 JSB FOUT ISSUE TO 2313 LDA CNBUF,I FORM 2ND COMMAND ALF,RAR WORD AND B7 JSB FOUT ISSUE TO 2313 HENCE JMP POW,I SKP SPC 2 * ** CONSTANTS AND STORAGE ** SPC 1 A EQU 0 ADI EQU 0 SPC 1 B EQU 1 B1 OCT 1 B2 OCT 2 B3 OCT 3 B17 OCT 17 B300 OCT 300 B377 OCT 377 B1100 OCT 1100 B2000 OCT 2000 B4000 OCT 4000 B4200 OCT 4200 B5000 OCT 5000 B7740 OCT 7740 B7777 OCT 7777 BIT13 OCT 20000 BIT14 OCT 40000 BIT15 OCT 100000 BUSY NOP SPC 1 CLEAN OCT 120000 CMND NOP CMND2 NOP CNTR NOP SPC 1 DECNT NOP SPC 1 ET OCT 31000 ETBSY OCT 131000 SPC 1 F NOP SPC 1 INMSK OCT 177762 SPC 1 MASK NOP MASK2 NOP SPC 1 N1 OCT -1 N2 OCT -2 SKP PBIT NOP PCR OCT 60000 PDATA NOP SPC 1 REQ NOP RNFLG NOP SPC 1 SAVA NOP SAVAX NOP SAVB NOP SC NOP SEQWD NOP SFB8 NOP SFB11 NOP SYN OCT 140001 SPC 1 TCC NOP TSAVA NOP SPC 1 SPC 1 XSFS SFS ADI SPC 2 * ** PARAMETER LIST STORAGE ** SPC 1 CBUFF DEF *+1 CNBUF NOP NUMBR NOP DBUFF NOP .2930 NOP SPC 2 * ** END OF DRIVER ** SPC 2 END