ASMB,R,B,L,C HED RTE DIGITAL POWER SUPPLY DRIVER DVR70 NAM DVR70,0 ENT I.70,C.70 EXT $LIST * * * * 14908-60001 REV A BINARY TAPE (RELOCATABLE) * 14908-80001 REV A SOURCE TAPE * 14908-90001 REV A LISTING (WITH CROSS REF.) * 14908-90002 REV A SMALL PROGRAM MANUAL * * * REVISION A (UNRELEASED) JULY 1972, MING U. CHANG * REVISION A (RELEASED) NOV 1974, BOB HARRISON * * SKP HED DVR70 I N I T I A T O R RWH 11/74 I.70 NOP ENTRY POINT JSB SETIO (A) CONTAINS CHANNEL NUMBER * GO TO CONFIGURATION ROUTINE LDA EQT12,I GET SCHEDULE FLAG SZA IS FLAG DEFINED YET? JMP CONT YES, SKIP DEFINITION SECTION LDA CHANL PUT IO CHANNEL INTO A. SET UP ADA N6 INDEX INTO INTERRUPT TABLE ADA INTBL TO GET THE SCHEDULE WORD LDB A,I PUT SCHEDULE WORD INTO B CMB,SSB,INB IF WORD=0 THEN NO PROGRAM CCB IF NO PR, SET -1 IN EQT9 STB EQT12,I SET + ADDR IN EQT12 IF USER PR LDB EQT1 SET DVR70 EQT ENTRY INTO STB A,I THE INTERRUPT TABLE LDA EQT12,I GET EQT12 SSA USR PR IN SYS, EQT13 BIT 10=1 JMP CONT NO USR PR IN SYS, EQT13 BIT 10=0 LDA EQT13,I GET EQT13 IOR B2000 SET BIT 10=1 STA EQT13,I RESTORE EQT13, BIT 10=1 CONT LDA EQT6,I GET CONTROL WORD OF REQUEST AND B77 ISOLATE REQUEST CODE (FRST 6 BITS) CPA D3 IS IT A CONTROL REQUEST? JMP CNTRL YES, CHECK FUNCTION LDA EQT6,I GET CONTROL WORD OF REQUEST STA B SAVE IN B AND B700 ISOLATE K,V,M BITS CPA KVM BINARY TRANSMISSION ONLY JMP IOTYP O.K. REJ1 LDA B1 REJECT ILLEGAL READ/WRITE CALL JMP I.70,I RETURN * * CONTROL REQUEST * CNTRL LDA EQT6,I GET CONTROL WORD OF REQUEST AND B7700 ISOLATE FUNCTION CODE CPA B2000 SCHEDULE USER'S PROGRAM? JMP USER YES CPA B2100 N0, UNSCHEDULE USER'S PROGRAM? JMP NOUSR YES JMP REJ2 NEITHER, THEN ILLEGAL USER LDA EQT12,I CHECK FOR USER PROGRAM IN SYS SSA USER PROGRAM IN SYS, CONTINUE JMP REJ2 NO USER PR IN SYS, BAD REQUEST LDA EQT13,I GET EQT 13 IOR B2000 SET BIT 10 ON STA EQT13,I RESTORE EQT 13, BIT 10=1 JMP DONE RETURN NOUSR LDA EQT13,I GET EQT 13 AND B1757 CLEAR BIT 10 STA EQT13,I RESTORE EQT 13, BIT 10=0 DONE LDA B4 IMMEDIATE COMPLETION JMP I.70,I RETURN REJ2 LDA B2 REJECT ILLEGAL CONTROL CALL JMP I.70,I RETURN * * READ OR WRITE * IOTYP LDA B GET CONTROL WORD FROM "B" TO "A" AND B77 ISOLATE FIRST 6 BITS CPA B2 IS IT WRITE? JMP WRITE YES CPA B1 IS IS READ? JMP READ YES JMP REJ1 NEITHER, THEN ILLEGAL * * READ REQUEST * READ LDB EQT7,I GET BUFFER ADDRESS LDA EQT13,I GET COMPLETE STATUS WORD FROM DVS STA B,I PUT LATCH/LIMIT STATUS INTO BUFFER LDA B4 (A)=4, IMMEDIATE COMPLETION CLB,INB LOAD ONE WORD TRANSMITTED IN "B" JMP I.70,I RETURN * * WRITE REQUEST * WRITE LDA EQT8,I CHECK VALIDITY OF BUFFER LENGTH SZA REJECT ZERO SSA REJECT NEGATIVE JMP REJ1 SLA,ARS REJECT ODD COUNT-DIVIDE BUFFL BY 2 JMP REJ1 CMA,INA SET RUNNING COUNT NEGATIVE STA EQT9,I IN EQT12 CLC.1 CLC PS,C SET CHANNEL TO TIMING MODE OTA.1 OTA PS INITIALIZE OPERATION JSB OUT GO DO OUTPUT LDA EQT5,I GET STATUS FROM EQT5 AND M1774 CLEAR LATCH/LIMIT STATUS U00-U07 STA EQT5,I STORE LATCH/LIMIT STATUS IN EQT5 CLA (A)=0, OPERATION INITIALIZED JMP I.70,I RETURN HED DVR70 COMMON ROUTINES AND CONSTANTS RWH 11/74 * * MAIN OUTPUT ROUTINE * OUT NOP ENTRY POINT LDB EQT7,I GET BUFFER ADDRESS STB ADDR SAVE IT INB MAKE ADDRESS OF SECOND WORD LDA B,I GET CONTROL WORD STA CONTR SAVE IT AND LOW3 ISOLATE UNIT # CMA MAKE UNIT NUMBER NEGATIVE +(-1) CLB,INB INA,SZA,RSS JMP *+3 B5000 BLS DESIGNATE CURRENT UNIT IN BIT 0-7 JMP *-3 STB EQT10,I SAVE CURRENT UNIT MASK IN EQT10 LDA CONTR GET PROGRAMMING RANGE INFO AND KVM CHECK PROGRAMMING RANGE SZA BIT(6)=0, HI RANGE JMP LOWRG BIT(6)=1, LO RANGE LDA EQT11,I GET RANGE FLAG FROM EQT11 CMB INVERT CURRENT UNIT MASK AND B AND CLEAR STORED RANGE BIT STA EQT11,I STORE HI RANGE BIT IN EQT11 OK LDB ADDR,I GET PROGRAMMING DATA LDA EQT13,I GET COMPLETE DCPS STATUS AND EQT10,I DETERMINE IF UNIT IN LATCH/LIMIT STA PSTAT STORE UNIT STATUS SZA NOT IN LATCH/LIMIT, GOOD JMP TMTCK DO WE PROGRAM ZERO FIRST? BACK LDA CONTR GET CONTROL WORD CLC.2 CLC PS,C INITIALIZE WORD SEQUENCE STC.1 STC PS ENABLE TIMING INTERRUPT OTB.1 OTB PS OUTPUT FIRST WORD OTA.2 OTA PS OUTPUT SECOND WORD LDA EQT13,I GET EQT13 AND RST RESET TIMEOUT STATUS STA EQT13,I RESTORE EQT13 LDA PSTAT GET UNIT'S PREVIOUS STATUS SZA,RSS UNIT WAS IN LATCH/LIMIT-DELAY JMP OUT,I RETURN LDA EQT4,I GET EQT4 (SYS HANDLES TMOUT) IOR D4096 TURN BIT 12 ON STA EQT4,I RESTORE EQT4 (DVR HANDLES TMOUT) JMP OUT,I RETURN TMTCK LDA EQT13,I GET EQT13 AND D6144 ISOLATE BITS 11 AND 12 SZA NOT A TIMEOUT RETURN RSS A TIMEOUT RETURN JMP WAIT PROGRAM 0 FIRST AND TIMEOUT CLA INDICATE NO LATCH CONDITION STA PSTAT EVEN THOUGH IN 2ND LATCH JMP BACK NORMAL CONTINUE LOWRG LDA EQT11,I GET RANGE FLAG AND B WAS IT LOW RANGE BEFORE? SZA NO, SO PROGRAM 0 ON X1 FIRST JMP OK YES, NO PROBLEM LDA EQT11,I WAS HIGH RANGE IOR B SET PROPER BIT (0 TO 7) TO 1 STA EQT11,I STORE LOW RANGE FOR CURRENT UNIT LDA EQT13,I GET COMPLETE DCPS STATUS AND EQT10,I DETERMINE IF UNIT IN LATCH/LIMIT STA PSTAT STORE UNIT STATUS WAIT CCA BACKUP RUNNING COUNT ADA EQT9,I STA EQT9,I BY 1 LDA M2 BACKUP BUFFER ADDR. ADA EQT7,I BY 2 STA EQT7,I ISZ EQT8,I INCREMENT BUFFER LENGTH ISZ EQT8,I BY 2 CLB PROGRAM ZERO OUTPUT JMP BACK IN LOW RANGE FIRST SKP * * SYSTEM COMMUNICATION AREA * EQT1 EQU 1660B FOR ALARM INTERRUPT EQT4 EQU 1663B FOR 50 MS DELAY EQT5 EQU 1664B FOR STATUS BITS EQT6 EQU 1665B FOR REQUEST CODE EQT7 EQU 1666B FOR BUFFER ADDRESS EQT8 EQU 1667B FOR BUFFER LENGTH EQT9 EQU 1670B FOR SCHEDULING PROGRAM EQT10 EQU 1671B UNIT MASK EQT11 EQU 1672B RANGE FLAG EQT12 EQU 1771B RUNNING COUNT EQT13 EQU 1772B COMPLETE STATUS WORD EQT15 EQU 1774B IF ALARM INTERRUPT, ZEROED INTBL EQU 1654B FWA OF INTERRUPT TABLE * * CONSTANTS AND STORAGES * ADDR BSS 1 BUFFER ADDRESS CONTR BSS 1 RANGE, LATCH/LIMIT SETTING,UNIT# CHANL NOP STORAGE FOR CHANNEL NUMBER UNIT# NOP STORAGE FOR ID WD 2 ADDRESS CHAN# NOP STORAGE FOR ID WD 3 ADDRESS PSTAT NOP STORAGE FOR PREVIOUS STATUS LOW3 OCT 7 LOW8 OCT 377 B1 OCT 1 B4 OCT 4 B77 OCT 77 B700 OCT 700 M1774 OCT 177400 M2 OCT -2 B7700 OCT 7700 B2000 OCT 2000 B2100 OCT 2100 B1757 OCT 175777 D3 DEC 3 N6 OCT -6 D15 DEC 15 D8 DEC 8 RST OCT 163777 D4096 DEC 4096 D6144 DEC 6144 D5 DEC -5 B EQU 01 A EQU 00 PS EQU 00 KVM OCT 100 B2 OCT 2 B1100 OCT 1100 LIAIN LIA PS * * CONFIGURATION ROUTINE * SETIO NOP ENTRY POINT. "A" REG HAS CHAN # STA CHANL SAVE CHANNEL NUMBER IOR LIAIN MAKE LIA PS STA LIA.1 STA LIA.2 ADA KVM MAKE OTA PS STA OTA.1 STA OTA.2 ADA KVM MAKE STC PS STA STC.1 STA STC.2 ADA B5000 MAKE CLC,C PS STA CLC.1 STA CLC.2 STA CLC.3 STA CLC.4 STA CLC.5 XOR B1100 MAKE OTB PS STA OTB.1 LDA EQT13,I GET EQT 13 AND B2000 ISOLATE BIT 10 STA B SAVE BIT 10 CONDITION LIA.1 LIA PS READ LATCH/LIMIT STATUS FROM DPS IOR B RE-ENTER BIT 10 CONDITION STA EQT13,I SAVE IN EQT13 AND LOW8 ISOLATE BITS 0-7 STA B SAVE LOWER 8 STATUS BITS LDA EQT5,I GET PREVIOUS EQT STATUS WORD AND M1774 CLEAR LOWER 8 BITS (PREV. STATUS) IOR B UPDATE EQT STATUS WORD STA EQT5,I STORE LATCH/LIMIT STATUS IN EQT5 JMP SETIO,I RETURN HED DVR70 C O N T I N U A T O R RWH 11/74 C.70 NOP ENTRY POINT JSB SETIO CONFIGURE I/O INSTR. LDB EQT1,I CHECK SUSPENSION LIST SZB,RSS IF ZERO, ALARM INTERRUPT JMP ALARM LDA EQT4,I GET EQT 4, CHECK TMOUT STATUS AND D6144 ISOLATE BITS 11 & 12 SZA,RSS 11 & 12 # 0, CONTINUE CHECKING JMP NEXT 11 & 12 = 0, NORMAL CONTINUE CPA D6144 CHECK FOR TIMEOUT RSS WAS A TIMEOUT, CONTINUE JMP TMTRQ 11=0,12=1 TIMEOUT REQUIRED IOR EQT13,I SAVE TIMEOUT INFORMATION STA EQT13,I RESTORE EQT13 LDA EQT4,I GET EQT4 AND RST RESET BITS 11,12, NORMAL CONT. STA EQT4,I RESTORE EQT 4 NEXT ISZ EQT9,I END OF RUNNING COUNT? JMP OUTPT NO, CONTINUE * * TERMINATION SECTION * CLC.3 CLC PS,C ASSIGN ALARM INTERRUPT LIA.2 LIA PS MODE STC.2 STC PS ENABLE INTERRUPT LDB EQT8,I BUFFER LENGTH=TRANSMISSION LOG CLA (A)=0, NORMAL TERMINATION JMP C.70,I TERMINATION RETURN * * CONTINUATION * OUTPT ISZ EQT7,I ISZ EQT7,I UPDATE BUFFER ADDRESS JSB OUT OUTPUT NEXT WORD-PAIR EXIT ISZ C.70 CONTINUATION RETURN JMP C.70,I * * 50 MS TIMEOUT REQUIRED * TMTRQ LDA D5 GET TIMING CONSTANT STA EQT15,I SET SYSTEM CLOCK TO 50 MS JMP EXIT RETURN, WAIT FOR TIMEOUT * * ALARM INTERRUPT * ALARM LDA EQT4,I GET EQT 4 AND D6144 ISOLATE BITS 11 & 12 SZA BITS 11,12=0 NOT A TIMEOUT JMP SCHED WAS A TMT, WAITING FOR PROGRM LDA EQT5,I GET EQT 5 FOR STATUS CHECK AND LOW8 ISOLATE LOWER 8 BITS SZA,RSS IF NOT ZERO, LATCH/LIMIT JMP *+3 NO CHANGE, THEREFORE SPURIOUS JMP SCHED LATCHED/LIMITED, SCHED ALARM PROG. CLC.4 CLC PS,C DISABLE INTERRUPT CLB SET SYSTEM TIME OUT CLOCK STB EQT15,I TO ZERO JMP EXIT GO TO CONTINUATION EXIT * * SCHEDULE USER'S PROGRAM, IF ANY * * ADDRESS OF ID WORD 2 PUT IN PROG. B-REGISTER, * LATEST LATCH/LIMIT STATUS PUT IN ID WORD 2, BITS 0-7 * (CORRESPONDING TO UNITS 0-7) AND OCTAL CHANNEL NUMBER * PUT IN BITS 10-15 * SCHED LDA EQT13,I GET EQT 13 AND B2000 CHECK IF USER PROGRAM SCHEDULED SZA,RSS USER PROGRAM IN SYSTEM, CONTINUE JMP CLC.4 NO USER PROGRAM, RETURN LDB EQT12,I GET ADDRESS OF ID SEGMENT STB SCH PUT ADDRESS INTO $LIST CALL ADB D15 ADD 15 LDB B,I GET STATUS OF USERS PROGRAM SZB WAS IT DORMANT? JMP NDORM NO, WAIT 50 MS AND TRY AGAIN LDA EQT4,I GET EQT 4 AND RST RESET BITS 11 & 12 STA EQT4,I RESTORE EQT4(SYS HANDLES TMTOUT) JSB $LIST MAKE CALL TO SCHEDULE PROGRAM OCT 101 ID SEGMENT ADDR CODE + SCHED REQ SCH NOP STORE ID SEGMENT ADDRESS HERE LDB EQT12,I GET ADDRESS OF ID SEGMENT WD 1 INB B=ADDRESS OF ID WORD 2 STB UNIT# UNIT# CONTAINS ADDR OF ID WORD 2 INB B=ADDRESS OF ID WORD 3 STB CHAN# CHAN# CONTAINS ADDR OF ID WORD 3 ADB D8 B=ADDR OF PROG. B-REG (ID WD 11) LDA UNIT# PUT ADDRESS OF WD 2 IN "A" STA B,I PUT ADDRESS OF WD 2 IN PROG. B-REG LDA EQT4,I GET CHANNEL NUMBER AND B77 ISOLATE LOWER 6 BITS STA CHAN#,I STORE CHANNEL NUMBER IN ID WORD 3 LDA EQT5,I GET UNITS IN LATCH/LIMIT AND LOW8 ISOLATE LOWER 8 BITS STA UNIT#,I STORE STATUS IN ID WORD 2 JMP CLC.4 RETURN * NDORM LDA EQT4,I GET EQT4(SYS HANDLES TMTOUT) IOR D4096 TURN BIT 12 ON STA EQT4,I RESTORE EQT4 (DVR HANDLES TMTOUT) LDA D5 GET TIMING CONSTANT STA EQT15,I IN EQT 15 CLC.5 CLC PS,C CLEAR INTERRUPT JMP EXIT RETURN (WAIT FOR TIMEOUT) * END