PABSADR CSY/ B01 P€1_%NAM ABSADR_'DECK-ID B01 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$ABSOLUTIZES PARAMETER ADDRESS, RETURNS IT IN Q, BUMPS RETURN_^1*_]_^1*_$PARAMETER ADDRESS PASSED AND BUMPED IN VOLATILE_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT ABSAD_^1_€€%EXT END0V4_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU H7FFF($42)_^1_%EQU ZERO($22)_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1_%EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 RETURN ADDRESS_^1_%SPC 4_^1ABSAD NUM 0_^1_%IIN 0_^1_%LDA* ABSAD_^1_%STA- SUBRET,I_$SAVE RETURN_^1_%EIN 0_^1_%LDA- €XIRETN,I_^1_%TRA Q_^1_%LDQ- (ZERO),Q_^1_%SAM AB2_*PART 1 CALL_^1_%SUB =XEND0V4_^1_%SAP AB2_*PART 1 CALL_^1_%SQP AB2_*PART 0 ABSOLUTE PARAMETERS_^1_%ADQ- IRETN,I_^1_%TRQ A_^1_%AND- H7FFF_^1_%TRA Q_^1AB2_"RAO- IRETN,I_%BUMP RETURN ADDRESS_^1_%IIN 0_^1_%LDA- SUBRET,I_^1_%STA* ABSAD_(RESTORE RETURN_^1_%EIN 0_^1_%JMP* (ABSAD)_^1_%END_]_^__XPABZLDC CSY/ B02 P€1_%NAM ABZLDC_'DECK-ID B02 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1***_]_^1*_$FUNCTION_^1*_$--------_^1*S1_]_^1*_$THIS ROUTINE IS USED TO LOAD AN RTOS SYSTEM FROM AN ABSOLUTIZED_^1*_$DECK OF CARDS PRODUCED BY THE CONVERSION PROGRAM CONSYS F€€ROM A_^1*_$7 OR 9 TRACK SYSTEM TAPE THAT WAS PRODUCED BY THE RTOS SYSTEM_^1*_$INITIALIZER._^1_%SPC 2_^1****_]_^1*_$*****************************************************************_^1*_$ENTRY POINTS_^1*_$*****************************************************************_^1_%ENT ABZLDC_^1****_]_^1_%SPC 3_^1***_"GENERAL DESCRIPTION_^1*_$-------------------_^1*S1_]_^1*_$THIS PROGRAM€€ WILL INITIATE A FEED, READ A CARD (COLUMN-BY-COLUMN)_^1*_$AND PACK-UNPACK 12-BIT BINARY INTO 16-BIT BINARY IMAGES. EACH_^1*_$16-BIT IMAGE IS PLACED INTO A WORD IN CORE._^1*S2_]_^1*_$THIS LOADER CAN BE USED WITH A 1728/430 CARD READER-PUNCH OR A_^1*_$1729-3 CARD READER._^1*_$THE EQUIPMENT NUMBER OF THE READER IS ASSUMED TO BE 11._^1*_$IF THE EQUIPMENT NUMBER IS 10, THE EQUIPMENT C€€ODE IS_^1*_$CHANGED AND THE PROGRAM RETRIES THE OPERATION._^1*S2_]_^1*_$THIS PROGRAM MUST BE ABSOLUTIZED INTO AN 8-BIT BINARY DECK WITH_^1*_$THE CONVERSION ROUTINE OUTBTC. THE 8-BIT DECK MAY BE LOADED INTO_^1*_$CORE BY USING THE STANDARD MSOS CARD BOOTSTRAP LOADER (IDENTICAL_^1*_$WITH THE STANDARD RTOS BOOTSTRAP)_^1*S2_]_^1*_$DEFINITIONS_^1*_$-----------_^1*S1_]_^1*_$MAXIMG - PROG€€RAM SIZE_^1*_$LOCATN - CORE ADDRESS OF CURRENT WORD BEING LOADED_^1*_$CARDNO - CARD NUMBER OF CARD BEING READ_^1*_$OLDSNO - NEXT SEQUENCE NUMBER TO BE READ_^1*_$COLCNT - INDEX FOR COLUMN COUNT_^1*_$NOIN4 - COLUMN INDEX WITHIN EACH GROUP OF 4 COLUMNS_^1*_$SEQ1 - NUMBER FOR THE ADDITION OF 1 TO THE SEQUENCE NO_^1*_$FEED - CR FEED REQUEST ONLY_^1*_$EQUIP AND EQUIPD - CARD READER EQUIP€€MENT CODE_^1*_$SUM - CHECKSUM_^1_%EJT_]_^1ABZLDC ENA 1_,SET CARD NUMBER = 1_^1_%STA* CARDNO_^1_%SLS 0_^1_%ENA $50_^1_%STA* OLDSNO_'SET OLD SEQUENCE NUMBER = 0_^1_%CLR A_^1_%STA* SUM_*CLEAR CHECKSUM_^1_%STA* LOCATN_'CLEAR CORE ADDRESS POINTER_^1_%JMP* DOWHL2_^1CRWHL1 LDA* LOCATN_'CHECK THAT WERE NOT OVER THE MAX CORE ADDRESS_^1_%EOR* MAXIMG_^1_%SAN DOWHL2_^1_%JMP* VERCKS_^1DOWH€€L2 ENA 1_,SET COLUMN COUNT = 1_^1_%STA* COLCNT_^1_%LDA* FEED_)FEED A CARD_^1_%LDQ =N$5A1_'WES CODE, EQUIP 11_^1FEED1 OUT REJX-*_'FEED_^1_%STQ* EQUIPD_'SAVE WES CODE_^1CRWHL2 LDA* COLCNT_'CHECK IF CARD IS COMPLETE_^1_%INA -81_^1_%SAN CONCR2_^1_%JMP* CRWHL1_'FINISHED WITH CARD - GO GET ANOTHER ONE_^1CONCR2 ENA 1_,SET NO-IN-FOUR = 1_^1_%STA* NOIN4_^1CRWHL3 LDA* NOIN4_(CHECK IF €€FINISHED WITH THIS GROUP OF 4 COLS_^1_%INA -5_^1_%SAN CONCR3_'SKIP IF STILL IN SAME GROUP OF 4_^1_%JMP CRWHL2_^1CONCR3 LDQ* EQUIPD_'READ A COLUMN OF DATA_^1_%INQ -1_^1_%INP -1_^1_%RTJ PKUNCR_'CALL UNPACK/PACK 12-16_^1_%LDA* COLCNT_'IF FIRST COLUMN, ITS THE SEQUENCE NUMBER_^1_%INA -1_^1_%SAZ 1_^1_%JMP* CONCR5_^1_%TRQ A_,CHECK THAT SEQ NUMBER IS CORRECT_^1_%EOR* OLDSNO_^1_%SA€€Z CONCR4_^1_%TRQ A_^1_%SUB =N$F0_(CHECK FOR EOF_^1_%SAN 1_^1_%JMP* VERCKS_'EOF - GO VERIFY CHECKSUM_^1_%SPC 1_^1_%NUM $18FF_(SEQUENCE ERROR, NOT EOF - STOP_^1REJX_!NOP 0_^1_%LDQ =N$521_'WES CODE, EQUIP 10_^1_%JMP* FEED1_(TRY AGAIN_^1_%SPC 2_^1CONCR4 LDA* SEQ1_)CALC NEXT SEQUENCE NUMBER_^1_%ADD* OLDSNO_^1_%STA* OLDSNO_^1_%TRQ A_4ADD SEQUENCE NO INTO CHECKSUM_^1_%ADD* SUM_^1€€_%STA* SUM_^1_%JMP* CONCR6_^1CONCR5 LDA* CARDNO_'CHECK IF CARD NO =1 AND COL COUNT = 3_^1_%INA -1_^1_%SAN NOCRD1_^1_%LDA* COLCNT_^1_%INA -3_^1_%SAN NOCRD1_^1_%TRQ A_-IT IS - ITS THE LENGTH OF THE FILE_^1_%ADD* SUM_*ADD LENGTH TO CHECKSUM_^1_%STA* SUM_^1_%TCQ Q_,RESET MAX CORE ADDRESS_^1_%INQ 1_,= PROGRAM LENGTH + 1_^1_%STQ* MAXIMG_^1_%RAO* CARDNO_'INCREASE CARDNO_^1_%JMP* CON€€CR6_^1NOCRD1 LDA* COLCNT_'IF COLUMN IS AT LEAST 3, DO NORMAL PROCESSING_^1_%INA -3_+(NO INFO ENDS IN COLUMN 2)_^1_%SAM CONCR6_^1STRDAT LDA* NOIN4_(CHECK FOR FIRST COLUMN IN GROUP OF 4_^1_%INA -1_^1_%SAZ CONCR6_'IF FIRST-OF-4, HEX WORD ENDS IN COL 2 - DONT_^1*_ESAVE THE WORD_^1_%STQ* (LOCATN)_$NOT FIRST-OF-4 - SAVE THE WORD_^1_%ADQ* SUM_*INCLUDE IT IN THE CHECKSUM_^1_%STQ* SUM_^€€1_%RAO* LOCATN_'INCREASE CORE LOCATION BY 1_^1CONCR6 RAO* NOIN4_(INCREASE NO-IN-FOUR BY 1_^1_%RAO* COLCNT_'INCREASE COLUMN COUNT BY 1_^1_%LDA* LOCATN_'CHECK FOR MAXIMUM LOAD ADDR REACHED_^1_%EOR* MAXIMG_^1_%SAN ENDCR3_'SKIP IF NOT YET_^1_%JMP* VERCKS_'MAX CORE ADDR REACHED - GO VERIFY CHECKSUM_^1*_8(LAST WORD READ WAS CHECKSUM FROM LOAD)_^1ENDCR3 JMP* CRWHL3_^1_%SPC 3_^1VERCKS LD€€A* SUM_*IF CHECKSUM OK_^1_%SUB- I_,ADJUST TO REMOVE VALUE OF I REGISTER_^1_%SAN CKSMER_^1_%JMP+ 0_,BEGIN EXECUTION OF SYSTEM_^1CKSMER NUM $18FF_(ENDIF_^1_%SPC 4_^1SEQ1_!NUM $0100_^1COLCNT NUM 0_^1MAXIMG NUM 1_^1CARDNO NUM 1_^1OLDSNO NUM $0050_^1LOCATN NUM 0_^1NOIN4 NUM 1_^1EXECLD NUM 0_^1FEED_!NUM $0080_^1EQUIPD NUM $0521_(W,E,S EQUIP CODE FOR DIRECTOR STATUS_^1SUM_"N€€UM 0_^1_%EJT_]_^1***_]_^1*E_#DETAILS OF OPERATION_^1*_$---------------------_^1*_$PKUNCR IS THE ROUTINE WHICH UNPACKS THE 12-BIT BINARY CODE FROM_^1*_$A CARD AND PACKS IT INTO THE 16-BIT BINARY IMAGE REQUIRED FOR_^1*_$EACH WORD IN MEMORY._^1*S1_]_^1*_$IT WILL PACK A FOUR COLUMN, 12-BIT IMAGE PER COLUMN INPUT INTO_^1*_$THREE 16-BIT IMAGES._^1*S1_]_^1*_$THE BIT BREAKDOWN, BY COLUMN,€€ IS AS FOLLOWS:_^1*S1_]_^1*_'COLUMN 1 - HIGH ORDER 12 BITS OF FIRST WORD_^1*_'COLUMN 2 - LOW ORDER 4 BITS OF FIRST WORD AND_^1*_2HIGH ORDER 8 BITS OF SECOND WORD_^1*_'COLUMN 3 - LOW ORDER 8 BITS OF SECOND WORD AND_^1*_2HIGH ORDER 4 BITS OF THIRD WORD_^1*_'COLUMN 4 - LOW ORDER 12 BITS OF THIRD WORD_^1*S2_]_^1*_$EACH TIME THE ROUTINE IS CALLED, IT FIGURES OUT WHICH COLUMN,_^1*_$OUT O€€F A GROUP OF FOUR COLUMNS, IT PRESENTLY IS IN. IT DOES THIS_^1*_$USING THE FLAG NOIN4. THIS DETERMINES HOW MUCH OF THE PRESENT_^1*_$MEMORY WORD HAS ALREADY BEEN OBTAINED (AND SAVED IN PARTAL) AND_^1*_$HOW MANY BITS FROM THE PRESENT COLUMN ARE NEEDED TO COMPLETE THE_^1*_$PRESENT WORD. THE 16-BIT IMAGE, WHEN COMPLETED, IS PLACED IN_^1*_$THE Q REGISTER WHEN THE ROUTINE EXITS. THE €€REMAINING BITS IN_^1*_$THE PRESENT COLUMN ARE SAVED IN PARTAL, TO BECOME PART OF THE_^1*_$NEXT WORD._^1_%SPC 2_^1PARTAL NUM 0_^1*_]_^1PKUNCR NUM $FFFF_^1_%TRA Q_,SAVE INPUT IMAGE_^1_%LDA NOIN4_(IF NO-IN-FOUR = 1_^1_%INA -1_^1_%SAN CONPK1_^1_%LLS 4_,THEN SAVE 12 BIT IMAGE_^1_%STQ* PARTAL_^1_%JMP* (PKUNCR)_^1CONPK1 INA -1_+ELSE IF NO-IN-FOUR = 2_^1_%SAN CONPK2_^1_%LLS 8_,T€NHEN PACK FIRST 16_^1_%JMP* PAK16_(SAVE REMAINING_^1CONPK2 INA -1_+ELSE IF NO-IN-FOUR = 3_^1_%SAN CONPK3_^1_%LLS 12_+THEN PACK SECOND 16_^1_%JMP* PAK16_(SAVE REMAINING_^1CONPK3 TRQ A_-ELSE PACK THIRD 16_^1_%CLR Q_^1PAK16 EOR* PARTAL_^1_%STQ* PARTAL_^1_%TRA Q_,RETURN WITH HEX CHARACTER IN Q_^1_%JMP* (PKUNCR)_^1_%END ABZLDC_^__ NPABZLD7 CSY/ B03 P€1_%NAM ABZLD7_'DECK-ID B03 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1***_"PURPOSE -_^1*_$-------_^1*_]_^1*_*ABZLD7 IS THE ABSOLUTIZED 7 TRACK LOADER, IT LOADS_^1*_*THE BINARY DATA OF THE RTOS SYSTEM._^1*_]_^1*_]_^1****_!**********************€€*******************************************_^1*_$ENTRY POINTS_^1*_$*****************************************************************_^1_%ENT ABZLD7_'7 TRACK ABSOLUTIZED LOADER_^1*_$*****************************************************************_^1*_$EQUIVALENCES_^1*_$*****************************************************************_^1_%EQU DEVICE(7)_#EQUIPMENT CODE FOR MAG TAPE€€_^1****_]_^1_%SPC 2_^1***_]_^1*S2_"GENERAL DESCRIPTION -_^1*_$------- -----------_^1*_]_^1*_$PROGRAM IS ALWAYS LOADED AT LOCATION 0._^1*_]_^1*_$MAGNETIC TAPE IS MOUNTED ON UNIT 0 AND ITS EQUIPMENT CODE IS 7._^1*_$MAGNETIC TAPE MAY BE BUFFERED OR UNBUFFERED._^1*_]_^1*_]_^1*S2_"SUBROUTINE ABZLD7 -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_$ABZLD7 IS THE 7 TRACK ABSOLUTIZ€€ED LOADER._^1*_]_^1*_]_^1*_$ANALYSIS -_^1*_]_^1*_$ABZLD7 INITIALIZES POINTERS, CALCULATES THE CURRENT CORE_^1*_$ADDRESS INTO WHICH LOCATION THE HEADER DATA WILL START_^1*_$LOADING._^1*_]_^1*_$IT FIRST TRIES WITH THE UNBUFFERED CONNECT CODE._^1*_$IT CLEARS THE CONTROLLER AND SELECTS UNIT 0 FOR THE READ LU._^1*_$IF A REJECT OCCURS, IT TRIES WITH THE BUFFERED CONNECT CODE._^1*_$IT CAL€€LS GETDAT TO READ THE HEADER AND BINARY DATA._^1*_$IT LOADS THE BINARY DATA STARTING AT LOCATION 0 UNTIL A_^1*_$FILE MARK IS DETECTED. IT THEN CHECKS THE CHECKSUM AND IF OK,_^1*_$IT STARTS THE SYSTEM; OTHERWISE, THE SYSTEM HANGS._^1*_]_^1*_]_^1_%SPC 1_^1ABZLD7 ENA 0_,INITIALIZED POINTERS_^1_%STA* TYPE_^1_%STA* NORECD_^1_%STA* FNLEN_^1_%STA* RECDRD_^1_%SLS 0_^1*_]_^1_%RTJ* SELF_€€)GENERATE THIS PROGRAM LOCATION_^1SELF_!NOP 0_^1_%LDA* SELF_)SET UP LOCATION FOR HEADER DATA TO BE LOADED_^1_%INA TYPE-SELF_^1_%STA* COREAD_^1*_]_^1_%ENA 1_,CLEAR CONTROLLER_^1_%LDQ* UNBUF_(TRY UNBUFFERED CONNECT CODE_^1CLRC_!OUT REJX-*_^1_%STQ EMTAPE_'SAVE CONNECT CODE_^1_%OUT -1_^1_%INQ 1_,SELECT UNIT 0_^1_%LDA H0405_^1_%OUT -1_^1LOOP_!LDQ* EMTAPE_'WAIT TILL IT IS READY €€AND NOT BUSY_^1_%INP -1_^1_%AND* H0003_^1_%INA -1_^1_%SAZ READY-*-1_#SKIP WHEN READY_^1_%JMP* LOOP_^1_%SPC 2_^1REJX_!NOP 0_,REJECT ON CLEAR CONTROLLER_^1_%LDQ* BUFFR_(TRY BUFFERED WES CODE_^1_%JMP* CLRC_^1UNBUF ADC DEVICE*128+1_#UNBUFFERED WES CONNECT CODE_^1BUFFR ADC DEVICE*128+$1001_!BUFFERED WES CONNECT CODE_^1_%SPC 2_^1*_1READ IN BINARY DATA_^1READY LDA* H0100_^1_€€%OUT -1_^1_%RTJ* GETDAT_'GET HEADER DATA_^1*_]_^1_%ENA 0_^1_%STA* COREAD_'SET TO LOCATION 0 FOR PROGRAM_^1GETSYS LDA* H0100_(START MOTION FOR NEXT RECORD_^1_%LDQ* EMTAPE_^1_%OUT -1_^1_%RTJ* GETDAT_'TO READ IN DATA_^1_%RAO* RECDRD_'BUMP RECORD COUNT BY 1_^1_%LDA* RECDRD_'CHECK IF ALL RECORD BEEN READ_^1_%SUB* NORECD_^1_%SAZ CHKFIL_^1_%JMP* GETSYS_'TO REPEAT_^1CHKFIL LDA* STA_*CH€€ECK STATUS FOR FILE MARK_^1_%AND* H0800_^1_%SAZ CHKLEN_'IT IS FILE MARK, TO CHECK CHECKSUM_^1_%JMP* STOP_^1CHKLEN LDQ* FNLEN_^1GETSUM INQ -1_+DECREMENT COUNTER BY 1 AND CHECK IF DONE_^1_%SQM ENDSUM_'SKIP WHEN DONE_^1_%ADD* (GO+1),Q_$CALCULATE CHECKSUM_^1_%JMP* GETSUM_^1ENDSUM SUB- I_^1_%TCA A_^1_%INQ -5_+DECREMENT INDEX TO GET CHECKSUM_^1_%ADD* (COREAD),Q_"CHECK IF CHECK SUM O€€K_^1_%INA 0_^1_%SAZ 1_^1STOP_!NUM $18FF_(CHECKSUM NO GOOD OR TAPE HAS WRONG FORMAT_^1_%LDA* H0100_(OTHERWISE DO ONE MORE READ TO REACH FILE MARK_^1_%LDQ* EMTAPE_^1_%OUT -1_^1_%RTJ* GETDAT_^1GO_#JMP+ 0_^1_%SPC 2_^1*_]_^1COREAD NUM 0_,CURRENT CORE ADDRESS._^1TYPE_!NUM 0_,INITIALIZER TYPE_^1NORECD NUM 0_,NO. OF RECORDS IN TAPE_^1FNLEN NUM 0_,TOTAL LENGTH OF SYSTEM_^1DUMMY B€€ZS DUMMY(3)_$ALLOWS FOR 6 WORD HEADER_^1RECDRD NUM 0_,NO. OF RECORDS READ_^1*_]_^1_%SPC 2_^1***_]_^1*S2_"SUBROUTINE GETDAT -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_$GETDAT IS AN INTERNAL SUBROUTINE TO READ DATA._^1*_]_^1*_]_^1*_$INPUT DATA FORMAT -_^1*_]_^1*_(INPUT DATA FORMAT IS 8 6-BUT GROUP WHICH FORMS 3-WORD_^1*_(DATA WITH THE BYTE ASSIGNMENTS FOR ALL 3 WORDS_€€^1*_2WORD 1 --- 6, 6, 4_^1*_2WORD 2 --- 2, 6, 6, 2_^1*_2WORD 3 --- 4, 6, 6_^1*_]_^1*_]_^1*_$SUBROUTINES CALLED -_^1*_]_^1*_$STATUS_$INTERNAL SUBROUTINE TO READ DATA OR CHECK STATUS._^1*_]_^1*_]_^1GETDAT NOP 0_,TO READ IN DATA_^1_%SPC 2_^1*_1W O R D_#1_^1WORD1 RTJ* STATUS_'TO CHECK STATUS AND READ IN BYTE 1 OF 1ST_^1_%JMP* FILMAK_'TO FILE MARK_^1_%ALS 10_+POSITION IT AND SAVE€€_^1_%STA* TEMP_^1_%RTJ* STATUS_'GET BYTE 2_^1_%JMP* FILMAK_'FILE MARK ENCOUNTERED_^1_%ALS 4_,ASSEMBLE WITH FIRST BYTE_^1_%ADD* TEMP_^1_%STA* TEMP_^1_%ENA 0_^1_%INP -1_+OBTAIN BYTE 3_^1_%STA* TEMP+1_^1_%ARS 2_^1_%EOR* TEMP_)PACK FIRST WORD_^1_%STA* (COREAD)_$SAVE TO CORE LOCATION_^1_%RAO* COREAD_^1_%SPC 1_^1*_1W O R D_#2_^1_%ENA 3_^1_%AND* TEMP+1_^1_%ALS 14_+(SAVE HI-2-BIT)_^€€1_%STA* TEMP_^1_%RTJ* STATUS_'TO CHECK FOR FILE MARK OR READ DATA_^1_%JMP* FILMSA_'FOR FILE MARK EXIT_^1_%ALS 8_,POSITION AND ASSEMBLE WITH HIGH 2-BIT_^1_%ADD* TEMP_^1_%STA* TEMP_^1_%RTJ* STATUS_'GET BYTE 2 (6-BIT)_^1_%JMP* FILMAK_'FILE MARK ENCOUNTERED_^1_%ALS 2_^1_%ADD* TEMP_^1_%STA* TEMP_)PACK DATA_^1_%ENA 0_^1_%INP -1_+GET LAST 2-BIT + NEXT 4-BIT_^1_%STA* TEMP+1_^1_%ARS 4€€_^1_%EOR* TEMP_)ASSEMBLE WORD 2 AND SAVE_^1_%STA* (COREAD)_^1_%RAO* COREAD_'BUMP STORAGE INDEX BY 1_^1_%ENA $F_^1_%AND* TEMP+1_^1_%ALS 12_^1_%STA* TEMP_)SAVE HI-4-BIT OF WORD 3_^1_%SPC 1_^1*_1W O R D_#3_^1_%RTJ* STATUS_'TO CHECK FOR FILE MARK OR READ DATA_^1_%JMP* FILMSA_'FOR FILE MARK EXIT_^1_%ALS 6_^1_%ADD* TEMP_^1_%STA* TEMP_^1_%RTJ* STATUS_'GET BYTE 2 (6-BIT)_^1_%JMP* FILM€€AK_'FILE MARK ENCOUNTERED_^1_%EOR* TEMP_^1_%STA* (COREAD)_$SAVE DATA AND BUMP COUNTER BY 1_^1_%RAO* COREAD_^1_%JMP* WORD1_^1_%SPC 2_^1***_]_^1*S2_"SUBROUTINE STATUS -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_$STATUS IS AN INTERNAL SUBROUTINE TO ABZLD7 TO READ DATA/STATUS._^1*_]_^1*_]_^1*_$EXIT -_^1*_]_^1*_((1) FILE MARK EXIT -- NEXT LOCATION IN CALLING PROGRAM_^1*_((2€€) NORMAL EXIT -- NEXT + 1 LOCATION IN CALLING PROGRAM AND_^1*_;(A)= DATA_^1*_]_^1*_]_^1*_$ANALYSIS -_^1*_]_^1*_$STATUS READS THE DATA AND RETURNS TO THE CALLER._^1*_]_^1*_$ON AN INTERNAL REJECT, IT READS STATUS; ON AN EXTERNAL REJECT,_^1*_$IT REPEATS THE READ DATA._^1*_]_^1*_$WHEN CHECKING STATUS, IT RETURNS TO THE CALLER ON END-OF-_^1*_$OPERATION, OTHERWISE, IT READS DATA AGAIN._^€€1*_]_^1*_]_^1STATUS NOP 0_,ENTRY_^1READAT LDQ* EMTAPE_'TO READ IN DATA_^1_%INQ -1_^1_%INP REJ-*-1_^1_%RAO* STATUS_'SET DATA EXIT_^1_%JMP* (STATUS)_$RETURN TO CALLER_^1REJ_"JMP* REDSTA_'TO READ STATUS_^1_%JMP* READAT_'TO REPEAT READ DATA_^1REDSTA LDQ* EMTAPE_^1_%INP -1_+GET STATUS_^1_%STA* STA_^1_%AND =N$10_(CHECK FOR END OF OP._^1_%SAN GETMRK_'FILE MARK, SKIP_^1_%JMP* READAT_€€^1GETMRK JMP* (STATUS)_$RETURN TO CALLER -- FILE MARK_^1_%SPC 2_^1*_]_^1*_1FILE MARK --- FILE MARK --- FILE MARK_^1*_]_^1FILMSA LDA* TEMP_^1_%STA* (COREAD)_^1FILMAK JMP* (GETDAT)_$RETURN_^1_%SPC 2_^1*_]_^1*_1CONSTANTS AND STORAGES_^1*_]_^1EMTAPE ADC DEVICE*128+1 BASIC W,E,C FUNCTION CODE_^1H0405 NUM $0405_(SELECT UNIT 0 AND BINARY_^1H0003 NUM $0003_^1H0100 NUM $01€h00_(READ MOTION REQUEST_^1H0800 NUM $0800_(FILE MARK BIT_^1STA_"NUM 0_^1TEMP_!NUM 0,0_^1_%END_]_^__ hPABZLD9 CSY/ B04 P€1_%NAM ABZLD9_'DECK-ID B04 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1***_"PURPOSE -_^1*_$-------_^1*_]_^1*_*ABZLD9 IS THE 9 TRACK ABSOLUTIZED LOADER, IT LOADS THE_^1*_*BINARY DATA OF THE RTOS SYSTEM._^1*_]_^1*_]_^1****_!**********************€€*******************************************_^1*_$ENTRY POINTS_^1*_$*****************************************************************_^1_%ENT ABZLD9_'9 TRACK ABSOLUTIZED LOADER_^1*_$*****************************************************************_^1*_$EQUIVALENCES_^1*_$*****************************************************************_^1_%EQU DEVICE(7)_#EQUIPMENT CODE FOR MAG TAPE€€_^1****_]_^1_%SPC 2_^1***_]_^1*S2_"GENERAL DESCRIPTION -_^1*_$------- -----------_^1*_]_^1*_$PROGRAM IS ALWAYS LOADED AT LOCATION 0._^1*_]_^1*_$MAGNETIC TAPE IS MOUNTED ON UNIT 0 AND ITS EQUIPMENT CODE IS 7._^1*_*MAGNETIC TAPE MAY BE BUFFERED OR UNBUFFERED_^1*_]_^1*_]_^1*S2_"SUBROUTINE ABZLD9 -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_$ABZLD9 IS THE 9 TRACK ABSOLUTIZE€€D LOADER._^1*_]_^1*_]_^1*_$ANALYSIS -_^1*_]_^1*_$ABZLD9 INITIALIZES POINTERS, CALCULATES THE CURRENT CORE_^1*_$ADDRESS INTO WHICH LOCATION THE HEADER DATA WILL START LOADING._^1*_]_^1*_$IT FIRST TRIES WITH THE UNBUFFERED CONNECT CODE._^1*_$IT CLEARS THE CONTROLLER AND SELECTS UNIT 0 FOR THE READ LU._^1*_$IF A REJECT OCCURS, IT TRIES WITH THE BUFFERED CONNECT CODE._^1*_$IT CALLS GET€€DAT TO READ THE HEADER AND BINARY DATA._^1*_$IT LOADS THE BINARY DATA STARTING AT LOCATION 0 UNITL A FILE_^1*_$MARK IS DETECTED. IT THEN CHECKS THE CHECKSUM AND IF OK, IT_^1*_$STARTS THE SYSTEM; OTHERWISE, THE SYSTEM HANGS._^1*_]_^1_%SPC 1_^1ABZLD9 ENA 0_,INITIALIZE POINTERS_^1_%STA* TYPE_^1_%STA* NORECD_^1_%STA* FNLEN_^1_%STA* RECDRD_^1_%SLS 0_^1*_]_^1_%RTJ* SELF_)GENERATE THI€€S PROGRAM LOCATION_^1SELF_!NOP 0_^1_%LDA* SELF_)SET UP LOCATION FOR HEADER DATA TO BE LOADED_^1_%INA TYPE-SELF_^1_%STA* COREAD_^1*_]_^1_%ENA 1_,CLEAR CONTROLLER_^1_%LDQ* UNBUF_(TRY UNBUFFERED CONNECT CODE_^1CLRC_!OUT REJX-*_^1_%STQ* EMTAPE_'SAVE WES CONNECT CODE_^1_%OUT -1_^1_%INQ 1_,SELECT UNIT 0_^1_%LDA* H044C_^1_%OUT -1_^1LOOP_!LDQ* EMTAPE_'WAIT TILL IT IS READY AND NOT B€€USY_^1_%INP -1_^1_%AND* H0003_^1_%INA -1_^1_%SAZ READY-*-1_#SKIP WHEN READY_^1_%JMP* LOOP_^1_%SPC 2_^1REJX_!NOP 0_,REJECT ON CLEAR CONTROLLER_^1_%LDQ* BUFFR_(TRY BUFFERED WES CODE_^1_%JMP* CLRC_^1UNBUF ADC DEVICE*128+1_#UNBUFFERED WES CONNECT CODE_^1BUFFR ADC DEVICE*128+$1001_!BUFFERED WES CONNECT CODE_^1_%SPC 2_^1*_1READ IN BINARY DATA_^1READY LDA* H0100_^1_%OUT -1_€€^1_%RTJ* GETDAT_'GET HEADER DATA_^1*_]_^1_%ENA 0_^1_%STA* COREAD_'SET TO LOCATION 0 FOR PROGRAM_^1GETSYS LDA* H0100_(START MOTION FOR NEXT RECORD_^1_%LDQ* EMTAPE_^1_%OUT -1_^1_%RTJ* GETDAT_'TO READ IN DATA_^1_%RAO* RECDRD_'BUMP RECORD COUNT BY 1_^1_%LDA* RECDRD_'CHECK IF ALL RECORD BEEN READ_^1_%SUB* NORECD_^1_%SAZ CHKFIL_^1_%JMP* GETSYS_'TO REPEAT_^1CHKFIL LDA* STA_*CHECK STATU€€S FOR FILE MARK_^1_%AND* H0800_^1_%SAZ CHKLEN_'IT IS FILE MARK, TO CHECK CHECKSUM_^1_%JMP* STOP_^1CHKLEN LDQ* FNLEN_^1GETSUM INQ -1_+DECREMENT COUNTER BY 1 AND CHECK IF DONE_^1_%SQM ENDSUM_'SKIP WHEN DONE_^1_%ADD* (GO+1),Q_$CALCULATE CHECKSUM_^1_%JMP* GETSUM_^1ENDSUM SUB- I_^1_%TCA A_^1_%INQ -5_+DECREMENT INDEX TO GET CHECKSUM_^1_%ADD* (COREAD),Q_"CHECK IF CHECK SUM OK_^1_%INA€€ 0_^1_%SAZ 1_^1STOP_!NUM $18FF_(CHECKSUM NO GOOD OR TAPE HAS WRONG FORMAT_^1_%LDA* H0100_(OTHERWISE DO ONE MORE READ TO REACH FILE MARK_^1_%LDQ* EMTAPE_^1_%OUT -1_^1_%RTJ* GETDAT_^1GO_#JMP+ 0_^1_%SPC 2_^1*_]_^1COREAD NUM 0_,CURRENT CORE ADDRESS._^1TYPE_!NUM 0_,INITIALIZER TYPE_^1NORECD NUM 0_,NO. OF RECORDS IN TAPE_^1FNLEN NUM 0_,TOTAL LENGTH OF SYSTEM_^1DUMMY BZS DUMMY€€(3)_$ALLOWS FOR 6 WORD HEADER_^1RECDRD NUM 0_,NO. OF RECORDS READ_^1*_]_^1_%SPC 2_^1***_]_^1*S2_"SUBROUTINE GETDAT -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_$GETDAT IS AN INTERNAL SUBROUTINE TO ABZLD9 TO READ IN DATA._^1*_]_^1*_]_^1*_$ANALYSIS -_^1*_]_^1*_$GETDAT JUMPS TO STATUS TO CHECK STATUS AND READ IN DATA WORD._^1*_$IT SAVES THE DATA AND CONTINUES LOOPING UNTI€€L A FILE MARK_^1*_$IS ENCOUNTERED, WHEREBY IT RETURNS TO THE CALLING PROGRAM._^1*_]_^1*_]_^1GETDAT NOP 0_^1WORD1 RTJ* STATUS_'CHECK STATUS AND READ IN DATA WORD_^1_%JMP* (GETDAT)_$FILE MARK -- RETURN_^1_%STA* (COREAD)_$SAVE DATA AND BUMP COUNTER BY 1_^1_%RAO* COREAD_^1_%JMP* WORD1_^1_%SPC 2_^1***_]_^1*S2_"SUBROUTINE STATUS -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_€€$STATUS IS AN INTERNAL SUBROUTINE TO ABZLD9 TO CHECK STATUS_^1*_$OR READ DATA._^1*_]_^1*_]_^1*_$EXIT -_^1*_]_^1*_((1) FILE MARK EXIT -- NEXT LOCATION IN CALLING PROGRAM_^1*_((2) NORMAL EXIT -- NEXT + 1 LOCATION IN CALLING PROGRAM_^1*_;(A)= DATA._^1*_]_^1*_]_^1*_$ANALYSIS -_^1*_]_^1*_$STATUS READS THE DATA AND RETURNS TO THE CALLER._^1*_$ON AN INTERNAL REJECT, IT READS STATUS; ON AN€€ EXTERNAL_^1*_$REJECT, IT REPEASTS THE READ DATA._^1*_$WHEN CHECKING STATUS, IT RETURNS TO THE CALLER ON END-OF-_^1*_$OPERATION, OTHERWISE, IT READS DATA AGAIN._^1*_]_^1*_]_^1*_]_^1STATUS NOP 0_,ENTRY_^1READAT LDQ* EMTAPE_'TO READ IN DATA_^1_%INQ -1_^1_%INP REJ-*-1_^1_%RAO* STATUS_'SET DATA EXIT_^1_%JMP* (STATUS)_$RETURN TO CALLER_^1REJ_"JMP* REDSTA_'TO READ STATUS_^1_%JMP* READ€€AT_'TO REPEAT READ DATA_^1REDSTA LDQ* EMTAPE_^1_%INP -1_+GET STATUS_^1_%STA* STA_^1_%AND =N$10_(CHECK FOR END OF OP._^1_%SAN GETMRK_'FILE MARK, SKIP_^1_%JMP* READAT_^1GETMRK JMP* (STATUS)_$RETURN TO CALLER -- FILE MARK_^1_%SPC 2_^1*_]_^1*_1CONSTANTS AND STORAGES_^1*_]_^1EMTAPE ADC DEVICE*128+1 BASIC W,E,S FUNCTION CODE_^1H044C NUM $044C_(SELECT UNIT 0,A/D MODE,800 BPI AND€’ BINARY_^1H0003 NUM $0003_^1H0100 NUM $0100_(READ MOTION REQUEST_^1H0800 NUM $0800_(FILE MARK BIT_^1STA_"NUM 0_^1TEMP_!NUM 0_^1_%END_]_^__’PATOSAN CSY/ B05 P€1_%NAM ATOSAN_'DECK-ID B05 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$SCHEDULED BY BUFEXC OR OTHER USER PROGRAM TO PROCESS_^1*_$ALL I/O ON REMOTE IOM BY SCANNING CONTROL TABLES_^1*_$OR OUTPUT FLAG TABLES. ONCE STARTED RUNS ON TIMER LOOP._^1_%SPC 4_€€^1*_$ENTRY POINTS AND EXTERNALS_^1_%EXT IOMBUF_'BUFFER LOCATION TABLE_^1_%EXT IOMCNT_'CONTROL RECORDS LOCATION TABLE_^1_%EXT IOMFLG_^1_%EXT FINDCR_^1_%EXT SANBSY_^1_%EXT ATOSAN_^1_%EXT TM1590_^1_%SPC 4_^1*_$VOLATILE REFERENCES (PSEUDO VOLATILE)_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER€€ RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST AND TEMP STORAGE_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS AND TEMP STORAGE_^1_%EQ€€U BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1_%EQU NBRS(1)_%NUMBER OF POINTS - BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,MODE_^1_%EQU WES(3)_'W-E-S FOR FIRST STATION_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU AMONI($F4)_^1_%EQU ADISP($EA)_^1_%EQU ZERO($22)_^1_%EQU MASK($33)_^1_%EQU H0010($27)_^1_%EQU H0004($25)_^1_%EQU H2000($30)_^1_%EQU H00FF($A)_^€€1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_%SPC 2_^1*_$SCAN PARAMETERS_^1_%EQU ENDDEV(8)_#LAST DEVICE TYPE INDEX IN LOCATION TABLES_^1_%SPC 4_^1****************************************************_^1*_*SCAN TO DRIVE REMOTE IOM_.*_^1****************************************************_^1SCAN_!LDA =N$1E20_%BUILD TIMER CALL_^1_%ADD- $EF_^1_%STA* SC2+1_^1_%LDA TM1590_'SET SCAN PERI€€OD_^1_%STA* SC2+3_^1_%RTJ* HERE_^1HERE_!NUM 0_^1SC2_"RTJ- (AMONI)_^1_%NUM 0_^1_%ADC ATOSAN_^1_%NUM 0_^1_%LDA SANBSY_^1_%SAZ SC6_^1SC5_"RELEAS (SCAN-*+1),1,1,0_^1SC6_"RAO SANBSY_'SET BUSY_^1_%ENA ENDDEV+1_^1_%STA* DEVIDX_'INDEX TO DEVICE TYPE_^1SC7_"LDA* DEVIDX_^1_%SAN SC8_^1_%ENA 0_,CLEAR BUSY_^1_%STA SANBSY_^1_%JMP* SC5_^1SC8_"INA -1_+BUMP DEVICE INDEX_^1_%STA* DEVIDX€€_^1_%TRA Q_^1_%LDA* HERE_^1_%ADD =XPSDVOL-HERE_^1_%STA- I_,I=POINTER TO PSEUDO VOLATILE_^1_%LDA IOMCNT,Q_^1_%SAN SC10_^1_%JMP* SC7_*NO CONTROL RECORDS FOR THIS DEVICE_^1SC10_!STA- IREC,I_'INITIALIZE_^1_%ENA 0_^1_%STA- INDEX,I_%INDEX_^1_%STA- ETEMP,I_%ERROR_^1_%STA- ITEMP,I_%BUFFER POINTER_^1_%STA NBS_*NBR OF POINTS IN MONITOR REQUEST_^1_%LDA IOMBUF,Q_^1_%STA* BUFADD_'SAVE DA€€TA BUFFER ADDRESS_^1_%LDA* TYPE,Q_^1_%INA -1_^1_%STA* SC12+1_^1SC12_!JMP TYPE_^1PSDVOL BZS PSDVOL(14)_"PSEUDO VOLATILE_^1DEVIDX NUM 0_^1TYPE_!ADC (SC7-SC12)_"DEVICE TYPE 00 NEVER USED_^1_%ADC TYONE-SC12_/01 DI_^1_%ADC TYTWO-SC12_/02 DO_^1_%ADC TYONE-SC12_/03 COUNTERS_^1_%ADC TYFOR-SC12_/04 RO_^1_%ADC (SC7-SC12)_/05 FUTURE_^1_%ADC TYSIX-SC12_/06 HS AI_^1_%ADC (SC7€€-SC12)_/07 LS AI_^1_%ADC TYEIG-SC12_/08 AO_^1_%ADC (SC7-SC12)_/09 FUTURE_^1_%ADC (SC7-SC12)_/10 FUTURE_^1_%ADC (SC7-SC12)_/11 FUTURE_^1_%ADC (SC7-SC12)_/12 FUTURE_^1_%ADC (SC7-SC12)_/13 FUTURE_^1_%ADC (SC7-SC12)_/14 FUTURE_^1_%ADC (SC7-SC12)_/15 FUTURE_^1_%SPC 4_^1****************************************************_^1*_)DIGITAL IN , COUNTERS_2*_^1****************€€************************************_^1TYONE RTJ FINDCR_^1_%JMP* TY1A2_^1_%LDA NBS_*NO MORE CONTROL RECORDS_^1_%SAZ TY1A1_^1_%RTJ* WRITIO_'COMPLETE OUTSTANDING REQUEST_^1_%RTJ MOVE_^1TY1A1 JMP* SC7_*DONE WITH THIS DEVIE_^1TY1A2 RTJ CHECK_(IS I/O REMOTE_^1_%JMP* TYONE_(NOT REMOTE_^1_%LDQ- IREC,I_^1_%STQ CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- WES,Q_(COMPUTE W-E-S_^1_%AD€€D- INDEX,I_^1_%LDQ NBS_*PUT IN REQUEST BUFFER_^1_%STA DEVADD,Q_^1_%RAO NBS_^1_%LDA NBS_^1_%INA -10_^1_%SAN TY1A4_(NO_^1_%RTJ* WRITIO_^1_%RTJ MOVE_^1TY1A4 RAO- INDEX,I_^1_%JMP* TYONE_^1BUFADD NUM 0_^1_%SPC 4_^1****************************************************_^1*_)DIGITAL OUT_<*_^1****************************************************_^1TYTWO RTJ PREP_)SET UP TO SEARCH €€FLAG TABLE_^1TY2A1 RTJ FLAG_^1_%JMP* SC7_*DONE_^1_%RTJ FINDCR_^1_%JMP* TY2A6_^1_%JMP* TY2A1_^1TY2A6 LDQ- IREC,I_'CALCULATE WES_^1_%STQ CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- TYPLU,Q_%SAVE LU_^1_%STA LUSAVE_^1_%LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA DEVADD,Q_$STORE WES IN REQUEST_^1_%LDQ- ITEMP,I_^1_%LDA* (BUFADD),Q_^1_%LDQ* NBS_^1_%STA DEVDAT,Q_$STORE OUTPUT €€VALUE IN REQUEST_^1_%RAO* NBS_*BUMP N IN REQUEST_^1_%LDA* NBS_^1_%INA -10_^1_%SAZ TY2A8_(READY TO OUTPUT_^1_%JMP* TY2A1_^1TY2A8 RTJ* WRITIO_^1_%ENA 0_^1_%STA* NBS_^1_%JMP* TY2A1_^1_%SPC 4_^1****************************************************_^1*_)RELAY OUTPUT_;*_^1****************************************************_^1TYFOR RTJ PREP_)SET UP TO SEARCH FLAG TABLE_^1TY4A2 RTJ€€ FLAG_)FIND NEXT OUTPUT_^1_%JMP SC7_*DONE_^1_%LDA- INDEX,I_%FIX INDEX FOR 8 BIT OUTPUTS_^1_%ALS 1_,X2_^1_%STA- INDEX,I_^1_%RTJ FINDCR_^1_%JMP* TY4A4_^1_%JMP* TY4A2_^1TY4A4 LDQ- IREC,I_'CALCULATE W-E-S FOR LOW 8 BITS_^1_%STQ* CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- TYPLU,Q_%SAVE LU_^1_%STA* LUSAVE_^1_%LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_^1_%LDQ- ITEMP€€,I_^1_%LDA* (BUFADD),Q_"=OUTPUT VALUE_^1_%AND- H00FF_^1_%LDQ* NBS_^1_%STA* DEVDAT,Q_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN TY4A6_^1_%RTJ* WRITIO_^1_%ENA 0_^1_%STA* NBS_^1TY4A6 RAO- INDEX,I_%BUMP FOR HIGH 8 BITS_^1_%RTJ FINDCR_^1_%JMP* TY4A8_^1_%JMP* TY4A2_(NOT INSTALLED_^1TY4A8 LDQ- IREC,I_'CALCULATE W-E-S FOR HIGH 8 BITS_^1_%LDA- TYPLU,Q_%SAVE LU_^1_%STA* LUSAVE_^1_%A€€ND- H2000_^1_%SAN TY4A9_(IT IS REMOTE_^1_%JMP* TY4A2_(NOT REMOTE_^1TY4A9 LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_^1_%LDQ- ITEMP,I_^1_%LDA* (BUFADD),Q_"=OUTPUT VALUE_^1_%ARS 8_^1_%AND- H00FF_^1_%LDQ* NBS_^1_%STA* DEVDAT,Q_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN TY4A10_^1_%RTJ WRITIO_'OUTPUT TO REMOTE I0M_^1_%ENA 0_^1_%STA* NBS_^1TY4A10 JMP* TY4A2_^1_%€€SPC 4_^1****************************************************_^1*_)OUTPUT TO REMOTE IOM_3*_^1****************************************************_^1WRITIO NUM 0_^1_%LDA- $EF_^1_%ALS 4_^1_%ADD- $EF_^1_%ADD =N$4C00_^1_%STA* WR2+1_^1_%LDA* LUSAVE_'GET LU_^1_%AND- H00FF_^1_%STA* WR2+4_^1_%LDA- I_^1_%STA* ISAV_^1_%LDA HERE_^1_%ADD =XWR4-HERE_^1_%STA* WR2+2_^1_%LDA HERE_^1_%ADD =X€€DEVADD-HERE_^1_%STA* WR2+6_^1_%LDA* NBS_*MOVE DATA TO END OF ADDRESSES_^1_%STA- I_^1_%ENQ 0_^1WR1_"LDA* DEVDAT,Q_^1_%STA* DEVADD,I_^1_%RAO- I_^1_%INQ 1_^1_%TRQ A_^1_%SUB* NBS_^1_%SAZ WR2_^1_%JMP* WR1_^1WR2_"RTJ- (AMONI)_^1_%NUM 0_^1_%NUM 0_,COMPLETION_^1_%NUM 0_^1_%NUM 0_^1NBS_"NUM 0_^1_%NUM 0_,BUFFER_^1_%JMP- (ADISP)_^1WR4_"LDA* ISAV_^1_%STA- I_^1_%SQP WR5_^1_%LDQ* CRLO€€C_^1_%LDA- TYPLU,Q_^1_%AND- H7FFF_(SET ERROR FLAG IN CONTROL RECORD_^1_%ADD- H8000_^1_%STA- TYPLU,Q_^1_%JMP* WR6_^1WR5_"LDQ* CRLOC_(NO ERROR CLEAR FLAG_^1_%LDA- TYPLU,Q_^1_%AND- H7FFF_^1_%STA- TYPLU,Q_^1WR6_"JMP* (WRITIO)_^1DEVADD BZS DEVADD(10)_^1DEVDAT BZS DEVDAT(10)_^1ISAV_!NUM 0_^1LUSAVE NUM 0_^1CRLOC NUM 0_^1_%SPC 4_^1***************************************************€€*_^1*_)HIGH SPEED ANALOG INPUT_0*_^1****************************************************_^1TYSIX ENA 0_,INITIALIZE CHANNEL ADDRESS_^1_%STA- COMP,I_^1TY6A2 RTJ FINDCR_^1_%JMP* TY6A6_^1_%LDA* NBS_*NO MORE CONTROL RECORDS_^1_%SAZ TY6A4_^1_%RTJ* WRITIO_'FINISH OUTSTANDING REQUEST_^1_%RTJ* MOVE_^1TY6A4 JMP SC7_^1TY6A6 RTJ* CHECK_^1_%JMP* TY6A14_'I/O NOT REMOTE_^1_%LDQ- IREC,I_^1€€_%STQ* CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- COMP,I_'CHANNEL ADDRESS_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_$PUT ADDRESS IN REQUEST_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN TY6A8_^1_%RTJ* WRITIO_^1_%RTJ* MOVE_^1TY6A8 RAO- COMP,I_'ARE 16 CHANNELS DONE_^1_%LDA- COMP,I_^1_%INA -16_^1_%SAZ TY6A9_^1_%JMP* TY6A2_^1TY6A9 LDQ- IREC,I_'IS THIS LAST MUX STATION IN RECORD_^1_%LDA- NB€€RS,Q_^1_%SUB- INDEX,I_^1_%INA -1_^1_%SAN TY6A12_'NO_^1_%RTJ* WRITIO_'WRITE TO REMOTE IOM_^1_%RTJ* MOVE_)MOVE DATA_^1TY6A12 RAO- INDEX,I_^1_%JMP* TYSIX_^1TY6A14 LDA- ITEMP,I_%BUMP BUFFER INDEX_^1_%INA 15_+CHECK BUMPS ONCE_^1_%STA- ITEMP,I_^1_%JMP* TYSIX_^1_%SPC 4_^1****************************************************_^1*_)ANALOG OUTPUT_:*_^1**************************************€€**************_^1TYEIG RTJ* PREP_)SET UP TO SEARCH FLAG TABLE_^1TY8A2 RTJ* FLAG_)FIND NEXT OUTPUT_^1_%JMP SC7_*DONE_^1_%LDA- INDEX,I_%MAKE STATION INDEX_^1_%CLR Q_^1_%DVI- H0004_^1_%STA- INDEX,I_^1_%RTJ FINDCR_^1_%JMP* TY8A4_^1_%JMP* TY8A2_^1TY8A4 LDQ- IREC,I_'SET W-E-S AND CHANNEL ADDRESS_^1_%STQ* CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- TYPLU,Q_%SAVE LU_^1_%STA* LUSAVE_^€€1_%LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_$PUT WES IN REQUEST_^1_%LDQ- ITEMP,I_^1_%LDA (BUFADD),Q_"OUTPUT VALUE_^1_%LDQ* NBS_^1_%STA* DEVDAT,Q_$PUT VALUE/CHANNEL INTO REQUEST_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN TY8A6_^1_%RTJ WRITIO_'WRITE TO REMOTE IOM_^1_%ENA 0_^1_%STA* NBS_^1TY8A6 JMP* TY8A2_^1_%SPC 4_^1****************************************€€**********_^1*_)MOVE DATA TO DATA BUFFER_-*_^1**************************************************_^1MOVE_!NUM 0_^1_%LDQ* NBS_^1_%STQ* QTEMP_^1MOV1_!LDA* DEVADD,Q_^1_%LDQ- ITEMP,I_^1_%STA (BUFADD),Q_^1_%RAO- ITEMP,I_%BUMP BUFFER POINTER_^1_%RAO* QTEMP_^1_%LDA* QTEMP_^1_%SUB* NBS_^1_%SUB* NBS_^1_%SAZ MOV2_)END OF MOVE_^1_%LDQ* QTEMP_^1_%JMP* MOV1_^1MOV2_!ENA 0_,RESET NUMBER OF POI€€NTS IN REQUEST_^1_%STA NBS_^1_%JMP* (MOVE)_'RETURN_^1QTEMP NUM 0_^1_%SPC 4_^1****************************************************_^1*_*CHECK I/O TYPE FOR REMOTE_-*_^1****************************************************_^1CHECK NUM 0_^1_%LDQ- IREC,I_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAN CK6_*I/O IS REMOTE_^1_%RAO- INDEX,I_%NOT REMOTE_^1_%LDA NBS_^1_%SAZ CH4_^1_%RTJ WRITI€€O_'DO OUTSTANDING REQUEST_^1_%RTJ* MOVE_)MOVE DATA TO BUFFER_^1_%JMP* (CHECK)_%RETURN TO CALL+1_^1CH4_"RAO- ITEMP,I_%NO REQUEST OUTSTANDING_^1_%JMP* (CHECK)_^1CK6_"RAO* CHECK_^1_%LDQ- IREC,I_'SAVE LU FROM REMOTE RECORD_^1_%LDA- TYPLU,Q_^1_%STA* LUSAVE_^1_%JMP* (CHECK)_%I/O IS REMOTE,RETURN CALL+2_^1_%SPC 4_^1***************************************************_^1*_*SEARCH FLAG TABL€€E_5*_^1***************************************************_^1FLAG_!NUM 0_^1FL2_"LDQ* SIZFLG_'=WORD INDEX_^1_%LDA* (FLGADD),Q_"=NEXT FLAG WORD_^1_%SAN FL6_*FOUND A BIT SET_^1_%LDA* SIZFLG_'DO NEXT WORD_^1_%INA -1_^1_%SAN FL4_^1_%LDA NBS_^1_%SAZ FL3A_^1_%RTJ WRITIO_'DO OUTSTANDING REQUEST_^1FL3A_!JMP* (FLAG)_^1FL4_"STA* SIZFLG_^1_%JMP* FL2_^1FL6_"ENQ 15_+SEARCH FLAG WORD_^1_%€€STQ* QTEMP_^1FL8_"SAM FL12_)FOUND BIT SET, Q=BIT INDEX_^1_%SQN FL10_^1_%JMP* FL2_*END OF WORD SEARCH,DO AGAIN SAME WORD_^1FL10_!ALS 1_,SHIFT FLAG WORD BUMP BIT INDEX_^1_%INQ -1_^1_%STQ* QTEMP_^1_%JMP* FL8_^1FL12_!LDA* SIZFLG_'MAKE POINT INDEX ,BUFFER INDEX_^1_%INA -1_^1_%MUI- H0010_^1_%ADD* QTEMP_^1_%STA- ITEMP,I_^1_%STA- INDEX,I_^1_%LDQ DEVIDX_'RESET POINTER TO FIRST CONTROL€€ RECORD_^1_%LDA IOMCNT,Q_^1_%STA- IREC,I_^1_%LDQ* SIZFLG_^1_%LDA* (FLGADD),Q_"PICK UP WORD_^1_%LDQ* QTEMP_^1_%AND- MASK,Q_'MASK_^1_%LDQ* SIZFLG_^1_%STA* (FLGADD),Q_"STORE FLAG WORD_^1_%RAO* FLAG_^1_%JMP* (FLAG)_'POINT INDEX SET, RETURN TO CALLER+2_^1FLGADD NUM 0_^1SIZFLG NUM 0_^1_%SPC 4_^1****************************************************_^1*_$SET UP TO SEARCH FLAG TABLE_0*_^€ή1****************************************************_^1PREP_!NUM 0_^1_%LDQ DEVIDX_^1_%LDQ IOMFLG,Q_$FLAG TABLE ADDRESS_^1_%STQ* FLGADD_^1_%LDA- (ZERO),Q_$NBR OF FLAG WORDS_^1_%STA* SIZFLG_^1_%JMP* (PREP)_^1_%END_]_^__ ήPBOOTC1 CSY/ B06 P€1_%NAM BOOTC1_'DECK-ID B06 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$1728-430, 1729-2 AND 1729-3 CARD BOOTSTRAP_^1_%SPC 2_^1BOOTC1 IIN 0_^1_%STA* START_(SAVE FWA_^1_%STA* STRADR_^1LOOP1 LDQ =N$05A1_%** USE $0521 FOR 1728/430_^1_%LDA =N$0081_^1_%€€OUT -1_+START CARD MOTION_^1_%ENA -40_^1_%STA* WORDCT_^1_%INQ -1_^1_%NOP 0_^1LOOP2 INP -1_+READ UPPER BYTE_^1_%AND* MASK_^1_%ALS 8_^1_%STA* (STRADR)_^1_%NOP 0_^1_%INP -1_+READ LOWER BYTE_^1_%AND* MASK_^1_%EOR* (STRADR)_^1_%STA* (STRADR)_^1_%RAO* STRADR_^1_%AAM M_,UPDATE EOF CHECKSUM_^1_%RAO* WORDCT_^1_%LDA* WORDCT_'IS THE CARD COMPLETELY READ_^1_%SAP CDDONE_'YES_^1_%JMP*€ LOOP2_(NO, CONTINUE_^1CDDONE LDA* EOF_^1_%EAM A_,WAS THE CARD AN EOF_^1_%CLR M_^1_%SAN NOEOF_(NO_^1_%JMP* (START)_%YES, GO TO FWA OF THE PROGRAM_^1NOEOF JMP* LOOP1_(READ ANOTHER CARD_^1EOF_"NUM $0F00_^1MASK_!NUM $00FF_^1WORDCT NUM 0_^1START NUM 0_^1STRADR NUM 0_^1_%END_]_^__PBOOTM1 CSY/ B07 P€1_%NAM BOOTM1_'DECK-ID B07 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$7 TRACK MAGNETIC TAPE BOOTSTRAP_^1_%SPC 2_^1BOOTM1 IIN 0_^1_%STA* START_(SAVE FWA_^1_%STA* STRADR_^1_%LDQ =N$0382_%** USE $1382 IF USING 1706 NO. 1_^1_%LDA* FUNC1_^1_%OUT -1_+SE€€LECT UNIT, MODE, DENSITY_^1_%INQ -1_^1_%LDA* FUNC2_^1_%OUT -1_+START READ MOTION_^1LOOP1 INQ -1_^1LOOP2 ENA 0_^1_%INP STATUS-*_$READ BYTE 1_^1_%ALS 10_^1_%TRA M_^1_%ENA 0_^1_%INP -1_+READ BYTE 2_^1_%ALS 4_^1_%EAM M_^1_%ENA 0_^1_%INP -1_+READ BYTE 3_^1_%ARS 2_^1_%EAM A_^1_%STA* (STRADR)_^1_%RAO* STRADR_^1STATUS JMP* LOOP2_^1_%INQ 1_^1_%NOP 0_^1_%INP -1_^1_%ALS 1€ς1_+IS THIS AN EOP_^1_%SAM EOP_*YES_^1_%JMP* LOOP1_(NO, CONTINUE_^1EOP_"LDA* FUNC2_^1_%OUT -1_+READ PAST THE EOF_^1_%JMP* (START)_%GO TO FWA OF THE PROGRAM_^1FUNC1 NUM $0414_^1FUNC2 NUM $0100_^1START NUM 0_^1STRADR NUM 0_^1_%END_]_^__ςPBOOTM2 CSY/ B08 P€1_%NAM BOOTM2_'DECK-ID B08 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1*_$9 TRACK MAGNETIC TAPE BOOTSTRAP_^1_%SPC 2_^1BOOTM2 STA* START_(SAVE FWA_^1_%STA* STRADR_^1_%LDQ =N$0382_%** USE $1382 IF USING 1706 NO. 1_^1_%LDA* FUNC1_^1_%OUT -1_+SE€€LECT UNIT, MODE, DENSITY_^1_%INQ -1_^1_%LDA* FUNC2_^1_%OUT -1_+START READ MOTION_^1LOOP1 INQ -1_^1LOOP2 INP STATUS-*_$READ THE WORD_^1_%STA* (STRADR)_^1_%RAO* STRADR_^1STATUS JMP* LOOP2_^1_%INQ 1_^1_%NOP 0_^1_%INP -1_^1_%ALS 11_+IS THIS AN EOP_^1_%SAM EOP_*YES_^1_%JMP* LOOP1_(NO, CONTINUE_^1EOP_"LDA* FUNC2_^1_%OUT -1_+READ PAST THE EOF_^1_%JMP* (START)_%GO TO FWA OF THE€^ PROGRAM_^1FUNC1 NUM $044C_^1FUNC2 NUM $0100_^1START NUM 0_^1STRADR NUM 0_^1_%END_]_^__^PBOOTP CSY/ B09 P€1_%NAM BOOTP_(DECK-ID B09 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*1720-1/1721-2/1777 PAPER TAPE READER BOOTSTRAP_^1_%SPC 2_^1BOOTP IIN 0_^1_%STA* START_(SAVE FWA_^1_%STA* STRADR_^1_%LDQ =N$A1_^1_%ENA $20_^1_%OUT -1_+START TAPE MOTION_^1_%INQ €€ -1_^1LOOP1 RTJ* READ_)IS THIS FIRST DATA FRAME_^1_%SAN DATA_)YES, CONTINUE_^1_%JMP* LOOP1_(NO, GET NEXT FRAME_^1DATA_!ALS 8_,SAVE COMPLIMENT OF RECORD LENGTH_^1_%AAM M_^1_%RTJ* READ_^1LOOP2 AAM A,M_*IS THIS END OF RECORD_^1_%SAN NOEOR_(NO, CONTINUE_^1_%JMP* (START)_%YES, JUMP TO START OF DATA_^1NOEOR RTJ* READ_)SAVE UPPER BYTE_^1_%ALS 8_^1_%STA* (STRADR)_^1_%RTJ* READ_^1_€d%EOR* (STRADR)_$MASK IN LOWER BYTE_^1_%STA* (STRADR)_^1_%RAO* STRADR_'INCREMENT CURRENT ADDRESS_^1_%ENA 1_,INCREMENT RECORD LENGTH_^1_%JMP* LOOP2_(CONTINUE PROCESSING DATA_^1READ_!NOP 0_^1_%ENA 0_,READ ONE FRAME OF DATA_^1_%INP -1_^1_%JMP* (READ)_^1START NUM 0_,STARTING ADDRESS OF LOAD_^1STRADR NUM 0_,CURRENT ADDRESS OF DATA STORAGE_^1_%END_]_^__ dPBUFEXC CSY/ B10 P€1_%NAM BUFEXC_'DECK-ID B10 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT PUTD_)OUTPUT DATA_^1_%ENT GETD_)INPUT DATA_^1_%EXT IOMBUF_'BUFFER LOCATION TABLE_^1_%EXT IOMFLG_^1_%EXT ATOSAN_^1_%EXT SCANON_^1_%SPC 4_^1*€€_$VOLATILE REFERENCES_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITE€€MP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST AND TEMP STORAGE_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS AND TEMP STORAGE_^1_%EQU BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1_%EQU NBRS(1)_%NUMBER OF POINTS - BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,MODE_^1_%EQU WES(3)_'W-E-S FOR FIRST STATION_^1_%EQU XXXX(4)_%W-E-S FOR ADC OR FLAG T€€ABLE ADDRESS_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU AMONI($F4)_^1_%EQU ZERO($22)_^1_%EQU MASK($33)_^1_%EQU ONEBIT($23)_^1_%EQU H0010($27)_^1_%EQU H000F($6)_^1_%EQU SCANPL(4)_#SCAN PRIORITY LEVEL_^1_%SPC 2_^1_%EJT_]_^1****************************************************_^1*_$OUTPUT DATA ENTRY_:*_^1****************************************************_^1PUTD_!NUM 0_^1_%I€€IN 0_^1_%LDA* PUTD_^1_%STA- SUBRET,I_$SAVE RETURN_^1_%EIN 0_^1_%LDQ- IREC,I_'GET DEVICE TYPE_^1_%LDA- TYPLU,Q_^1_%ARS 8_^1_%AND- H000F_^1_%STA- COMP,I_'SAVE DEVICE TYPE_^1_%TRA Q_,=DEVICE TYPE_^1_%LDQ IOMBUF,Q_$BUFFER LOCATION_^1_%ADQ- ITEMP,I_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE OUTPUT VALUE_^1_%LDA- ITEMP,I_%SET BIT IN FLAG TABLE_^1_%ENQ 0_^1_%DVI- H0010_^1_%STQ- BITX,I€€_'BIT NBR_^1_%LDQ- COMP,I_'DEVICE TYPE_^1_%LDQ IOMFLG,Q_^1_%INQ 1_^1_%AAQ Q_,ADD WORD NUMBER_^1_%STQ- REQST,I_^1_%LDA- (ZERO),Q_^1_%LDQ- BITX,I_^1_%AND- MASK,Q_'MASK OUT BIT_^1_%ADD- ONEBIT,Q_$ADD NEW BIT_^1_%LDQ- REQST,I_^1_%STA- (ZERO),Q_^1_%JMP* BX8_^1_%SPC 4_^1****************************************************_^1*_$INPUT DATA ENTRY_;*_^1***********************************€€*****************_^1GETD_!NUM 0_^1_%IIN 0_^1_%LDA* GETD_^1_%STA- SUBRET,I_^1_%EIN 0_^1_%LDQ- IREC,I_'CHECK ERROR FLAG_^1_%LDA- TYPLU,Q_^1_%SAP BX6_*NO ERROR_^1_%LDA =N$8001_^1_%STA- ETEMP,I_^1_%LDA- TYPLU,Q_^1BX6_"ARS 8_,GET DEVICE TYPE_^1_%AND- H000F_^1_%TRA Q_^1_%LDQ IOMBUF,Q_$BUFFER LOCATION_^1_%ADQ- ITEMP,I_^1_%LDA- (ZERO),Q_$GET VALUE_^1_%STA- AREG,I_^1BX8_"LDA SCANON€j_'IS SCAN ON_^1_%SAZ BX18_)NO_^1BX16_!LDQ- SUBRET,I_$YES,RETURN_^1_%JMP- (ZERO),Q_^1BX18_!ENA SCANPL_'START SCAN_^1_%ADD =N$2400_%BUILD SCHED REQUEST IN VOL_^1_%STA- REQST,I_^1_%LDA =XATOSAN_^1_%STA- COMP,I_^1_%LDA- I_^1_%INA REQST_^1_%IIN 0_^1_%STA* BX20+2_^1_%RAO SCANON_^1BX20_!RTJ- (AMONI)_^1_%NUM $2000_^1_%NUM 0_^1_%JMP* BX16_)RETURN_^1_%END_]_^__jPB17332 CSY/ B11 P€1_%NAM B17332_'DECK-ID B11 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM CHECKOUT BOOTSTRAP FOR 1733-2/856 DISK_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_]_^1_%ENT COBOP_^1_%EXT COBOPS_'STARTING SECTOR_^1_%EXT MSIZV4_'LENGTH OF IMAGE (*S ) DECLARATION)_^1_%SPC 2_^1*_81 CARD DELETED_^1_%EQU C€€YL562(203)_!NO. CYLINDERS ON 856-2_^1_%EQU CYL564(406)_!NO. CYLINDERS ON 856-4_^1_%EQU D18564(CYL564*29*2-1)_^1_%EQU D18562(CYL562*29*2-1)_^1_%SPC 5_^1COBOP IIN 0_^1_%JMP* OVER_^1AREG_!NUM 0_^1QREG_!NUM 0_^1START ADC COBOPS_'STARTING SYSTEM_^1LENGTH ADC MSIZV4_'LENGTH OF IMAGE_^1CDEQ_!ADC 3_,EQUIPMENT NUMBER_^1OVER_!STA* AREG_)SAVEA_^1_%STQ* QREG_)SAVE Q_^1_%LDA* CDEQ_^€€1_%ALS 7_^1_%STA* DISK39_^1_%LDA =N$100_^1_%ENQ 1_^1_%RTJ* OUTPUT_'CONNECT TO UNIT 0_^1_%RTJ* STATUS_^1_%LLS 21_+TYPE BIT TO Q15_^1_%LDA =XD18562_$SECTOR 0, DISK 1, 856-2_^1_%SQM TYPSET_'SKIP IF 856-2_^1_%LDA =XD18564_$SECTOR 0, DISK 1, 856-4_^1TYPSET STA* SECSIZ+1_^1_%LDA* START_^1*_81 CARD DELETED_^1_%CLR Q_^1SECSIZ DVI =N0_*TWO WORDS_^1_%ALS 5_^1_%STA* TEMP_)BIT5 0/1 F€€OR DISK_^1_%TRQ A_^1_%CLR Q_^1_%DVI =N29_^1_%QLS 10_+SECTORS TO Q 14-10_^1_%LLS 6_,SECTOR + TRACK TO A_^1_%ADD* TEMP_)ADD IN DISK BIT_^1_%STA* TEMP_^1_%CLR M_,FIRST TIME THROUGH THIS CODE_^1SEC_"LDA* TEMP_^1_%ENQ 2_,LOAD ADDRESS_^1_%RTJ* OUTPUT_^1_%RTJ* STATUS_^1_%LDA* LENGTH_^1_%ENQ 0_,BUFFER LENGTH_^1_%RTJ* OUTPUT_^1_%TRM Q_^1_%SQZ 1_,SKIP OF FIRST TIME_^1_%ENQ 2_,COMP€€ARE_^1_%INQ 3_,WRITE_^1_%ENA 0_,STARTING ADDED TO A_^1_%RTJ* OUTPUT_^1_%RTJ* STATUS_^1_%TRM Q_^1_%SQN END_^1_%SET M_^1_%JMP* SEC_*GO DO THE COMPARE_^1END_"CLR Q_^1_%JMP* SOF_^1_%SPC 5_^1OUTPUT NUM 0_^1_%ADQ- 0_,TWO WORDS_^1DISK39 NUM 0_^1_%OUT OREJ-*_^1_%JMP* (OUTPUT)_^1_%SPC 5_^1STATUS NUM 0_^1_%LDQ* DISK39_^1_%INQ 1_^1INP_"INP OREJ-*_^1*_81-CARD DELETED_^1_%ALS 10€2_^1_%SAP NOALRM_'SKIP IF NO ALARM_^1_%JMP* OREJ_^1NOALRM ALS 2_^1_%SAM ONCYL_(SKIP IF ON CYLINDER_^1_%JMP* INP_^1ONCYL ALS 2_^1_%SAM BUSY_)SKIP IF BUSY_^1_%JMP* (STATUS)_^1BUSY_!JMP* INP_^1*_81-CARD DELETED_^1_%SPC 5_^1OREJ_!SET Q_^1SOF_"SLS 0_^1_%JMP* SOF_^1_%SPC 5_^1TEMP_!NUM 0_^1_%END_]_^__ 2PCNTTBL CSY/ B12 P€1_%NAM CNTTBL_'DECK-ID B12 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*I O M_"C O N T R O L_"T A B L E S_^1_%SPC 2_^1_%SPC 2_^1*_$THIS PROGRAM FUNCTION IS LIMITED TO THE PIGGY BACK CONCEPT OF_^1*_"IOM DIAGNOSTICS. THE DIAGNOSTIC TEST, DRIVER AND THIS€€ PROGRAM ARE_^1*_"LOADED AS A FILE. THIS CONTROL TABLE USED BY THE DRIVER LOADED_^1*_#WITHIN THE FILE. THIS CONTROL TABLE IS NOT ENTENDED TO FUNCTION_^1*_%EXACTLY AS THE ONE IN SYSDAT._^1_%SPC 2_^1_%ENT DICRS_^1_%ENT DOCRS_^1_%ENT CTCRS_^1_%ENT ROCRS_^1_%ENT AICRS_^1_%ENT AOCRS_^1_%ENT DICR_^1_%ENT DOCR_^1_%ENT CTCR_^1_%ENT ROCR_^1_%ENT AOCR_^1_%ENT AICR_^1_%ENT IOMBU€€F_^1_%ENT DIBUF_^1_%ENT DOBUF_^1_%ENT CTBUF_^1_%ENT ROBUF_^1_%ENT AIBUF_^1_%ENT AOBUF_^1_%ENT CTUNIT_^1_%ENT CTDELY_^1_%ENT CTMULT_^1_%ENT INILZ_^1_%SPC 2_^1INILZ NOP 0_,ABSOLUTIZE POINTERS TO CONTROL TABLES_^1_%LDA* BASE_^1_%SAN EXIT_)BASE AND POINTERS HAVE ALREADY BEEN SET UP_^1_%RTJ* BASE_^1BASE_!ADC 0_^1_%ENQ 6_^1LOOP_!LDA* IOMCNT,Q_^1_%ADD* BASE_^1_%STA* IOMCNT€€,Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* LOOP_^1EXIT_!JMP* (INILZ)_^1_%SPC 4_^1*_$IOM CONTROL RECORD LOCATION TABLE_^1*_]_^1IOMCNT ADC 0_,DUMMY LOCATION_^1DICRS ADC DICR-BASE_^1DOCRS ADC DOCR-BASE_^1CTCRS ADC CTCR-BASE_^1ROCRS ADC ROCR-BASE_^1AICRS ADC AICR-BASE_^1AOCRS ADC AOCR-BASE_^1_%SPC 4_^1*_*DIGITAL INPUTS_^1_%EQU NL1A(128)_%DI LOCAL GROUP 1 NBR OF STATIONS_^1_%€€EQU MSL1A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*DIGITAL OUTPUTS_^1_%EQU NL2A(128)_%DO LOCAL GROUP 1 NBR OF STATIONS_^1_%EQU MSL2A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*COUNTERS_^1_%EQU NL3A(128)_%CNT LOCAL GROUP 1 NBR OF STATIONS_^1_%EQU MSL3A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*RELAY OUTPUTS_^1_%EQU NL4A(128)_%RO LOCAL GROUP 1 NBR OF STATION€€S_^1_%EQU MSL4A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*ANALOG INPUTS_^1_%EQU NL6A(1)_%AI LOCAL GROUP 1 NBR OF MUX STATIONS_^1_%EQU MSL6AX($602) -_#-_$-_!- ADC STATION ADDRESS_^1_%EQU MSL6AY($600) -_#-_$-_!- FIRST MUX STATION ADDRESS_^1*_*ANALOG OUTPUTS_^1_%EQU NL8A(128)_%AO LOCAL GROUP 1 NUMBER OF STATIONS_^1_%EQU MSL8A($600)_!-_#-_$-_!- FIRST STATION ADDRES€€S_^1_%SPC 2_^1_%EQU B01(NL6A)_^1_%EQU B66(NL8A)_^1_%EQU F53(NL2A)_^1_%EQU F55(NL4A)_^1_%EQU F66(NL8A)_^1_%SPC 4_^1_%SPC 4_^1*_$IOM DATA BUFFER LOCATION TABLE_^1*_*INDEXED BU IOM DEVICE TYPE_^1IOMBUF ADC 0_,00_^1DIBUF ADC 0_,01_^1DOBUF ADC 0_,02_^1CTBUF ADC 0_,03_^1ROBUF ADC 0_,04_^1_%ADC 0_,05_^1AIBUF ADC 0_,06_^1_%ADC 0_,07_^1AOBUF ADC 0_,08_^1_%SPC 4_^1_%E€€JT_]_^1**************************************************_^1*_$D1544A CONTROL TABLE_5*_^1**************************************************_^1DICR_!NUM -0_+THREAD_^1_%ADC NL1A_)NUMBER OF STATIONS_^1_%NUM $100_)DEVICE TYPE_^1_%ADC MSL1A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 4_^1**************************************************_^1*_$D1553A CONTROL TABLE_5*_^1*****************€€*********************************_^1DOCR_!NUM -0_+THREAD_^1_%ADC NL2A_)NUMBER OF STATIONS_^1_%NUM $200_)DEVICE TYPE_^1_%ADC MSL2A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 4_^1**************************************************_^1*_$D1547A CONTROL TABLE_5*_^1**************************************************_^1CTCR_!NUM -0_+THREAD_^1_%ADC NL3A_)NUMBER OF STATIONS_^1_%NUM $300_€€)DEVICE TYPE_^1_%ADC MSL3A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 2_^1CTUNIT NUM 2_,D1547 SCAN DELAY UNITS_^1CTDELY NUM 3_,D1547 SCAN DELAY VALUE_^1CTMULT NUM 1000_)1573 MULTIPLIER FOR COUNTER GATE_^1_%SPC 4_^1**************************************************_^1*_$D1555A CONTROL TABLE_5*_^1**************************************************_^1ROCR_!NUM -0_+THREAD_^1_%ADC N€€L4A_)NUMBER OF STATIONS_^1_%NUM $400_)DEVICE TYPE_^1_%ADC MSL4A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 4_^1**************************************************_^1*_$D1501A CONTROL TABLE_5*_^1**************************************************_^1AICR_!NUM -0_+THREAD_^1_%ADC NL6A_)NUMBER OF STATIONS 16 CHANNELS PER_^1_%NUM $600_)DEVICE TYPE_^1_%ADC MSL6AX_'W-E-M-S ADC_^1_%ADC €€MSL6AY_'W-E-M-S FIRST MUX STATION_^1_%SPC 4_^1**************************************************_^1*_$D1566A CONTROL TABLE_5*_^1**************************************************_^1AOCR_!NUM -0_+THREAD_^1_%ADC NL8A_)NUMBER OF STATIONS 4 CHANNELS PER_^1_%NUM $800_)DEVICE TYPE_^1_%ADC MSL8A_(FIRST STATION ADDRESS_^1**************************************************_^1_%END_]_^_€_ PCP026 CSY/ B13 P€1_%NAM CP026_(DECK-ID B13 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_*HOLLERITH (026) CARD PUNCH TABLE_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT CDPC_^1_%SPC 2_^1CDPC_!NUM_($000_0$20-SPACE_^1_(NUM_%$482_0$21-EXCLAMATION_^1_(NUM_%$006_0$22-QUOTES_^1_(NUM_%$806_0$23-NUMBER_^1_(NUM_%$44€€2_0$24-DOLLAR_^1_(NUM_%$212_0$25-PERCENT_^1_(NUM_%$082_0$26-AMPERSAND_^1_(NUM_%$022_0$27-APOSTROPHE_^1_(NUM_%$222_0$28-OPENING PAREN._^1_(NUM_%$822_0$29-CLOSING PAREN._^1_(NUM_'$422_1$2A-ASTERISK_^1_(NUM_'$800_1$2B-PLUS_^1_(NUM_%$242_0$2C-COMMA_^1_(NUM_%$400_0$2D-MINUS_^1_(NUM_%$842_0$2E-PERIOD_^1_(NUM_%$300_0$2F-SLASH_^1_(NUM_%$200_0$30-ZERO_^1_(NUM_%$100_0$31-ONE_^1_(NUM_%$080_0$€€32-TWO_^1_(NUM_%$040_0$33-THREE_^1_(NUM_%$020_0$34-FOUR_^1_(NUM_%$010_0$35-FIVE_^1_(NUM_%$008_0$36-SIX_^1_(NUM_%$004_0$37-SEVEN_^1_(NUM_%$002_0$38-EIGHT_^1_(NUM_%$001_0$39-NINE_^1_(NUM_%$012_0$3A-COLON_^1_(NUM_%$40A_0$3B-SEMICOLON_^1_(NUM_%$80A_0$3C-LESS THAN_^1_(NUM_%$042_0$3D-EQUAL_^1_(NUM_%$00A_0$3E-GREATER THAN_^1_(NUM_%$882_0$3F-QUESTION MARK_^1_(NUM_%$206_0$40-AT_^1_(NUM_%$90€€0_0$41-A_^1_(NUM_%$880_0$42-B_^1_(NUM_%$840_0$43-C_^1_(NUM_%$820_0$44-D_^1_(NUM_%$810_0$45-E_^1_(NUM_%$808_0$46-F_^1_(NUM_%$804_0$47-G_^1_(NUM_%$802_0$48-H_^1_(NUM_%$801_0$49-I_^1_(NUM_%$500_0$4A-J_^1_(NUM_%$480_0$4B-K_^1_(NUM_%$440_0$4C-L_^1_(NUM_%$420_0$4D-M_^1_(NUM_%$410_0$4E-N_^1_(NUM_%$408_0$4F-O_^1_(NUM_%$404_0$50-P_^1_(NUM_%$402_0$51-Q_^1_(NUM_%$401_0$52-R_^1_(NUM_%$280_0$53€H-S_^1_(NUM_%$240_0$54-T_^1_(NUM_%$220_0$55-U_^1_(NUM_%$210_0$56-V_^1_(NUM_%$208_0$57-W_^1_(NUM_%$204_0$58-X_^1_(NUM_%$202_0$59-Y_^1_(NUM_%$201_0$5A-Z_^1_(NUM_%$812_0$5B-OPENING BRACKET_^1_%NUM_($282_0$5C - REVERSE SLASH_^1_(NUM_%$412_0$5D-CLOSING BRACKET_^1_(NUM_%$406_0$5E-UP ARROW_^1_%NUM_($20A_0$5F - LEFT ARROW_^1_%END_]_^__HPCP029 CSY/ B14 P€1_%NAM CP029_(DECK-ID B14 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_*EBCDIC (029) CARD PUNCH TABLE_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT CDPC_^1_%SPC 2_^1CDPC_!NUM_($000_0$20-SPACE_^1_%NUM $806_)$21-EXCLAMATION_^1_%NUM $0006_($22-QUOTES_^1_%NUM $042_)$23-NUMBER_^1_%NUM $442_€€)$24-DOLLAR_^1_%NUM $222_)$25-PERCENT_^1_%NUM $800_)$26-AMPERSAND_^1_%NUM $012_)$27-APOSTROPHE_^1_%NUM $812_)$28-OPENING PAREN._^1_%NUM $412_)$29-CLOSING PAREN._^1_%NUM $422_)$2A-ASTERISK_^1_%NUM $80A_)$2B-PLUS_^1_%NUM $242_)$2C-COMMA_^1_%NUM $400_)$2D-MINUS_^1_%NUM $842_)$2E-PERIOD_^1_%NUM $300_)$2F-SLASH_^1_%NUM $200_)$30-ZERO_^1_%NUM $100_)$31-ONE_^1_%NUM $080_)$32€€-TWO_^1_%NUM $040_)$33-THREE_^1_%NUM $020_)$34-FOUR_^1_%NUM $010_)$35-FIVE_^1_%NUM $008_)$36-SIX_^1_%NUM $004_)$37-SEVEN_^1_%NUM $002_)$38-EIGHT_^1_%NUM $001_)$39-NINE_^1_%NUM $082_)$3A COLON_^1_%NUM $40A_)$3B-COLON_^1_%NUM $822_)$3C-LESS THAN_^1_%NUM $00A_)$3D-EQUAL_^1_%NUM $20A_)$3E-GREATER THAN_^1_%NUM $206_)$3F-QUESTION MARK_^1_%NUM $022_)$40-AT_^1_%NUM $900_)$41€€-A_^1_%NUM $880_)$42-B_^1_%NUM $840_)$43-C_^1_%NUM $820_)$44-D_^1_%NUM $810_)$45-E_^1_%NUM $808_)$46-F_^1_%NUM $804_)$47-G_^1_%NUM $802_)$48-H_^1_%NUM_($801_0$49-I_^1_%NUM $500_)$4A-J_^1_%NUM $480_)$4B-K_^1_%NUM $440_)$4C-L_^1_%NUM $420_)$4D-M_^1_%NUM_($410_0$4E-N_^1_%NUM $408_)$4F-O_^1_%NUM $404_)$50-P_^1_%NUM $402_)$51-Q_^1_%NUM $401_)$52-R_^1_%NUM $280_)$53-S_^1_€>%NUM $240_)$54-T_^1_%NUM $220_)$55-U_^1_%NUM $210_)$56-V_^1_%NUM $208_)$57-W_^1_%NUM $204_)$58-X_^1_%NUM $202_)$59-Y_^1_%NUM $201_)$5A-Z_^1_%NUM $882_)$5B-OPENING BRACKET_^1_%NUM $282_)$5C-REVERSE SLASH_^1_%NUM $482_)$5D-CLOSING BRACKET_^1_%NUM $406_)$5E-UP ARROW_^1_%NUM $212_)$5F-UNDERSCORE_^1_%END_]_^__>PCR026 CSY/ B15 P€1_%NAM CR026_(DECK-ID B15 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$CARD READER HOLLERITH TO ASCII CONVERSION TABLE_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1*_]_^1_%ENT CDRD_)TABLE START_^1*_]_^1CDRD_!NUM $3120_^1_%NUM $3332_^1_%NUM $3534_^1_%NUM $3736_^1_%NUM $3938_^1_%N€€UM $3D26_^1_%NUM $3A27_^1_%NUM $223E_^1_%NUM $2F30_^1_%NUM $5453_^1_%NUM $5655_^1_%NUM $5857_^1_%NUM $5A59_^1_%NUM $2C5C_^1_%NUM $2528_^1_%NUM $405F_^1_%NUM $4A2D_^1_%NUM $4C4B_^1_%NUM $4E4D_^1_%NUM $504F_^1_%NUM $5251_^1_%NUM $2421_^1_%NUM $5D2A_^1_%NUM $5E3B_^1_%NUM $412B_^1_%NUM $4342_^1_%NUM $4544_^1_%NUM $4746_^1_%NUM $4948_^1_%NUM $2E3F_^1_%NUM $5B29€_^1_%NUM $233C_^1_%END_]_^__ PCR029 CSY/ B16 P€1_%NAM CR029_(DECK-ID B16 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$CARD READER CONVERSION TABLE FOR 029(EBCDIC) CODES_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1*_$TABLE ENTRY POINT_^1_%ENT CDRD_^1_%SPC 2_^1CDRD_!NUM $3120_^1_%NUM $3332_^1_%NUM $3534_^1_%NUM $3736_^1_%NUM €€ $3938_^1_%NUM $233A_^1_%NUM $2740_^1_%NUM $223D_^1_%NUM $2F30_^1_%NUM $5453_^1_%NUM $5655_^1_%NUM $5857_^1_%NUM $5A59_^1_%NUM $2C5C_^1_%NUM $5F25_^1_%NUM $3F3E_^1_%NUM $4A2D_^1_%NUM $4C4B_^1_%NUM $4E4D_^1_%NUM $504F_^1_%NUM $5251_^1_%NUM $245D_^1_%NUM $292A_^1_%NUM $5E3B_^1_%NUM $4126_^1_%NUM $4342_^1_%NUM $4544_^1_%NUM $4746_^1_%NUM $4948_^1_%NUM $2E5B_^1€*_%NUM $283C_^1_%NUM $212B_^1_%END_]_^__ *PDMP42X CSY/ B17 P€1_%NAM DMP42X_'DECK-ID B17 PERIPH. DRIVERS 1.0B SUMMARY-106_^1****************************************************************_^1*_*THIS VERSION PERFORMS PR-PRINT MOTION FOR 1742-30/120_^1****************************************************************_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%€€SPC 3_^1*_]_^1*_8USER INSTRUCTIONS_^1*_82. PUT ENDING ADDRESS+1 IN Q_)Q=8000_^1*_83. PUT START OF COUTV4 IN P_^1*_84. PUSH RUN SWITCH_^1*_]_^1*_1PROGRAM RESULTS AFTER RUNNING_^1*_81. PAPER IS SET AT TOP OF FORM_^1*_82. ABSOLUTE/RELATIVE(MOD 16) HEADING OF_^1*_;SIXTEEN COLUMNS AT TOP OF EACH PAGE_^1*_83. ABSOLUTE ADDRESS, RELATIVE ADDRESS,_^1*_;AND SIXTEEN WORDS PRINTED PER LINE_^1€€*_84. LINES WHOSE SIXTEEN WORDS ARE SAME AS_^1*_;LAST PRINTED WORD ARE IGNORED BY_^1*_;PRINTING A ROW OF ASTERISKS_^1*_85. PRINTS 60 LINES PER PAGE,HANGS WHEN DONE_^1*_]_^1_%ENT COUTV4_^1COUTV4 NOP 0_^1_%STA STRADR_'SAVE CURRENT,STARTING AND ENDING ADDRESSES_^1_%STA CURADR_^1_%STQ ENDADR_^1_%RTJ STATUS_'WAIT UNTIL STATUS OK_^1*_]_^1NXTPAG ENA $40_*TOP OF FORM_^1_%RTJ OUTPUT€€_^1_%ENA_!-60_^1_%STA LINCTR_^1_%ENA 0_^1_%STA HEXCTR_^1_%ENQ -1_^1_(LDA =N$4142_^1_%RTJ* RPTOUT_'OUTPUT AB_^1_%ENQ -1_^1_%LDA =N$534C_^1_%RTJ* RPTOUT_'OUTPUT SL_^1_%ENQ -1_^1_%LDA* TWOSPC_^1_%RTJ* RPTOUT_'OUTPUT TWO SPACES_^1_%ENQ -1_^1_%LDA =N$2052_^1_%RTJ* RPTOUT_'OUTPUT R_^1_%ENQ -1_^1_%LDA =N$454C_^1_%RTJ* RPTOUT_'OUTPUT EL_^1_%ENQ -4_^1*_]_^1HEDFLD LDA* TWOSPC_'N€€EXT HEADING FIELD_^1_%RTJ* RPTOUT_'OUTPUT CORRECT NUMBER OF SPACES_^1_%ENA $F_+NEXT HEADING WORD_^1_%AND* CURADR_^1_%ADD* HEXCTR_'GET ABSOLUTE HEXADECIMAL DIGIT_^1_%ALS 4_^1_%EOR* HEXCTR_'GET RELATIVE HEXADECIMAL DIGIT_^1_%ALS 8_^1_%RTJ* OUT2CH_'OUTPUT ABSOLUTE AND RELATIVE HEX DIGIT HEADING_^1_%RAO* HEXCTR_^1_%LDA* HEXCTR_^1_%INA -$10_)INCREMENT HEX COLUMN COUNTER, IS IT $10_^€€1_%SAP HEDDON_*YES, ENTIRE HEADING HAS BEEN OUTPUT_^1_%ENQ -2_.NO, OUTPUT NEXT HEADING FIELD_^1_%JMP* HEDFLD_^1HEDDON RTJ* PRTSPC_'PRINT HEADING FIELD AND SPACE TO NEXT LINE_^1_%JMP* NXTLIN_'OUTPUT THIS LINE_^1_%EJT_]_^1CHKLIN ENA 0_,CHECK LINE IF ALL WORDS SAME AS LAST WORD_^1_%STA* HEXCTR_'SET HEX COLUMN COUNTER_^1*_]_^1CHKFLD LDQ* CURADR_^1_%ADQ* HEXCTR_^1_%LDA* (ZERO),Q_^1_%€€EOR* LSTWRD_'IS NEXT WORD EQUAL TO LAST WORD OUTPUT_^1_%SAZ 1_^1_%JMP* NXTLIN_^1*_]_^1_%LDA* CURADR_'CHECK FOR END ADDRESS_^1_%ADD* HEXCTR_^1_%EOR* ENDADR_^1_%SAN_!1_^1_%JMP* NXTLIN_^1_%RAO* HEXCTR_*YES, INCREMENT HEX COLUMN COUNTER_^1_%LDA* HEXCTR_^1_%INA -$10_)IS HED COLUMN COUNTER $10_^1_%SAP 1_^1_%JMP* NXTCHK_^1*_]_^1_%LDA* CURADR_^1_%ADD* HEXCTR_^1_%STA* CURADR_^1_%LDA* IG€€NFLG_*YES, IS IGNORE FLAG SET_^1_%SAZ OUTASK_2NO, PRINT ROW OF ASTERISKS_^1_%JMP* CHKDON_2YES, CHECK IF ALL DONE_^1*_]_^1OUTASK ENA 1_^1_%RTJ* OUTPUT_^1_%ENQ -57_^1_%STQ* IGNFLG_'SET IGNORE FLAG_^1_%LDA* TWOASK_^1_%RTJ* RPTOUT_'OUTPUT A ROW OF ASTERISKS_^1_%RAO* LINCTR_*INCREMENT LINE COUNTER_^1_%JMP* PRTLIN_'PRINT ROW OF ASTERISKS_^1*_]_^1NXTCHK JMP* CHKFLD_^1*_]_^1NXTLIN ENA €€1_^1_%RTJ* OUTPUT_^1_%LDA* CURADR_^1_%RTJ* OUTFLD_'OUTPUT CURRENT ABSOLUTE ADDRESS_^1_%LDA* CURADR_^1_%SUB* STRADR_^1_%RTJ* OUTFLD_'OUTPUT CURRENT RELATIVE ADDRESS_^1_%ENQ -2_^1_%LDA* TWOSPC_^1_%RTJ* RPTOUT_'OUTPUT A SPACER FIELD_^1_%ENA 0_^1_%STA* HEXCTR_'SET HEX COLUMN COUNTER_^1_%STA* IGNFLG_'RESET IGNORE FLAG_^1*_]_^1NXTFLD LDQ* CURADR_^1_%LDA* (ZERO),Q_$GET NEXT CORE WORD_^1€€_%RTJ* OUTFLD_'OUTPUT NEXT FIELD (CORE WORD AND SPACES)_^1_%RAO* HEXCTR_^1_%LDA* CURADR_'CHECK TO SEE IF DONE_^1_%EOR* FFFE_^1_%SAZ 3_^1_%LDA* CURADR_^1_%EOR* ENDADR_^1_%SAN 2_^1_%RTJ* PRTSPC_^1_%JMP* ALLDON_^1_%LDA* HEXCTR_^1_%INA -$10_)INCREMENT HEX COLUMN COUNTER, IS $10_^1_%RAO* CURADR_'OUTPUT NEXT FIELD_^1_%SAP PRTLIN_*YES, PRINT THE LINE_^1_%JMP* NXTFLD_*NO, OUTPUT NEXT €€FIELD_^1_%EJT_]_^1PRTLIN RTJ* PRTSPC_'PRINT THE LINE AND SPACE TO THE NEXT LINE_^1*_]_^1CHKDON LDA* IGNFLG_'NO,IS IGNORE FLAG SET_^1_%SAN CKNXLN_1YES, CHECK NEXT LINE_^1*_]_^1_%RAO* LINCTR_1NO, INCREMENT LINE COUNTER_^1_%LDA* LINCTR_'HAS BOTTOM OF PAGE BEEN REACHED_^1_%SAM CKNXLN_*NO, CHECK NEXT LINE_^1_%JMP* NXTPAG_*YES, SET TOP OF FORM AND PRINT HEADING_^1*_]_^1CKNXLN JMP* CHKL€€IN_^1*_]_^1*_]_^1ALLDON NUM $18FF_(ALL DONE, HANG_^1_%EJT_]_^1RPTOUT 000 000_*REPEAT OUTPUT WORD IN A, Q-TIMES_^1_%STQ* RPTCTR_*SET REPEAT COUNTER AND SAVE WORD_^1_%STA* WRDSAV_^1RPTAGN ALS 8_^1_%RTJ* OUTPUT_^1_%LDA* WRDSAV_^1_%RTJ* OUTPUT_^1_%LDA* WRDSAV_^1_%RAO* RPTCTR_^1_%LDQ* RPTCTR_'INCREMENT REPEAT COUNTER, IS IT ZERO_^1_%SQP RPTEXT_*YES, ALL DONE, EXIT_^1_%JMP* RPTAGN_*N€€O, REPEAT AGAIN_^1RPTEXT JMP* (RPTOUT)_^1_%SPC 2_^1PRTSPC 000 000_*PRINT LINE AND SPACE TO THE NEXT LINE_^1_%ENA $20_*PRINT_^1_%RTJ* OUTFCT_^1_%JMP* (PRTSPC)_^1_%SPC 2_^1TWOSPC NUM $2020_(TWO SPACES_^1ENDADR NUM $8000_(ENDING ADDRESS + 1_^1STRADR NUM 0_,STARTING ADDRESS_^1CURADR NUM 0_,CURRENT ADDRESS_^1HEXCTR NUM 0_,HEX COLUMN COUNTER_^1LINCTR NUM 0_,LINE COUNTER_^1RPTCT€€R NUM 0_,REPEAT COUNTER_^1IGNFLG NUM 0_,IGNORE FLAG_^1WRDSAV NUM 0_,WORD SAVE_^1LSTWRD NUM 0_,LAST WORD_^1ZERO_!NUM 0_,ZERO_^1TWOASK NUM $2A2A_(TWO ASTERISKS_^1WESSTA NUM $0201_(HARDWARE ADDRESS (STATUS)_"(EQ 4)_^1FFFE_!NUM $FFFE_^1_%SPC 2_^1OUTFLD 000 000_*OUTPUT NEXT FIELD_^1_%STA* LSTWRD_*SAVE LAST WORD OUTPUT_^1_%RTJ* OUT2CH_'OUTPUT FIRST TWO CHARACTERS_^1_%LDA* LSTWR€€D_^1_%ALS 8_^1_%RTJ* OUT2CH_'OUTPUT LAST TWO CHARACTERS_^1_%LDA* TWOSPC_^1_%ENQ -1_^1_%RTJ* RPTOUT_^1_%JMP* (OUTFLD)_^1_%SPC 2_^1OUT2CH 000 000_*OUTPUT TWO HEX CHARACTERS_^1_%ENQ 0_/CHARACTERS IN BITS 8-15 OF A_^1_%LLS 4_^1_%ALS 4_,PUT FIRST CHARACTER IN Q AND SECOND ONE IN A_^1_%AND =N$F_^1*_]_^1_%INQ -$A_^1_%SQP 1_,CONVERT FIRST CHARACTER TO ASCII_^1_%INQ +$3A-$41_^1_%€€INQ $41_^1*_]_^1_%INA -$A_^1_%SAP 1_,CONVERT SECOND CHARACTER TO ASCII_^1_%INA +$3A-$41_^1_%INA $41_^1*_]_^1_%QLS 8_,COMBINE BOTH ASCII CHARACTERS IN A_^1_%EAQ A_^1_%ENQ -1_^1_%RTJ* RPTOUT_^1_%JMP* (OUT2CH)_^1_%EJT_]_^1OUTPUT 000 000_*OUTPUT TWO ASCII CHARACTERS_^1_%LDQ* WESSTA_'CHARACTERS IN 'A'_^1_%INQ -1_^1_%OUT -1_+OUTPUT_^1_%RTJ* STATUS_^1_%JMP* (OUTPUT)_$CHECK STAT€€US AND EXIT_^1_%SPC 2_^1OUTFCT 000 000_*OUTPUT LINE PRINTER FUNCTION_^1_%LDQ* WESSTA_'FUNCTION IN 'A'_^1_%OUT -1_+OUTPUT FUNCTION_^1_%RTJ* STATUS_^1_%JMP* (OUTFCT)_$CHECK STATUS AOK AND EXIT_^1_%SPC 2_^1STATUS 000 000_*ASCERTAIN LINE PRINTER STATUS AOK_^1_%LDQ* WESSTA_^1INPSTA INP -1_+INPUT STATUS_^1_%AND =N$000B_^1_%INA -9_^1_%SAZ STAAOK_'IS STATUS AOK_^1_%JMP* INPSTA_*NO€F, REREAD STATUS_^1STAAOK JMP* (STATUS)_(YES, EXIT_^1_%END COUTV4_^__ FPD1501A CSY/ B18 P€1_%NAM D1501A_'DECK-ID B18 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$CALL FORMAT_^1*_)Q=POINT NUMBER_^1*_'RTJ AISB_^1*_)A=VALUE_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_%CALL AIRD(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$ENTRY POINT€€S AND EXTERNALS_^1_%ENT AISB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT AIRD_)FORTRAN ENTRY_^1_%EXT GETD_)ENTRY IN BUFEXC_^1_%EXT* AICRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* AIBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3€€)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION€€ ADDRESS_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR ADC_^1_%EQU MWES(4)_%WES CODE FOR MUX_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU ZERO($22)_^1_%EQU €€ H0080($2A)_^1_%EQU H0002($24)_^1_%EQU H0010($27)_^1*_]_^1_%EQU ONECPL(-16)_!-16/12 BIT ADC_!-4/14 BIT ADC_^1_%SPC 4_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1AISB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDA* AISB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^€€1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1AIRD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDQ* AIRD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ€€ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_+MAKE INDEX ZERO BASED_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA AICRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%CLR Q_,MAKE STATION INDEX_^1_%DVI- H0010_€€^1_%STA- INDEX,I_%SAVE STATION INDEX_^1_%STQ- AREG,I_'SAVE CHANNEL ADDRESS_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*OK_^1_%JMP* DR14_)ERROR_^1DR4_"LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE I/O_^1_%RTJ GETD_)GET VALUE FROM VALUE BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDQ- IREC,I_^1_%LDQ- MWES,Q_'W€€ES FOR MUX_^1_%ADQ- INDEX,I_^1_%LDA- AREG,I_'CHANNEL ADDRESS_^1_%IIN 0_^1_%OUT REJ-*_^1_%LDQ- IREC,I_^1_%LDQ- WES,Q_^1_%ADQ- H0080_(FUNCTION BIT_^1_%ENA -30_^1_%STA- COMP,I_^1DR9_"INP REJ-*_(WAIT ON DATA READY_^1_%AND- H0002_^1_%SAN DR9A_^1_%RAO- COMP,I_'BUMP LOOP COUNTER_^1_%LDA- COMP,I_^1_%SAZ REJ_*TOO LONG_^1_%JMP* DR9_^1DR9A_!LDQ- IREC,I_'READ ADC_^1_%LDQ- WES,Q_^1_%INP €€REJ-*_^1_%JMP* DR10_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1_%EIN 0_^1_%JMP* DR14_^1DR10_!EIN 0_^1_%SAP DR10A_^1_%INA ONECPL_'CORRECT FOR TWOS COMPLEMENT ADC_^1DR10A STA- AREG,I_'SAVE DATA_^1_%LDQ AIBUF_(=DATA BUFFER ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%STA- (ZERO),Q_$STORE VALUE €€IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* AISB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AISB)_'RETURN_^1DR16_!LDQ- IVAL,I_'=ADDRESS OF VALUE WORD_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$RETURN VALUE_^1_%LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO€œ),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* AIRD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AIRD)_'RETURN_^1_%END_]_^__ œPD1536 CSY/ B19 P€1_%NAM D1536_(DECK-ID B19 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_#DRIVER FOR 1536/1525 RELAY MUX-ADC_!5.120 VOLT ADC_^1*_$DRIVER EXPECTS ADC VALUE TO BE LEFT JUSTIFIED TO BIT 15_^1*_$DRIVER EXPECTS GAINS OF 1,10,100,1000_^1*_$PDT WORD 21 DEPENDENT €€ON ADC RESOLUTION_^1*_]_^1*_)RC=4 FREAD_^1*_+VALUE RETURNED IS MILLIVOLTS * GAIN (+/-5120)_^1*_]_^1*_)RC=1 READ_^1*_+VALUE RETURNED IS COUNTS LEFT JUSTIFIED SIGN FILLED_^1*_]_^1*_)ERROR CODES RETURNED AS DATA VALUES_^1*_+$8000 TIMEOUT_^1*_+$8001 MUX REJECT_^1*_+$8002 ADC REJECT_^1*_]_^1*_]_^1*_$ENTRY POINTS_^1_%ENT I1536,C1536,E1536_>**MSOS 4.1**_^1*_]_^1*_$EXTERNAL POINTS_^1_€€%EXT LOG_^1*_]_^1*_$EQUIVALENTS_^1_%EQU ZERO($2)_^1_%EQU H0003($4)_^1_%EQU ONEBIT($23)_^1_%EQU AFNR($B5)_^1_%EQU ACMPRQ($B6)_^1_%EQU ADISP($EA)_^1_%EQU EIGHTY($2A)_^1_%EQU FORTY($29)_^1_%EQU ONE($3)_^1_%EQU SVN($5)_^1_%EQU TEN($27)_^1_%EQU MSKFF($A)_^1_%EQU MK7FFF($11)_^1_%EQU MKFF7F($3A)_^1_%EQU H0040($29)_^1_%EQU H8000($32)_^1*_]_^1*_$PROGRAM PARAMETERS_^1_%EQU €€ADCCLK(1)_#ADC TIMEOUT CLOCK._^1*_RSAMPLE PHYSTAB_^1_%EQU ELVL(0)_%SCHEDULER CALL._*NUM $1209_^1_%EQU EDIN(1)_%INITIATOR ADDRESS_(ADC I1536_^1_%EQU EDCN(2)_%CONTINUATOR ADDRESS_%ADC C1536_^1_%EQU EDER(3)_%ERROR ADDRESS_,ADC E1536_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK._(NUM -1_^1_%EQU ELU(5)_'LOGICAL UNIT._,NUM 0_^1_%EQU EPTR(6)_%PARAMETER POINTER._'NUM 0_^1_%EQU EWES(7)_%MUX W€€-E-S_0ADC MWES0_^1_%EQU EREQST(8)_#REQUEST STATUS_+NUM $02C1_^1_%EQU ESTAT1(9)_#DRIVER STATUS/INITL FLAG NUM 0_^1_%EQU ECCOR(10)_#CURRENT CORE ADDRESS._#NUM 0_^1_%EQU ELSTWD(11)_"LAST CORE ADDRESS._'NUM 0_^1_%EQU ESTAT2(12)_"MUX STATUS_/NUM 0_^1_%EQU MASLGN(13)_"RESERVED_1NUM 0_^1_%EQU ADMMDR(14)_"ADDRESS MASS MEMORY DVR. NUM $7FFF_^1_%EQU RETURN(15)_"FNR,CMR RETURN_+NUM €€0_^1_%EQU ADCSTS(16)_"STATUS OF ADC._+NUM 0_^1_%EQU ADCEQP(17)_"ADC W-E-S_0ADC AWES0_^1_%EQU CURINP(18)_"CURRENT DATA ADDRESS_$NUM -1_^1_%EQU MVFLG(19)_#CONVERT TO MV FLAG._%NUM 0_^1_%EQU ERFLG(20)_#ERROR FLAG._.NUM 0_^1_%EQU ONECPL(21)_"TWOS COMPL CORRECT_'NUM $10/$4_^1_%EQU ACON(22)_$GAIN 1_3NUM 10240 = X1_^1*_.(23)_*2_3NUM 10240 = X10_^1*_.(24)_*3_3NUM 10240 = X100_^1*_.(€€25)_*4_3NUM 10240 = X1000_^1_%EJT_]_^1****************************************************_^1*_$INITIATOR ENTRY_<*_^1****************************************************_^1I1536 STQ- I_N**MSOS 4.1**_^1FNR_"RTJ- (AFNR)_^1_%JMP- (ADISP)_%NO REQUESTS._^1_%LDA- ECCOR,I_^1_%EOR- ELSTWD,I_$IS NUM. OF REQUESTED POINTS 0._^1_%SAN SETIDX_^1_%RAO- ELSTWD,I_$ASSUME 1 POINT FOR N = 0._^1SETI€€DX LDA- ELSTWD,I_^1_%STA- CURINP,I_$SET INDEX TO START OF USERS BUFFER._^1_%ENA 0_,CLEAR ERROR FLAG._^1_%STA- ERFLG,I_^1_%LDQ- EPTR,I_^1_%LDA- (ZERO),Q_$REQUEST WORD._^1_%ARS 9_^1_%AND- ZERO+5_'REQUEST CODE_:84*2543_^1_%TRA Q_S84*2543_^1_%INQ -14_*CHECK FOR MOTION REQUEST_.84*2543_^1_%SQN NOTMTN_N84*2543_^1_%JMP* FINISH_'IGNORE MOTION REQUESTS_084*2543_^1NOTMTN SUB- ONE_Q84*2€€543_^1_%STA- MVFLG,I_%COUNTS = 0, MV = 3._^1CLRMUX LDA- ESTAT1,I_$IS ADC/MUX INITIALIZED_^1_%AND- H0040_^1_%SAZ CLR8_)NO_^1_%JMP* NXT_^1CLR8_!ENA $40_*SET INITIALIZATION FLAG_^1_%ADD- ESTAT1,I_^1_%STA- ESTAT1,I_^1CLR10 LDQ- EWES,I_'INITIALIZE MUX-ADC_^1_%ENA 1_^1_%OUT ERR-*_(OUTPUT FUNCTION CLEAR._^1_%ENA $10_^1_%OUT ERR-*_(OUTPUT FUNCTION INTERRUPT ON CLEAR._^1_%JMP* EXTINT€€_^1_%EJT_]_^1****************************************************_^1*_$CONTINUATOR ENTRY_:*_^1****************************************************_^1C1536 STQ- I_N**MSOS 4.1**_^1_%LDA- ELU,I_^1_%SAN 1_^1_%JMP- (ADISP)_%GHOST INTERUPT_^1_%SET A_,$FFFF._^1_%STA- EDCLK,I_%CLEAR DIAG. CLOCK._^1_%LDQ- EWES,I_^1_%INP ERR-*_^1_%AND- TEN_*$10._^1_%SAN ADDR_)SKIP IF INTERRUPT WAS AFTER€€ A CLEAR._^1_%JMP* DATA_^1ADDR_!LDA- FORTY_^1_%OUT ERR-*_(OUTPUT ENABLE READ DATA READY INTERRUPT._^1NXT_"LDQ- ECCOR,I_%GET THE NEXT_^1_%LDQ- (ZERO),Q_$GAIN AND MUX ADDRESS_284*2543_^1_%LDA- EWES,I_N84*2543_^1_%AND- MKFF7F_^1_%LLS 16_+SWAP A AND Q_:84*2543_^1_%OUT ERR-*_(OUTPUT NEXT MUX ADDRESS AND GAIN._^1EXTINT ENA ADCCLK_'START DIAGNOSTIC CLOCK_^1_%STA- EDCLK,I_^1_%JMP- (ADI€€SP)_%EXIT AND WAIT UNTIL INTERRUPT._^1DATA_!LDA- ADCEQP,I_L84*2543_^1_%AND- MKFF7F_^1_%TRA Q_S84*2543_^1_%INP ERRA-*_^1_%SAP DAT1_^1_%SUB- ONECPL,I_$CORRECT FOR TWOS COMPLEMENT ADC_^1DAT1_!LDQ- MVFLG,I_^1_%SQN MV_+SKIP IF MV REQUESTED._^1STORE LDQ- CURINP,I_$ADDRESS OF BUFFER_^1_%STA- (ZERO),Q_$PLACE DATA IN USERS BUFFER._^1_%RAO- ECCOR,I_%BUMP LIST ADDRESS._^1_%RAO- CURINP,I_€€$BUMP USERS BUFF. ADDRESS._^1_%LDA- ECCOR,I_%CUR. CORE ADDRESS._^1_%SUB- ELSTWD,I_$LAST CORE ADDRESS._^1_%SAP CRQST_(SKIP IF DONE._^1_%JMP* NXT_*GO P.U. NEXT WORD IN LIST._^1MV_#STA* TEMP1_(SAVE ANALOG VALUE._^1_%LDQ- ECCOR,I_^1_%LDA- (ZERO),Q_$P.U. GAIN._^1_%ARS 10_^1_%AND- H0003_^1_%TRA Q_^1_%LDA* TEMP1_^1_%MUI- ACON,B_'CONVERT TO MILIVOLTS._^1_%TRQ A_,PLACE INTEGER IN A._^1_€€%JMP* STORE_^1CRQST LDA- ERFLG,I_%COMPLETE REQUEST._^1_%SAZ ESTAT_^1FINISH RTJ- (ACMPRQ)_$COMPLETE REQUEST ROUTINE._^1_%JMP* FNR_^1ESTAT LDQ- EWES,I_'GET STATUS OF MUX._^1_%INP 1_^1_%NOP 0_^1_%STA- ESTAT2,I_^1_%LDQ- ADCEQP,I_$GET STATUS OF ADC._^1_%INP 1_^1_%NOP 0_^1_%STA- ADCSTS,I_^1_%JMP* FINISH_^1_%SPC 4_^1****************************************************_^1*_%REJECT €€PROCESSING_9*_^1****************************************************_^1ERR_"JMP* INREJ_(MUX REJECT_^1_%LDA* MUXREJ_^1_%ENQ 6_,EXT REJ CODE_^1_%STQ* LOGREJ_^1_%JMP* STRCD_^1INREJ LDA* MUXREJ_'INT. REJ CODE._^1_%ENQ 5_,INT REJ CODE_^1_%STQ* LOGREJ_^1_%JMP* STRCD_^1ERRA_!JMP* INREJA_'ADC REJECT_^1_%LDA* ADCREJ_^1_%ENQ 6_,EXT REJ CODE_^1_%STQ* LOGREJ_^1_%JMP* STRCD_^1INREJA LDA* AD€€CREJ_^1_%ENQ 5_,INT REJ CODE_^1_%STQ* LOGREJ_^1STRCD LDQ- CURINP,I_^1_%STA- (ZERO),Q_$STORE CODE IN INPUT SLOT._^1_%LDQ- EWES,I_^1_%INP 1_^1_%NOP 0_^1_%STA- ESTAT2,I_^1_%LDQ- ADCEQP,I_^1_%INP 1_^1_%NOP 0_^1_%STA- ADCSTS,I_^1_%LDA* LOGREJ_'GET CODE TO LOG_^1_%LDQ- ELU,I_^1_%QLS 6_^1_%AAQ Q_^1_%RTJ LOG_^1_%LDA- ESTAT1,I_$CLEAR INITIALIZAT+ON FLAG, SET V FIELD_^1_%AND =N$1FB€€F_^1_%ADD- H8000_^1_%STA- ESTAT1,I_^1_%RAO- ERFLG,I_%SET ERROR FLAG._^1_%RAO- ECCOR,I_%BUMP LIST ADDRESS._^1_%RAO- CURINP,I_$BUMP USERS BUFF. ADDRESS._^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_^1_%SAP DONE_)SKIP IF DONE._^1_%JMP* NXT_^1DONE_!JMP* CRQST_^1_%SPC 4_^1****************************************************_^1*_$ERROR ENTRY_@*_^1*************************************************€V***_^1E1536 STQ- I_,ERROR ENTRY_6**MSOS 4.1**_^1_%CLR Q_,TIME OUT CODE_^1_%STQ* LOGREJ_^1_%SET A_,TURN OFF CLOCK_^1_%STA- EDCLK,I_^1_%LDA* TIMCD_(TIMEOUT CODE._^1_%JMP* STRCD_^1TIMCD NUM $8000_(TIME OUT ERROR CODE_384*2543_^1MUXREJ NUM $8001_(INT REJ CODE_^1ADCREJ NUM $8002_(EXJ REJ CODE_^1TEMP1 NUM 0_^1LOGREJ NUM 0_^1_%END_]_^__ VPD1544A CSY/ B20 P€1_%NAM D1544A_'DECK-ID B20 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$CALL FORMAT_^1*_)Q=POINT NUMBER_^1*_'RTJ DISB_^1*_)A=VALUE_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_%CALL DIRD(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$ENTRY POINT€€S AND EXTERNALS_^1_%ENT DISB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT DIRD_)FORTRAN ENTRY_^1_%EXT GETD_)ENTRY IN BUFEXC_^1_%EXT* DICRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* DIBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)€€_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%€€EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_€€%EQU H2000($30)_^1_%EQU ZERO($22)_^1_%SPC 4_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1DISB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDA* DISB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVA€€L,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1DIRD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDQ* DIRD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_+MAKE INDEX ZERO€€ BASED_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA DICRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*OK_^1_%JMP* DR14_)ERROR_^1DR4_"LDQ- IREC,I_€€'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE I/O_^1_%RTJ GETD_)GET VALUE FROM VALUE BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDQ- IREC,I_^1_%LDQ- WES,Q_(GET WES FOR FIRST STATION_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%INP REJ-*_(DO INPUT_^1_%JMP* DR10_)GOOD INPUT_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1_%JMP* D€€R14_^1DR10_!STA- AREG,I_'SAVE DATA IN A-VOL_^1_%LDQ DIBUF_(=DATA BUFFER ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* DISB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$€jSET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (DISB)_'RETURN_^1DR16_!LDQ- IVAL,I_'=ADDRESS OF VALUE WORD_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$RETURN VALUE_^1_%LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* DIRD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (DIRD)_'RETURN_^1_%END_]_^__ jPD1547A CSY/ B21 P€1_%NAM D1547A_'DECK-ID B21 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$CALL FORMAT_^1*_*Q=POINT NUMBER_^1*_'RTJ CTSB_^1*_*A=VALUE_^1*_*Q=0_#NO ERROR_^1*_*Q=$8000 BAD INDEX_^1*_*Q=$8001 REJECT_^1*_*Q=$8003 NOT INITIALIZED , BAD DATA_^1*_'CALL(INDEX,IVAL€€,IERR)_^1_%SPC 4_^1*_$DIAGNOSTIC CALL FORMAT--OPERATES I/O DIRECT_^1*_*Q=POINT NUMBER_^1*_'RTJ CTDG_^1*_*A=VALUE_^1*_*Q=0_#NO ERROR_^1*_*Q=$8000 BAD INDEX_^1*_*Q=$8001 REJECT_^1*_*Q=$8003 SCAN ALREADY ON_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT CTSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT CTRD_*FORTRAN ENTRY_^1_%ENT CTDG_)DIAGNOSTIC ENTRY_^1_%EXT GETD_)ENTRY IN BUFEXC_^1_%EX€€T* CTCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* CTBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%EXT* CTUNIT_'UNITS OF TIME DELAY FOR SCAN_^1_%EXT* CTDELY_'TIME DELAY FOR SCAN_^1_%EXT E15721_'1572 W-E-S FOR FUNCTION_^1_%EXT* CTMULT_'1572 MULTIPLIER FOR COUNTER GATE_^1_%EXT H15721_'1572 HISTORY WORD_^1_%SPC 4_^1*_$VOL€€ATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_€€^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%EQU DIAG(13)_$13 DIAGNOSTIC ENTRY FLAG_^1_%EJT_]_^1*_$CONTROL RECORD REFERENCES_^1_%EQU TYPLU(2)_$DEVICE TYPE_^1_%EQU WES(3)_'WES COCE FOF FIRST STATION_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU ZERO($22)_^1_%EQ€€U H2000($30)_^1_%EQU AMONI($F4)_^1_%EQU H7FFF($42)_^1_%EQU H8000($32)_^1_%EQU HFFDF($38)_^1_%EQU H0020($28)_^1_%EQU HFF7F($3A)_^1_%EQU ADISP($EA)_^1_%EJT_]_^1****************************************************_^1*_)ASSEMBLY LANGUAGE ENTRY POINT_**_^1****************************************************_^1CTSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDA* CTSB_^1_%€€STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%ENA 0_^1_%STA- DIAG,I_'CLEAR DIAG ENTRY FLAG_^1DR1_"INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS= 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_*DIAGNOSTIC ENTRY_6*_^1****************************************************_^1CTDG_!NUM 0_^1_%IIN 0_^1_%RTJ-€€ (VOLA)_^1_%NUM 14_^1_%LDA* CTDG_^1_%STA- IRETN,I_^1_%EIN 0_^1_%RAO- DIAG,I_'SET ENTRY FLAG_^1_%JMP* DR1_^1_%SPC 4_^1****************************************************_^1*_*FORTRAN ENTRY POINT_3*_^1****************************************************_^1CTRD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDQ* CTRD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PIC€€K UP PARANETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1_%ENA 0_^1_%STA- DIAG,I_'CLEAR DIAG ENTRY FLAG_^1DR2_"LDA CTCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%MAKE INDEX TO DATA BUFFER_^1_%ENA 0_^1_%STA- ETEMP,I_€€%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*0K_^1_%JMP* DR16_)ERROR, BAD INDEX_^1DR4_"LDQ- IREC,I_'IS I/0 REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE_^1_%RTJ GETD_^1_%JMP* DR16_)FINISH AND RETURN_^1DR8_"LDA- DIAG,I_'IS DIAGNOSTIC ENTRY_^1_%SAZ DR9_*NO_^1_%LDA* INITL_(IS SCAN ON_^1_%SAN DR8A_)YES_^1_%JMP* DR20_)NO- GO ON_^1DR8A_!LDA =N$8003_%SET ERROR_^1€€_%STA- ETEMP,I_^1_%JMP* DR14_^1DR9_"LDQ- IREC,I_'IS ERROR FLAG SET_^1_%LDA- TYPLU,Q_^1_%SAP DR10_)NO_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR_^1DR10_!LDQ CTBUF_(MAKE INDEX_^1_%ADQ- ITEMP,I_^1_%LDA- (ZERO),Q_$GET VALUE_^1_%STA- AREG,I_'SAVE_^1_%LDA* INITL_(IS DRIVER INITIALIZED_^1_%SAZ DR12_)NO_^1_%JMP* DR16_)YES_^1_%SPC 2_^1**************************************************€€**_^1*_*INITIALIZE SCAN_7*_^1****************************************************_^1DR12_!LDA- $EF_*INITIALIZE DRIVER_^1_%ADD =N$5200_^1_%STA- REQST,I_^1_%LDA =XDR50_^1_%STA- COMP,I_^1_%LDA- I_,MAKE PARAM LIST ADDRS FOR INDIR REQST_^1_%INA REQST_^1_%IIN 0_^1_%STA* DR14+2_^1DR14_!RTJ- (AMONI)_%START DRIVER I/0_^1_%NUM $2000_^1_%NUM 0_,ADDRESS OF PARAMETERS_^1_%RAO* INITL_(SET €€INITIACIZATION FLAG_^1_%LDA =N$8003_%SET ERROR DATA BAD_^1_%STA- ETEMP,I_^1_%RTJ* SYNC_^1_%SPC 2_^1DR16_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR18_)FORTRAN_^1_%IIN 0_,ASSEMBLY RETURN_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* CTSB_^1_%LDQ- ETEMP,I_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (CTSB)_^1DR18_!LDQ- IVAL,I_'FORTRAN RETURN_^1_%LDA- AREG,I_^1_%ST€€A- (ZERO),Q_$RETURN VALUE_^1_%LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_^1_%STA* CTRD_)RESTORE RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (CTRD)_^1INITL NUM 0_,INITIALIZATION FLAG_^1SRGFLG NUM 0_^1DR20_!LDA* SRGFLG_'IS SRG INITIALIZED_^1_%SAN DR22_)YES_^1_%RTJ* SYNC_^1_%RAO* SRGFLG_^1DR22_!LDQ- IREC,I_^1_%LDQ- WES,Q_(STATION€€ ADDRESS_^1_%ADQ- INDEX,I_^1_%INP REJX-*_^1_%JMP* DR24_^1REJX_!NOP 0_^1_%LDA =N$8001_%SET REJECT ERROR_^1_%STA- ETEMP,I_^1_%JMP* DR14_^1DR24_!STA- AREG,I_^1_%JMP* DR14_^1_%SPC 2_^1****************************************************_^1*_*INITIALIZE 1572_7*_^1****************************************************_^1SYNC_!NUM 0_^1_%LDA H15721_'ENABLE SRG SYNC IN 1572_^1_%AND- HFF€€DF_^1_%ADD- H0020_^1_%STA H15721_^1_%LDA E15721_'INITIALIZE 1572_^1_%AND- HFF7F_(MASK OUT FUNCTION BIT_^1_%TRA Q_^1_%LDA CTMULT_^1_%OUT REJA-*_^1_%JMP* DR16_^1REJA_!NOP 0_^1_%LDA =N$8001_%REJECT ERROR_^1_%STA- ETEMP,I_^1_%JMP* (SYNC)_^1_%EJT_]_^1****************************************************_^1*_*READ COUNTERS AND BUFFER DATA_)*_^1**************************************€€**************_^1DR50_!LDA =XPSDVOL_^1_%STA- I_,PSEUDO VOLATILE POINTER_^1_%LDA CTCRS_^1_%STA- IREC,I_'CONTROL RECORD ADDRESS_^1_%ENQ 0_,INITIAL INDEX_^1_%STQ- ITEMP,I_%DATA BUFFER INDEX_^1_%STQ- INDEX,I_%POINT INDEX_^1_%LDQ- IREC,I_^1DR51_!LDA- TYPLU,Q_%CLEAR ERROR FLAG AT START OF SCAN_^1_%AND- H7FFF_^1_%STA- TYPLU,Q_^1_%LDQ- (ZERO),Q_$GWT NEXT CONTROL RECORD_^1_%INQ 0_^1_%SQ€€Z DR52_)SENSE DONE_^1_%JMP* DR51_^1DR52_!RTJ FINDCR_'GET CONTROL RECORD_^1_%JMP* DR54_)OK_^1_%JMP* DR60_)LAST IS DONE_^1DR54_!LDQ- IREC,I_'IS I/0 ON REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR56_)NO_^1_%JMP* DR59_^1DR56_!LDQ- IREC,I_^1_%LDQ- WES,Q_(FIRST STATION W-E-S_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%INP REJ-*_(DO INPUT_^1_%JMP* DR58_)GOOD_^1REJ_"NOP 0_,REJECT_^1_%LDQ- IR€€EC,I_^1_%LDA- TYPLU,Q_^1_%AND- H7FFF_(SET ERROR FLAG IN CR_^1_%ADD- H8000_^1_%STA- TYPLU,Q_^1_%JMP* DR59_^1DR58_!STA- AREG,I_'SAVE VALUE_^1_%LDQ CTBUF_(STORE VALUE IN DATA BUFFER_^1_%ADQ- ITEMP,I_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_^1DR59_!RAO- ITEMP,I_^1_%RAO- INDEX,I_^1_%JMP* DR52_^1PSDVOL BZS PSDVOL(15)_"PSEUDO VOLATILE_^1DR60_!LDA CTUNIT_'UNITS OF DELAY_^1_%ALS 4_^1_%ADD- $EF€Π_^1_%ADD =N$5000_^1_%STA* DR62+1_^1_%LDA CTDELY_'TIME DELAY_^1_%STA* DR62+3_^1DR62_!RTJ- (AMONI)_%RESTART SCAN AFTER TIME DELAY_^1_%NUM 0_^1_%ADC DR50_^1_%NUM 0_,TIME DELAY_^1_%JMP- (ADISP)_^1_%END_]_^__ΠPD1553A CSY/ B22 P€1_%NAM D1553A_'DECK-ID B22 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$CALL FORMAT_^1*_)Q15=0_^1*_*Q=OUTPUT WORD INDEX 1 TO N_^1*_)Q15=1_^1*_*Q=OUTPUT BIT INDEX 1 TO N_^1*_-BITS NUMBERED RIGHT TO LEFT IN OUTPUT WORD_^1*_-***DATA BUFFER REQUIRED FOR B€€IT ADDRESSING***_^1*_)A=VALUE OF OUTPUT WORD OR A-ZERO = NEW BIT STATE_^1*_'RTJ DOSB_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_*=$8002_$NO DATA BUFFER FOR BIT ADDRESSING_^1*_]_^1*_%CALL DORD(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT DOSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT DORD_)FORTRAN ENTRY_^1_%EXT PUTD_)ENTRY IN BUFEXC_^1_%EXT* €€DOCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* DOBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05€€ CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%EQU BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1€€*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU H0010($27)_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%€€EQU MASKT($33)_^1_%EJT_]_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1DOSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDA* DOSB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRES€€S = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1DORD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDQ* DORD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1€€_%RTJ ABSAD_^1_%STQ- IVAL,I_^1_%LDA- (ZERO),Q_^1_%STA- AREG,I_'PUT VALUE INTO A-VOL_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA DOCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%SAM DR2A_)BIT ADDRESS_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%JMP* DR2C_^1DR2A_!CLR Q_,MAKE INDEXES FOR BIT ADDRESSING_^1_%AND- H7FFF_^1_%DVI- H0010_^1_%STA-€€ ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%STA- INDEX,I_%SAVE STATION INDEX_^1_%STQ- BITX,I_'SAVE BIT INDEX_!0 TO 15_^1_%LDQ DOBUF_(IS DATA BUFFER PRESENT_^1_%SQN DR2B_^1_%LDA =N$8002_%ERROR, NO DATA BUFFER_^1_%STA- ETEMP,I_^1_%JMP* DR14_^1DR2B_!ADQ- ITEMP,I_%INDEX TO DATA BUFFER_^1_%LDA- (ZERO),Q_$HISTORY DATA WORD_^1_%LDQ- BITX,I_'BIT INDEX_^1_%AND- MASKT,Q_%MASK OUT SPECIFIED BIT_^€€1_%LDQ- AREG,I_'NEW BIT STATE_^1_%STA- AREG,I_'SAVE MASKED HISTORY WORD_^1_%SQZ DR2C_)LEAVE BIT = 0_^1_%LDQ- BITX,I_^1_%LDA- AREG,I_^1_%EOR- ONEBIT,Q_$SET BIT_^1_%STA- AREG,I_'SAVE NEW OUTPUT WORD_^1DR2C_!ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*OK_^1_%JMP* DR14_)ERROR_^1DR4_"LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*N€€OT REMOTE I/O_^1_%RTJ PUTD_)PUT VALUE INTO BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDA- AREG,I_'LOAD DATA TO OUTPUT_^1_%LDQ- IREC,I_^1_%LDQ- WES,Q_(GET WES FOR FIRST STATION_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%OUT REJ-*_(DO OUTPUT_^1_%JMP* DR10_)GOOD_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1_%JMP* DR14_^1DR10_!LDQ DOBUF_(=DATA BUFFER€€ ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* DOSB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (DOSB)_'RETURN_^1DR1€Κ6_!LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* DORD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (DORD)_'RETURN_^1_%END_]_^__ ΚPD1555A CSY/ B23 P€1_%NAM D1555A_'DECK-ID B23 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$CALL FORMAT WORD ADDRESSING_^1*_%DATA BUFFER OPTIONAL_^1*_]_^1*_)Q15=0_^1*_+Q=OUTPUT WORD INDEX 1 TO N_^1*_+A=OUTPUT WORD VALUE_^1*_]_^1*_]_^1*_$CALL FORMAT BIT ADDRESSING NON-MOMEN€€TARY RELAYS_^1*_'DATA BUFFER REQUIRED_^1*_]_^1*_)Q15=1_^1*_+Q=OUTPUT BIT INDEX 1 TO N_^1*_-BITS NUMBERED RIGHT TO LEFT IN OUTPUT WORD_^1*_+A=0 CLEAR BIT_^1*_+A=1 SET BIT_^1*_]_^1*_]_^1*_$CALL FORMAT BIT ADDRESSING MOMENTARY RELAYS_^1*_%DATA BUFFER OPTIONAL_^1*_%M FLAG IN CONTROL RECORD SET_^1*_]_^1*_)Q15=1_^1*_+Q=OUTPUT BIT INDEX_^1*_+A=NOT USED_^1*_]_^1*_]_^1*_'RTJ ROSB_^1*_)Q=€€0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_*=$8002_$NO DATA BUF FOR BIT ADDRESSING_^1*_6NON MOMENTARY RELAYS_^1*_]_^1*_%CALL RORD(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT ROSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT RORD_)FORTRAN ENTRY_^1_%EXT PUTD_)ENTRY IN BUFEXC_^1_%EXT* ROCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* ROBUF_(ADDRESS OF DATA€€ BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_€€^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%EQU BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%EQU NBRS(1)_%NUMBER OF P€€OINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H1000($2F)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU H0010($27)_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU MASKT($33)_^1_%EJT_]_^1**********************€€******************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1ROSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDA* ROSB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1******************€€**********************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1RORD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDQ* RORD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_^1_%LDA- (ZERO),Q_^1_€€%STA- AREG,I_'PUT VALUE INTO A-VOL_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA ROCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE = 0_^1_%LDA- INDEX,I_^1_%SAM DR4_*BIT ADDRESS_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%ALS 1_,MAKE INDEX TO 8 BIT OUTPUT WORDS_^1_%STA- INDEX,I_^1_%RTJ FINDCR_^1_%JMP* DR14_^1_%JMP* DR€€24_)ERROR_^1DR4_"CLR Q_,MAKE INDEXES FOR BIT ADDRESSING_^1_%AND- H7FFF_^1_%DVI- H0010_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%ALS 1_,MAKE INDEX TO 8 BIT OUTPUT WORDS_^1_%STA- INDEX,I_%SAVE STATION INDEX_^1_%STQ- BITX,I_'SAVE BIT INDEX_!0 TO 15_^1_%RTJ FINDCR_^1_%JMP* DR6_^1_%JMP* DR24_)ERROR_^1DR6_"LDQ- IREC,I_'ARE RELAYS MOMENTARY_^1_%LDA- TYPLU,Q_^1_%AND- H1000_^1_%SAZ D€€R8_*NO_^1_%LDQ- BITX,I_^1_%LDA- ONEBIT,Q_$GET OUTPUT BIT_^1_%STA- AREG,I_^1_%JMP* DR14_^1DR8_"LDQ ROBUF_(IS DATA BUFFER PRESENT_^1_%SQN DR10_^1_%LDA =N$8002_%ERROR, NO DATA BUFFER_^1_%STA- ETEMP,I_^1_%JMP* DR24_^1DR10_!ADQ- ITEMP,I_%INDEX TO DATA BUFFER_^1_%LDA- (ZERO),Q_$HISTORY DATA WORD_^1_%LDQ- BITX,I_'BIT INDEX_^1_%AND- MASKT,Q_%MASK OUT SPECIFIED BIT_^1_%LDQ- AREG,I_'NEW B€€IT STATE_^1_%STA- AREG,I_'SAVE MASKED HISTORY WORD_^1_%SQZ DR14_)LEAVE BIT = 0_^1_%LDQ- BITX,I_^1_%LDA- AREG,I_^1_%EOR- ONEBIT,Q_$SET BIT_^1_%STA- AREG,I_'SAVE NEW OUTPUT WORD_^1DR14_!LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR16_)NOT REMOTE I/O_^1_%RTJ PUTD_)PUT VALUE INTO BUFFER_^1_%JMP* DR24_)FINISH AND RETURN_^1DR16_!LDQ ROBUF_(=DATA BUFFER ADDRESS€€_^1_%SQN DR18_^1_%JMP* DR20_)=0, DO NOT STORE_^1DR18_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR20_!LDQ- IREC,I_'OUTPUT LOW 8 BITS_^1_%LDQ- WES,Q_^1_%ADQ- INDEX,I_^1_%LDA- AREG,I_^1_%OUT REJ-*_^1_%RAO- INDEX,I_%BUMP INDEX FOR UPPER 8 BITS_^1_%RTJ FINDCR_^1_%JMP* DR22_^1_%CLR Q_,RELAYS FOR UPPER 8 BITS NOT INSTALLED_^1_%STQ- ETEMP,€€I_%CLEAR ERROR RETURNED BY FINDCR_^1_%JMP* DR24_^1DR22_!LDQ- IREC,I_'OUTPUT HIGH 8 BITS_^1_%LDA- TYPLU,Q_%ABORT IF REMOTE_^1_%AND- H2000_^1_%SAZ DR23_)NOT REMOTE_^1_%JMP* DR24_^1DR23_!LDQ- WES,Q_^1_%ADQ- INDEX,I_^1_%LDA- AREG,I_^1_%ARS 8_^1_%OUT REJ-*_^1_%JMP* DR24_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1DR24_!LDA- IVAL,I_'CHECK CALLER€€_^1_%SAN DR26_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA ROSB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP (ROSB)_'RETURN_^1DR26_!LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA RORD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP (RORD)_'R€ETURN_^1_%END_]_^__ PD1566A CSY/ B24 P€1_%NAM D1566A_'DECK-ID B24 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$CALL FORMAT_^1*_)A=VALUE_"$000(10 MA) TO $FFF(50 MA)_^1*_)Q=POINT NUMBER_^1*_'RTJ AOSB_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_%CALL AORD(INDEX,IVAL,IER€€R)_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT AOSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT AORD_)FORTRAN ENTRY_^1_%EXT PUTD_)ENTRY IN BUFEXC_^1_%EXT* AOCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* AOBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG€€(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST€€(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H800€€0($32)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU ZERO($22)_^1_%EQU H0004($25)_^1_%EQU H0005($43)_^1_%EQU H0FFF($E)_^1_%EQU DACBIT($2F)_^1_%SPC 4_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1AOSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDA* AOSB_^1_%ST€€A- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1AORD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDQ* AORD_^1_%STQ- IRE€€TN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_+MAKE INDEX ZERO BASED_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%LDA- (ZERO),Q_^1_%STA- AREG,I_(VALUE TO A-REG_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA AOCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- AREG,I_'C€€ONVERT VALUT TO OUTPUT FORM_^1_%ARS 3_^1_%AND- H0FFF_^1_%CLR Q_^1_%MUI- H0004_^1_%DVI- H0005_^1_%ADD =N$66_^1_%STA- AREG,I_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%CLR Q_^1_%DVI- H0004_(MAKE STATION ADDRESS_^1_%STA- INDEX,I_^1_%LDA- AREG,I_^1_%ADD- DACBIT,Q_$ADD CHANNEL ADDRESS_^1_%STA- AREG,I_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^€€1_%JMP* DR4_*OK_^1_%JMP* DR14_)ERROR_^1DR4_"LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE I/O_^1_%RTJ PUTD_)PUT VALUE INTO BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDQ- IREC,I_^1_%LDQ- WES,Q_(GET WES FOR FIRST STATION_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%OUT REJ-*_(DO OUTPUT_^1_%JMP* DR10_)GOOD INPUT_^1REJ_"NOP 0_,REJECT_^1_€€%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1_%JMP* DR14_^1DR10_!LDQ AOBUF_(=DATA BUFFER ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%AND- H0FFF_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* AOSB_^1€@_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AOSB)_'RETURN_^1DR16_!LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* AORD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AORD)_'RETURN_^1_%END_]_^__ @PD1590 CSY/ B25 P€1_%NAM D1590_(DECK-ID B25 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$THIS DRIVER SUPPORTS UP TO FIVE 1590 REMOTES_^1*_$EACH 1590 REQUIRES SEPARATE INT LINE, RESPONSE ROUTINE,_^1*_$AND THREADED PDTS._^1_%SPC 2_^1*_$THIS DRIVER SUPPORTS THE FOLLOWING D€€EVICES CONNECTED_^1*_$TO A REMOTE IOM SUBSYSTEM_^1*_*1544 DIGITAL INPUTS_$TYPE 1_^1*_*1553 DIGITAL OUTPUTS_#TYPE 2_^1*_*1555 RELAY OUTPUTS_%TYPE 2_^1*_*1547 COUNTERS_+TYPE 4_^1*_*1501/1525 ANALOG INPUTS TYPE 6_^1*_,1501 STATIONS IN ONE PDT MUST BE CONTIGUOUS_^1*_*1536/1525 ANALOG INPUTS TYPE 7_"ONE ONLY PER 1590_^1*_,MUST BE ON REMOTE INTERRUPT LINE 0_^1*_*1566 ANALOG OUTPUTS_$TY€€PE 8_^1*_*1572 TIMER TO GATE 1547 COUNTERS_^1_%SPC 2_^1*_$STATION STATUS READ OR FUNCTION WRITE IS EXECUTED WHEN_^1*_$BIT 15 OF STATION ADDRESS IS SET AND LU IS FOR DI OR DO._^1_%SPC 2_^1*_$THE STATUS RETURNED VIA ESTAT2 ON ERROR IS-_^1*_*$7FFF = LOCAL 1590 REJECT_^1*_*$0000 = TIMEOUT_^1*_*OTHERWISE ESTAT2 EQUALS 1590 STATUS_^1_%SPC 2_^1*_$ANALOG INPUT ERRORS RETURNED IN DATA WO€€RD ._^1*_$V FIELD NOT SET WHEN THESE ERRORS OCCUR ON ANALOG INPUT_^1*_*$8000 TIMEOUT_^1*_*$8001 EXTERNAL REJECT ON ADC OR MUX_^1*_*$8002 INTERNAL REJECT ON ADC OR MUX_^1_%SPC 2_^1*_$ANALOG OUTPUT IN CURRENT MODE_^1*_*VALUE IN REQUEST BUFFER IS DAC HARDWARE VALUE_^1*_*PLUS CHANNEL ADDRESS_^1*_,BIT 12=CHANNEL 1_^1*_,BIT 13=CHANNEL 2_^1*_,BIT 14=CHANNEL 3_^1*_,BIT 15=CHANNEL 4_^1*€€_*HARDWARE VALUES ARE_^1*_,0 0/0 FS=$66_^1*_,100 0/0 FS=$1FF_^1_%SPC 2_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT I1590_(INITIATOR_^1_%ENT C1590_(CONTINUATOR_^1_%ENT E1590_(ERROR TIME OUT_^1_%EXT LOG_*ENGINEERING ERROR LOG_^1_%SPC 3_^1*_$LOCORE REFERENCES_^1_%EQU AFNR($B5)_#ENTRY TO FIND NEXT REQUEST_^1_%EQU ACOMPC($B6)_#-_!- COMPLETE REQUEST_^1_%EQU ADISP($EA)_$-€€_!- DISPATCHER_^1_%EQU AMONI($F4)_^1_%EQU H40($29)_^1_%EQU HFF($A)_^1_%EQU H80($2A)_^1_%EQU H8000($32)_^1_%EQU ZERO($22)_^1_%EQU HFF7F($3A)_^1_%EQU H2000($30)_^1_%EQU H1000($2F)_^1_%EQU H100($2B)_^1_%EQU H4000($31)_^1_%EQU H1FFF($F)_^1_%EQU H200($2C)_^1_%EQU H7FFF($42)_^1_%EQU H001F(7)_^1_%EQU H0010($27)_^1_%EQU HBFFF($41)_^1_%EQU H0004($25)_^1_%EQU H0008($26)_^€€1_%EQU HFFFE($33)_^1*_]_^1_%EQU MULT(1000)_^1_%EQU CLCKVA(1)_^1_%SPC 3_^1*_$PHYSICAL DEVICE TABLE REFERENCES_^1_%EQU EDCLK(4)_$04 DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_'05 LOGICAL UNIT_^1_%EQU EPTR(6)_%06 ADDRESS OF PARAMETER LIST_^1_%EQU EWES(7)_%07 W-E-S OF LCU FOR DATA_^1_%EQU EREQST(8)_#08 REQUEST STATUS_^1_%EQU ESTAT1(9)_#09 DRIVER STATUS_^1_%EQU ECCOR(10)_#10 CURR€€ENT LOCATION OF STATION ADDRESS_^1_%EQU ELSTWD(11)_"11 LAST LOCATION PLUS 1 OF STATN ADDRESS_^1_%EQU ESTAT2(12)_"12 DEVICE STATUS_^1_%EQU MASLGN(13)_"13 RESERVED_^1_%EQU MASSEC(14)_"14 RESERVED_^1_%EQU RETURN(15)_"15 RESERVED FOR FNR_^1_%EQU ERCONT(16)_"16 ERROR COUNTER_^1_%EQU DATBUF(17)_"17 DATA BUFFER CURRENT ADDRESS_^1_%EQU MODTYP(18)_"18 DEVICE TYPE, AI WAIT FL€€AG, INITL FLAG_^1_%EQU STAN1(19)_#19 RCIU STATION ADDRESS PRIMARY_^1_%EQU STAN2(20)_#20 RCIU STATION ADDRESS SECONDY_^1_%EQU ONECPL(21)_"21 CONVERT TO ONES COMPLEMENT FACTOR_^1_%EQU ERETNX(22)_"22 RETURN ADDRESS IN DRIVER_^1_%EQU IADC(23)_$23 1536 PDT LOCATION_^1_%EQU REQTHD(24)_"24 INTERNAL DRIVER REQST THREAD_^1_%SPC 4_^1*_$UNSOLICITED INTERRUPT STACK REFERENCES_^1€€_%EQU WEMS(0)_%1590 W-E-M-S_^1_%EQU STKI(1)_%PDT INDEX_^1_%EQU STKUI(2)_$NEW UI STATUS_^1_%EQU STKUIP(3)_#PROCESSED UI STATUS_^1_%EJT_]_^1****************************************************_^1*_)INITIATOR ENTRY_8*_^1****************************************************_^1_%SPC 2_^1I1590 STQ- I_,PDT ADDRESS TO I_^1_%LDQ BUSY_)IS DRIVER BUSY_^1_%SQZ I2A_*NO_^1I1_#LDA- REQTHD,€€I_$PUT NEW REQST ON END OF THREAD_^1_%INA 0_,IS THIS END_^1_%SAZ I2_+YES_^1_%TRA Q_,NO KEEP LOOKING_^1_%JMP* I1_^1I2_#LDA- I_,PUT NEW REQUEST ON THREAD_^1_%STA- REQTHD,I_^1_%JMP- (ADISP)_^1I2A_"RTJ- (AFNR)_'FIND NEXT REQUEST FOR THIS LU_^1_%JMP* I2B_*NO REQUESTS FOR THIS LU_^1_%JMP* I3_^1I2B_"LDA- REQTHD,I_$FIND ANY MORE REQUESTS FOT THIS DRIVER_^1_%INA 0_,IS REQUEST THREAD BU€€SY_^1_%SAN I2C_*YES_^1_%JMP- (ADISP)_%NO MORE REQUESTS FOR THIS DRIVER_^1I2C_"ENQ -0_^1_%STQ- MASLGN,I_$CLEAR THREAD WORD_^1_%STA- I_,SET POINTER TO NEW LU_^1_%JMP* I2A_^1I3_#LDA- I_,SET DRIVER BUSY WORD_^1_%STA BUSY_^1_%LDA- ELSTWD,I_$INITIALIZE DATA BUFFER ADDRESS_^1_%STA- DATBUF,I_^1_%CLR A_,CLEAR ERROR COUNTER_^1_%STA- ERCONT,I_^1_%LDQ- EPTR,I_'CHECK FOR MOTION REQUEST_^1_%€€LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- H001F_^1_%INA -14_^1_%SAN I3AA_)NOT MOTION_^1_%JMP COMREQ_^1I3AA_!LDQ =XISTACK_$IS THIS REMOTE INITIALIZED_^1I3A_"LDA- (ZERO),Q_^1_%SAN I3B_^1_%JMP INREM_(END, THIS REMOTE NOT INITIALIZED_^1I3B_"SUB- EWES,I_'IS THIS ENTRY FOR THIS REMOTE_^1_%SAZ I4_+YES, NO INITIALIZATION REQD_^1_%INQ 4_^1_%JMP* I3A_*LOOK AT NEXT ENTRY_^1_%SPC 2_^1********€€********************************************_^1*_)DECODE DEVICE TYP TO START I/O OPER_#*_^1****************************************************_^1_%SPC 2_^1I4_#LDA- MODTYP,I_$GET DEVICE TYPE_^1_%AND- HFF_^1_%INA -1_+IS DIG IN_^1_%SAZ I5_+YES_^1_%INA -2_+IS COUNTER_^1_%SAN I6_+NO_^1_%LDA- MODTYP,I_$CHECK INITIALIZATION FLAG FOR COUNTERS_^1_%AND- H4000_^1_%SAN I5_+NONE REQD_^1_€€%JMP INCNT_(INITIALIZE COUNTERS_^1I5_#JMP* OPER3_(START I/O FOR DI OR CNTRS_^1I6_#INA -3_+IS ANALOG INPUT TYPE 6_^1_%SAZ I8_+YES_^1_%INA -1_+IS ANALOG INPUT TYPE 7_^1_%SAN OPER1_(NO_^1_%LDA- MODTYP,I_$ANALOG INPUT_^1_%AND- H7FFF_(CLEAR WAIT FLAG_^1_%STA- MODTYP,I_^1_%AND- H4000_(CHECK INITIALIZE FLAG FOR ANALOG INPUT_^1_%SAN OPER1_(NO INITIALIZATION REQD_^1_%JMP INANA_(INITI€€ALIZE MUX AND ADC_^1I8_#LDA- MODTYP,I_$IS AI TYPE 6 INITIALIZED_^1_%AND- H4000_^1_%SAN OPER1_(YES_^1_%JMP INANA_(NO_^1_%EJT_]_^1****************************************************_^1*_/I/O OPERATION 1_1*_^1****************************************************_^1OPER1 LDQ- DATBUF,I_$START OPERATION 1_^1_%LDA- (ZERO),Q_$GET DATA WORD_^1_%STA* TEMP_^1_%LDA- MODTYP,I_$IS ANALOG INP€€UT TYPE 6 (1501/1525)_^1_%AND- HFF_^1_%INA -6_^1_%SAZ OP14_)YES_^1_%INA -1_+IS ANALOG INPUT TYPE 7 (1536/1525)_^1_%SAN OP12_)NO_^1_%JMP* OP18_)YES_^1OP12_!LDA* TEMP_^1_%LDQ- EWES,I_'LCU ADDRESS_^1_%RTJ OUT_*LOAD DATA_^1_%LDQ- ECCOR,I_^1_%LDA- (ZERO),Q_$STATION ADDRESS_^1_%LDQ- EWES,I_^1_%JMP* OP19_^1OP14_!LDQ- ECCOR,I_%TYPE 6 AI_^1_%LDA- (ZERO),Q_$CHANNEL INDEX_^1_%CLR Q_^1_%€€DVI- H0010_^1_%STA* TEMP1_^1_%TRQ A_^1_%LDQ- EWES,I_'LOAD CHANNEL ADDRESS_^1_%RTJ OUT_^1_%LDA- STAN2,I_^1_%ADD* TEMP1_(MUX WES_^1_%JMP* OP19_^1OP18_!LDQ- ECCOR,I_%TYPE 7 AI_^1_%LDA- (ZERO),Q_$AI CHANNEL ADDRESS_^1_%LDQ- EWES,I_'LCU ADDRESS_^1_%RTJ OUT_*LOAD LCU WITH DATA_^1_%LDA- STAN2,I_%MUX STATION ADDRESS_^1OP19_!SAP OP19A_(NORMAL DATA WRITE_^1_%AND- H7FFF_(FUNCTION WRITE_^1€€_%ALS 2_^1_%INA 2_,WRITE CYCLE_^1_%ADD- H200_)STATION FUNCTION_^1_%JMP* OP19B_^1OP19A ALS 2_^1_%INA 2_,WRITE CYCLE_^1OP19B ADQ- H80_*LCU FUNCTION_^1_%RTJ OUT_^1_%LDA =XOPER2_%SET UP RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP* FIN_*WAIT FOR REPLY_^1TEMP1 NUM 0_^1_%SPC 4_^1****************************************************_^1*_)I/O OPERATION 2_7*_^1***********************€€*****************************_^1_%SPC 2_^1OPER2 LDA- MODTYP,I_$START OPERATION 2_^1_%AND- HFF_^1_%INA -6_+IS ANALOG INPUT TYPE 6_^1_%SAN OP20_)NO_^1_%JMP* OPER3_(YES_^1OP20_!INA -1_+IS ANALOG INPUT TYPE 7_^1_%SAN OP22_)NO_^1_%LDA- MODTYP,I_$SET WAIT FLAG_^1_%AND- H7FFF_^1_%ADD- H8000_^1_%STA- MODTYP,I_^1_%ENA 0_^1_%STA BUSY_)CLEAR BUSY_^1_%ENA CLCKVA_'START TIMER FOR TYPE €€7 AI_^1_%STA- EDCLK,I_^1_%JMP I2B_*LOOK FOR MORE WORK_^1OP22_!RAO- ECCOR,I_%BUMP CURRENT STATION_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$IS LAST POINT_^1_%SAN OP23_)NO_^1_%JMP* COMREQ_'COMPLETE REQUEST_^1OP23_!RAO- DATBUF,I_$BUMP DATA BUFFER ADDRESS_^1_%JMP* I4_+PROCESS NEXT POINT_^1_%SPC 4_^1****************************************************_^1*_)I/O OPERATION 3_7*_^1***********€€*****************************************_^1_%SPC 2_^1OPER3 LDA- MODTYP,I_$IS DI OR COUNTERS_^1_%AND- HFF_^1_%INA -6_^1_%SAP OP32_)NO IT IS AI_^1_%LDQ- ECCOR,I_%YES_^1_%LDA- (ZERO),Q_$STATION ADDRESS FOR DI OR COUNTERS_^1_%JMP* OP34_^1OP32_!LDA- STAN1,I_%ADC STATION ADDRESS_^1OP34_!SAP OP36_)NORMAL DATA READ_^1_%AND- H7FFF_(STATUS READ_^1_%ALS 2_^1_%INA 1_,READ CYCLE_^1_%AD€€D- H200_)STATION FUNCTION_^1_%JMP* OP38_^1OP36_!ALS 2_^1_%INA 1_,READ CYCLE_^1OP38_!LDQ- EWES,I_'LCU ADDRESS_^1_%ADQ- H80_*FUNCTION BIT_^1_%RTJ OUT_^1_%LDA =XOPER4_%SET RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP* FIN_*WAIT FOR REPLY_^1_%SPC 4_^1****************************************************_^1*_)I/O OPERATION 4_8*_^1****************************************************_^1_%€€SPC 2_^1OPER4 LDQ- EWES,I_'START OPERATION 4_^1_%RTJ INPUT_(READ DATA_^1_%STA* TEMP_^1_%LDA- MODTYP,I_$IS ANALOG INPUT_^1_%AND- HFF_^1_%INA -6_^1_%SAZ OP41_)YES_^1_%INA -1_^1_%SAN OP42_)NO_^1OP41_!RTJ* CONVAI_'CONVERT ANALOG DATA_^1OP42_!LDA* TEMP_)STORE DATA IN DATA BUFFER_^1_%LDQ- DATBUF,I_^1_%STA- (ZERO),Q_^1_%RAO- ECCOR,I_%BUMP CURRENT STATION/CHANNEL_^1_%LDA- ECCOR,I_^1€€_%SUB- ELSTWD,I_$IS LAST POINT_^1_%SAN OP43_)NO_^1_%JMP* COMREQ_'COMPLETE REQUEST_^1OP43_!RAO- DATBUF,I_$BUMP DATA BUFFER ADDRESS_^1_%JMP I4_+PROCESS NEXT POINT_^1TEMP_!NUM 0_^1_%SPC 4_^1FIN_"ENA CLCKVA_'START TIMER_^1_%STA- EDCLK,I_^1_%JMP- (ADISP)_%EXIT, WAIT FOR REPLY INTERRUPT_^1_%SPC 4_^1****************************************************_^1*_)CONVERT ADC READING TO VAL€€UE_+*_^1****************************************************_^1_%SPC 2_^1CONVAI NUM 0_,CORRECT TO ONES COMPLEMENT_^1_%LDA* TEMP_^1_%SAP CON2_^1_%SUB- ONECPL,I_^1CON2_!STA* TEMP_^1_%JMP* (CONVAI)_^1_%EJT_]_^1****************************************************_^1*_)COMPLETE REQUEST_7*_^1****************************************************_^1_%SPC 2_^1COMREQ RTJ- (ACOMPC)_$COMPLE€€TE REQUEST_^1COMR1 ENA 0_,SET DRIVER READY_^1_%STA* BUSY_^1_%LDA* INTFLG_'ANY UNSOLICITED INTERRUPTS_^1_%SAN COMR8_(YES_^1_%JMP I2A_*NO, LOOK FOR NEXT REQUEST_^1COMR8 ENA 1_,SEARCH FOR AI INTERRUPT LINE 0_^1_%RTJ UISRCH_^1_%SAP COM10_(FOUND AI INTERRUPT_^1_%ENA 0_,NONE FOUND_^1_%STA* BUSY_)CLEAR BUSY_^1_%STA* INTFLG_'CLEAR UI INTERRUPT FLAG_^1_%JMP I2A_*GET NEXT REQUEST_^€€1COM10 STQ* STKPTR_'SAVE STACK POINTER_^1_%LDA- STKUIP,Q_$CLEAR AI BIT IN PROCESSED UI WORD_^1_%AND- HFFFE_^1_%STA- STKUIP,Q_^1_%LDQ- IADC,I_'GET 1536 PDT LOCATION_^1_%SQZ COM12_(NO 1536 ON THIS REMOTE_^1_%LDA- MODTYP,Q_$IS THIS 1536 WAITING_^1_%SAM COM14_(YES_^1COM12 JMP* COMR8_(GHOST- CONTINUE SEARCH_^1COM14 STQ- I_,SAVE PDT LOCATION_^1_%STQ* BUSY_^1_%AND- H7FFF_^1_%STA- MOD€€TYP,I_$CLEAR WAIT FLAG_^1_%JMP* OPER3_^1STKPTR NUM 0_^1_%EJT_]_^1****************************************************_^1*_)OUTPUT AND INPUT_7*_^1****************************************************_^1_%SPC 2_^1OUT_"NUM 0_,OUTPUT TO REMOTE IOM_^1_%STA* SAVA_^1_%ENA 0_^1_%STA* RJTCT_(CLEAR REJECT COUNTER_^1OUT2_!LDA* SAVA_^1_%OUT OUT4-*_^1_%JMP* (OUT)_(NO REJECT, RETURN_^1OUT4_!€€JMP* OUT8_)INTERNAL REJECT_^1_%RAO* RJTCT_^1_%LDA* RJTCT_^1_%INA -10_^1_%SAZ OUT6_^1_%JMP* OUT2_^1OUT6_!ENQ 6_,EXTERNAL REJECT CODE_^1_%LDA- H7FFF_^1_%STA- ESTAT2,I_$PLUG STATUS WORD_^1_%JMP* OUT10_^1OUT8_!ENQ 5_,INTERNAL REJECT CODE_^1_%LDA- H7FFF_^1_%STA- ESTAT2,I_$PLUG STATUS WORD_^1OUT10 STQ* SAVQ_^1_%RTJ CLEAR_(CLEAR 1590_^1_%LDQ* SAVQ_^1_%JMP LOGE_^1_%SPC 6_^1INPUT N€€UM 0_,INPUT FROM REMOTE IOM_^1_%INP INP2-*_^1_%JMP* (INPUT)_^1INP2_!JMP* OUT8_^1_%JMP* OUT6_^1RJTCT NUM 0_^1SAVA_!NUM 0_^1SAVQ_!NUM 0_^1BUSY_!NUM 0_^1INTFLG NUM 0_^1_%EJT_]_^1****************************************************_^1*_)CONTINUATOR ENTRY_6*_^1****************************************************_^1_%SPC 2_^1*_$LCU STATUS_^1*_'0-7_!INTERRUPTS FROM REMOTE_^1*_'8_€€#INTERRUPT RECEIVED_^1*_'9-10 00 INTERRUPT_^1*_-01 EXT REJ_^1*_-10 INT REJ_^1*_-11 REPLY_^1*_'11_"TEST MODE_^1*_'12_"REMOTE RECEIVE ERROR_^1*_'13_"LOCAL RECEIVE ERROR_^1*_'14_"LCU BUSY_^1*_'15_"DATA READY_^1_%SPC 2_^1C1590 LDA* BUSY_)GET BUSY PTD_^1_%SAZ C1_+NONE BUSY_^1_%TRA Q_^1C1_#STQ- I_,SET PTD INDEX_^1_%LDQ- EWES,I_'=WES OF LCU_^1_%ADQ- H80_*SET STATUS BIT_^1_%RTJ* INPUT€€_(READ STATUS_^1_%STA- ESTAT2,I_$SAVE STATUS IN LCU PDT_^1_%STA* STATUS_^1_%LDA* IGNORE_'IS IGNORE INTERRUPT FLAG SET_^1_%SAZ C1A_*NO_^1_%JMP- (ADISP)_%YES_^1C1A_"LDA* STATUS_'IS LOCAL RECEIVE ERROR_^1_%AND- H2000_^1_%SAZ C2_+NO LCU RECEIVE ERROR_^1_%JMP CRCERR_'PROCESS CRC ERROR_^1C2_#LDA* STATUS_^1_%AND- H1000_(CHECK RCIU RECEIVE ERROR_^1_%SAZ C4_+NO RCIU RECEIVE ERROR_^1_%EN€€A 2_^1_%STA* ERTYP_(SAVE ERROR TYPE_^1_%JMP* ERROR_(PROCESS ERROR_^1C4_#LDA* STATUS_'CHECK RCIU DEVICE REJECTS_^1_%AND =N$600_^1_%ARS 9_^1_%INA -1_^1_%SAN C6_+NOT EXT REJ ON RCIU_^1_%ENA 3_^1_%STA* ERTYP_^1_%JMP* ERROR_(PROCESS EXT REJ ERROR_^1C6_#INA -1_^1_%SAN C8_+NOT INT REJ ON RCIU_^1_%ENA 4_^1_%STA* ERTYP_(SAVE ERROR TYPE_^1_%JMP* ERROR_(PROCESS INT REJ ERROR_^1C8_#EN€€A 0_^1_%STA* CLRFLG_'RESET CLEAR FLAG_^1_%LDA* STATUS_'CHECK FOR UNSOLICITED INTERRUPTS_^1_%AND- H100_^1_%SAZ C10_*NORMAL REPLY INTERRUPT_^1_%JMP* C14_*PROCESS UNSOLICITED INTERRUPT_^1C10_"LDA* BUSY_)IS DRIVER BUSY_^1_%SAN C12_*YES_^1_%JMP GHOST_(GHOST INTERRUPT_^1C12_"LDQ- ERETNX,I_$GET RETURN ADDRESS_^1_%JMP- (ZERO),Q_$RETURN_^1_%SPC 2_^1C14_"RAO* INTFLG_'SET INTERRUPT FLAG_€€^1_%LDQ =XISTACK_$STACK UNSOLICITED INTERRUPT_^1STK4_!LDA- EWES,I_'IS THIS ENTRY FOR THIS REMOTE_^1_%SUB- (ZERO),Q_^1_%SAZ STK8_)YES_^1_%INQ 4_,NO_^1_%JMP* STK4_^1STK8_!LDA- I_,SAVE I_^1_%STA- STKI,Q_^1_%LDA- STKUIP,Q_$MASK STATUS WORD_^1_%TCA A_^1_%AND* STATUS_^1_%AND- HFF_^1_%STA- STKUI,Q_%SAVE NEW INTERRUPTS_^1_%LDA* BUSY_)IS DRIVER BUSY_^1_%SAZ C18_*NO_^1_%JMP- (ADISP)_%WA€€IT FOR REPLY INTERRUPT_^1C18_"JMP COMR1_^1STATUS NUM 0_,SAVE STATUS_^1ERTYP NUM 0_,ERROR TYPE_^1IGNORE NUM 0_^1_%EJT_]_^1****************************************************_^1*_)ERROR PATH_=*_^1****************************************************_^1_%SPC 2_^1*_$ERTYP CODE_^1*_*=1 LCU RECEIVE ERROR_^1*_*=2 RCIU RECEIVE ERROR_^1*_*=3 RCIU DEVICE EXTERNAL REJECT_^1*_*=4 RCI€€U DEVICE INTERNAL REJECT_^1_%SPC 2_^1ERROR ENA -0_+STOP CLOCK_^1_%STA- EDCLK,I_^1_%RAO- ERCONT,I_$TEST ERROR COUNTER = 10_^1_%LDA- ERCONT,I_^1_%INA -10_^1_%SAN ER2_*KEEP TRYING_^1_%STA- ERCONT,I_$CLEAR ERROR COUNTER_^1_%LDA* CLRFLG_'IS ERROR ON ATTEMPT TO CLEAR 1590_^1_%SAN ER1_*YES_^1_%RAO* CLRFLG_'NO_^1_%RTJ CLEAR_(CLEAR 1590_^1ER1_"ENQ $28_*ERROR 40_^1_%JMP* LOGE_)LOG ER€€ROR_^1ER2_"LDA* ERTYP_^1_%INA -3_+IS DEVICE REJECT_^1_%SAP DEVREJ_'YES_^1_%JMP I4_+NO- RETRY POINT_^1CLRFLG NUM 0_^1_%SPC 4_^1DEVREJ LDA- ELU,I_^1_%SAN D1_^1_%JMP GHOST_(TREAT LU=0 AS GHOST INTERRUPT_^1D1_#LDA- MODTYP,I_$IS ANALOG INPUT_^1_%AND- HFF_^1_%INA -6_^1_%SAN D2_+NOT 6_^1_%JMP* D4_^1D2_#INA -1_^1_%SAN D6_+NOT 7_^1D4_#JMP* AIREJ_(PROCESS AI REJECT_^1D6_#LDA* ERTY€€P_(IS EXT REJ_^1_%INA -3_^1_%SAZ D8_+YES_^1_%ENQ 5_,INT REJ CODE_^1_%JMP* D10_^1D8_#ENQ 6_,EXT REJ CODE_^1D10_"JMP* LOGE_^1_%SPC 4_^1AIREJ LDQ- DATBUF,I_$PUT ERROR INTO DATA WORD_^1_%LDA* ERTYP_^1_%INA -3_+IS EXTERNAL REJECT_^1_%SAN AIR2_)NO_^1_%LDA =N$8001_%YES_^1_%STA- (ZERO),Q_^1_%JMP* AIR4_^1AIR2_!LDA =N$8002_%INTERNAL REJECT_^1_%STA- (ZERO),Q_^1AIR4_!LDA- MODTYP,I_$C€€LEAR INITIALIZATION FLAG_^1_%AND- HBFFF_^1_%STA- MODTYP,I_^1_%RAO- ECCOR,I_%BUMP CURRENT CHANNEL NBR_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$IS LAST_^1_%SAN AI2_*NO_^1_%JMP COMREQ_'COMPLETE REQUEST_^1AI2_"RAO- DATBUF,I_$BUMP DATA BUFFER ADDRESS_^1_%JMP I4_+DO NEXT CHANNEL_^1_%SPC 4_^1CRCERR LDQ- EWES,I_'PROCESS LOCAL RECEIVE (CRC) ERROR_^1_%ADQ- H80_^1_%LDA- H8000_^1_%RTJ OUT_*CLE€€AR LOCAL 1590 UNIT_^1_%RAO* IGNORE_'SET INTERRUPT IGNORE FLAG_^1_%JMP- (ADISP)_%LET ANY ACTIVE REQUESTS TIME OUT_^1_%SPC 4_^1LOGE_!LDA- ELU,I_^1_%SAN LO2_^1_%JMP GHOST_(TREAT LU=0 AS GHOST INTERRUPT_^1LO2_"LDA- EREQST,I_$SET ERROR BIT IN PDT WORD 8_^1_%AND- HBFFF_^1_%ADD- H4000_^1_%STA- EREQST,I_^1_%LDA- ESTAT1,I_$SET ERROR BIT IN PDT WORD 9_^1_%AND- H1FFF_^1_%EOR- H8000_^1_%STA€€- ESTAT1,I_^1_%LDA- ELU,I_(COMBINE LU AND ERROR CODE_^1_%ALS 6_^1_%AAQ Q_^1_%RTJ LOG_*LOG ERROR_^1_%JMP COMREQ_'COMPLETE REQUEST_^1_%SPC 4_^1****************************************************_^1*_)DIAGNOSTIC CLOCK ENTRY_1*_^1****************************************************_^1_%SPC 2_^1E1590 STQ- I_^1_%ENA -0_^1_%STA- EDCLK,I_%STOP CLOCK_^1_%LDA* IGNORE_'IS IGNORE SET €€,CRC ERROR HAS OCCURED_^1_%SAN ET_+YES_^1_%JMP* ET1_*NO_^1ET_#ENA 0_,CLEAR IGNORE FLAG_^1_%STA* IGNORE_^1_%ENA 1_,SET UP FOR RETRY OF REQUEST_^1_%STA* ERTYP_^1_%JMP* ERROR_^1ET1_"ENA 0_^1_%STA- ESTAT2,I_$PLUG STATUS_^1_%LDA- MODTYP,I_^1_%AND- HFF_^1_%INA -6_+IS ANALOG IN TYPE 6_^1_%SAZ ET2_*YES_^1_%INA -1_+IS ANALOG IN TYPE 7_^1_%SAZ ET2_*YES_^1_%ENQ 0_^1_%JMP* LOGE_)LOG T€€IME OUT ERROR_^1ET2_"LDA- H8000_(PUT ERROR IN DATA WORD ANALOG IN_^1_%LDQ- DATBUF,I_^1_%STA- (ZERO),Q_^1_%JMP* AIR4_^1****************************************************_^1*_)INITIALIZATION REMOTE IOM_-*_^1****************************************************_^1_%SPC 2_^1INREM STQ* QSAV_)SAVE STACK POINTER_^1_%LDQ- EWES,I_'M/C 1590 LOCAL UNIT_^1_%ADQ- H80_^1_%LDA- H8000_^1_%RTJ €€ OUT_^1_%LDQ- EWES,I_'M/C 1590 REMOTE UNIT_^1_%ENA 1_,LOAD DATA=CLEAR FUNCTION_^1_%RTJ OUT_^1_%ADQ- H80_*FUNCTION_^1_%ENA 2_,WRITE CYCLE TO STATION ZERO ON RCIU_^1_%ADD- H200_)FUNCTION_^1_%RTJ OUT_^1_%LDA =XINR2_'SET RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INR2_!LDQ* QSAV_)POINTER TO EMPTY ON STACK_^1_%LDA- EWES,I_'PUT THIS REMOTE ON STACK_^1_%STA- (ZERO),Q_^1_%JMP I4€€_^1QSAV_!NUM 0_^1_%SPC 4_^1****************************************************_^1*_)INITIALIZE ADC/MUX_5*_^1****************************************************_^1_%SPC 2_^1INANA LDQ- EWES,I_'INITIALIZE ANALOG INPUT_^1_%ENA 1_,LOAD DATA=CLEAR ADC/MUX_^1_%RTJ OUT_^1_%ADQ- H80_^1_%LDA- STAN1,I_%ADC STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CODE_^1_%ADD- H200_)FUNCTION_^1_%R€€TJ OUT_^1_%LDA =XINA2_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INA2_!LDA- MODTYP,I_$IS TYPE 7 AI_^1_%AND- HFF_^1_%INA -7_^1_%SAZ INA3_)YES_^1_%JMP* INA4_)NO_^1INA3_!LDA- H40_*ENABLE INTERRUPT ON ADC DATA READY_^1_%LDQ- EWES,I_'MUX STATION ADDRESS_^1_%RTJ OUT_^1_%ADQ- H80_^1_%LDA- STAN2,I_%MUX STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CODE_^1_%ADD- H200_)FUNCTION_^1_%RTJ OUT_^1_%LD€€A =XINA4_'SET RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INA4_!LDA- MODTYP,I_$SET INITIALIZE FLAG_^1_%ADD- H4000_^1_%STA- MODTYP,I_^1_%JMP OPER1_^1_%SPC 4_^1****************************************************_^1*_)INITIALIZE 1572 FOR COUNTER GATE_'*_^1****************************************************_^1_%SPC 2_^1INCNT LDQ- EWES,I_^1_%ENA $24_*LOAD DATA=ENABLE SRG SYN€€C FOR COUNTERS_^1_%RTJ OUT_^1_%ADQ- H80_*FUNCTION BIT_^1_%LDA- STAN2,I_%1572 STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CYCLE_^1_%ADD- H200_)FUNCTION_^1_%RTJ OUT_^1_%LDA =XINC2_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INC2_!LDA =XMULT_'LOAD 1572 MULTIPLIER_^1_%LDQ- EWES,I_^1_%RTJ OUT_^1_%LDA- STAN2,I_%1572 STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CODE_^1_%ADQ- H80_*FUNCTION BIT_€€^1_%RTJ OUT_^1_%LDA =XINC4_'SET RETURN_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INC4_!LDA- MODTYP,I_$SET INITIALIZED FLAG_^1_%ADD- H4000_^1_%STA- MODTYP,I_^1_%JMP OPER3_^1_%SPC 4_^1****************************************************_^1*_$PROCESS GHOST INTERRUPT_4*_^1****************************************************_^1GHOST LDA- ESTAT1,I_^1_%AND- HFF7F_^1_%ADD- H80_*SET BIT IN PDT €€IF GHOST INTERRUPT_^1_%STA- ESTAT1,I_^1_%JMP- (ADISP)_^1_%SPC 4_^1****************************************************_^1*_)M/C 1590 LOCAL AND REMOTE CONTROL_%*_^1****************************************************_^1CLEAR NUM 0_^1_%LDQ- EWES,I_'M/C LOCAL 1590_^1_%ADQ- H80_^1_%LDA- H8000_^1_%OUT 1_^1_%NOP 0_^1_%LDQ- EWES,I_'M/C 1590 REMOTE CONTROL ONLY_^1_%ENA 2_^1_%OUT 1_^€€1_%NOP 0_^1_%ADQ- H80_^1_%ENA 2_,WRITE CYCLE TO STATION ZERO ON REMOTE_^1_%ADD- H200_^1_%OUT 1_^1_%NOP 0_^1_%LDA =XCLR4_'SET RETURN_^1_%STA- ERETNX,I_^1_%JMP FIN_^1CLR4_!JMP* (CLEAR)_^1_%SPC 4_^1****************************************************_^1*_*SEARCH INTERRUPT STACK_0*_^1*_1A=SEARCH MASK_2*_^1*_-RETURNS A=INTERRUPTS,I=PDT,Q=STACK *_^1*******************************€€*********************_^1UISRCH NUM 0_^1_%STA* MSKTMP_^1_%LDQ =XISTACK_^1UIS2_!LDA- (ZERO),Q_$IS END OF STACK_^1_%SAN UIS4_)NO_^1_%ENA -1_+YES, NONE FOUND_^1_%JMP* (UISRCH)_^1UIS4_!LDA- STKUI,Q_%ANY INTERRUPTS ON THIS REMOTE_^1_%SAN UIS8_)YES_^1_%INQ 4_,BUMP TO NEXT STACK ENTRY_^1_%JMP* UIS2_^1UIS8_!LDA- STKI,Q_^1_%STA- I_^1_%LDA- STKUI,Q_%NEW INTERRUPT STATUS_^1_%STA* INTMP_^€€1_%AND* MSKTMP_'IS THIS THE DESIRED INTERRUPT_^1_%SAN UIS12_(YES_^1_%INQ 4_,NO_^1_%JMP* UIS2_^1UIS12 LDA- STKUIP,Q_^1_%ADD* MSKTMP_'UPDATE PROCESSED UI WORD_^1_%STA- STKUIP,Q_^1_%TCA A_^1_%AND- STKUI,Q_%CLEAR CORRES BIT IN NEW INT WORD_^1_%STA- STKUI,Q_^1_%LDA* INTMP_(RETURN INT STATUS_^1_%JMP* (UISRCH)_^1MSKTMP NUM 0_^1INTMP NUM 0_^1ISTACK BZS ISTACK(21)_"4 WORDS PER REMOT€&E PLUS ZERO WORD AT END_^1_%END_]_^__ &PD1595 CSY/ B26 P€1_%NAM D1595_(DECK-ID B26 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$1595 SERIAL I/O CARD DRIVER_^1*_]_^1*_$**********_"DRIVER DESCRIPTION_"**********_^1*_$D1595 IS A MSOS 4 DRIVER FOR THE IOM 1595 SERIAL I/O CARD. THE_^1*_$1595 PROVIDES A FLEXIBLE C€€OMMUNICATIONS INTERFACE BETWEEN THE_^1*_$1700 COMPUTER AND SERIAL DATA (R232-C) COMPATIBLE DEVICES SUCH_^1*_$AS CRT TERMINALS, PRINTERS, ETC. THIS WILL BE COMPATIBLE WITH_^1*_$TIMESHARE. THE DRIVER HAS SIX MODES OF OPERATION - WRITE_^1*_$REQUESTS, FORMATTED WRITE REQUESTS, READ REQUESTS, FORMATTED READ_^1*_$REQUESTS, MOTION REQUESTS, AND UNSOLICITED READ REQUESTS (FOR_^1*_$TIMESH€€ARE ONLY.)_^1*_]_^1*_$FORMATTED WRITE REQUEST - THE REQUEST IS PROCEEDED BY A CARRIAGE_^1*_$RETURN, LINE FEED. THE NUMBER OF WORDS SPECIFIED IS OUTPUT, THE_^1*_$CHARACTER IN THE UPPER BYTE IS OUTPUT FIRST. WHEN A CARRIAGE_^1*_$RETURN IS ENCOUNTERED, IT IS AUTOMATICALLY FOLLOWED BY A LINE_^1*_$FEED. IF ZERO WORDS ARE SPECIFIED, ONLY ONE CHARACTER, IN THE_^1*_$UPPER BYTE OF THE F€€IRST WORD OF THE OUTPUT BUFFER, IS OUTPUT._^1*_$MODE HAS NO MEANING AND IS ASSUMED TO BE ASCII._^1*_]_^1*_$WRITE REQUEST - THIS REQUEST IS THE SAME AS THE FORMATTED WRITE_^1*_$REQUEST EXCEPT THAT THE REQUEST IS NOT PRECEDED BY A CARRIAGE_^1*_$RETURN. LINE FEEDS DO NOT AUTOMATICALLY FOLLOW CARRIAGE RETURN_^1*_$WHEN ENCOUNTERED._^1*_]_^1*_$FORMATTED READ REQUEST - THE NUMBER OF WORD€€S ARE INPUT. CHARA-_^1*_$CTERS ARE PACKED TWO IN EACH WORD WITH THE FIRST CHARACTER_^1*_$STORED IN THE UPPER BYTE OF THE FIRST WORD OF THE INPUT BUFFER._^1*_$THE DRIVER INPUTS CHARACTERS UNTIL A CARRIAGE RETURN IS ENCOUNT-_^1*_$ERED. EACH CHARACTER IS CHECKED FOR PROPER PARITY. IF MORE THAN_^1*_$THE SPECIFIED NUMBER OF CHARACTERS (TWICE AS MANY CHARACTERS_^1*_$AS WORDS SPECIFIED€€) ARE ENTERED BEFORE RECEIPT OF A CARRIAGE_^1*_$RETURN, THE EXTRA CHARACTERS ARE IGNORED. A RUBOUT CANCELS ALL_^1*_$DATA WHICH HAS BEEN PREVIOUSLY INPUT, AND A NEW CHARACTER_^1*_$STRING FOLLOWS THE NEXT CARRIAGE RETURN. IN ADDITION TO CARRIAGE_^1*_$RETURN, IT IS POSSIBLE TO SPECIFY TWO SPECIAL INPUT TERMINATION_^1*_$CHARACTERS. INPUT CHARACTERS ARE ALWAYS TRANSLATED TO UPPER_^1*€€_$CASE IF LOWER CASE CHARACTERS ARE INPUT. IT IS POSSIBLE TO_^1*_$SPECIFY AN ECHOPLEX MODE, THE DRIVER WILL AUTOMATICALLY OUTPUT_^1*_$ALL INPUT CHARACTERS AS THEY ARE RECEIVED, EXCEPT LOWER CASE ARE_^1*_$ECHOED AS UPPER CASE CHARACTERS. A FREAD/READ MADE ON_^1*_$DIAGNOSTIC LOGICAL UNIT IS PROCESSED NORMALLY UNLESS UNSOLICITED_^1*_$INPUT IS IN PROGRESS. IN WHICH CASE, THE INPUT I€€S PERFORMED_^1*_$FOLLOWING THE COMPLETION OF THE UNSOLICITED INPUT. A TIMESHARE_^1*_$LOGICAL UNIT IS ALWAYS IN READ CONDITION. DATA_^1*_$IS READ INTO A 40 WORD BUFFER ASSOCIATED WITH EACH DEVICE,_^1*_$UNTIL A CARRIAGE RETURN IS DETECTED. WHEN THIS OCCURS,_^1*_$THE ENTRY POINT OF A CORE RESIDENT INPUT PROCESSOR SPECIFIED IN_^1*_$THE PHYSICAL DEVICE TABLE IS SCHEDULED IF IT IS NON€€-ZERO. THE_^1*_$ENTRY IS SCHEDULED WITH THE Q REGISTER CONTAINING THE LOGICAL_^1*_$UNIT._^1*_]_^1*_$READ REQUEST - THE NUMBER OF WORDS SPECIFIED IS INPUT. TWO CHAR_^1*_$ACTERS ARE PACKER PER WORD. ALL CHARACTERS ARE TRANSFERRED AFTER_^1*_$PARITY CHECK. THE OVERFLOW OF THE INPUT BUFFER AND THE LOWER_^1*_$CASE CHARACTERS AND ECHO FEATURES ARE HANDLED THE SAME AS THE_^1*_$FORMATTE€€D READ._^1*_]_^1*_$MOTION REQUEST - MOTION REQUESTS ARE DEFINED IN THE PHYSICAL_^1*_$DEVICE TABLE FOR EACH DEVICE. EXAMPLES ARE AS FOLLOWS -_^1*_]_^1*_$713 CRT_^1*_$1. BACKSPACE RECORD_'BACKSPACE CURSOR ONE CHARACTER_^1*_$2. WRITE END OF FILE_%RESET CURSOR TO HOME POSITION_^1*_$3. REWIND_1NO ACTION_^1*_$4. REWIND/UNLOAD_*RESET CURSOR TO BEGINING OF LINE_^1*_$5. ADVANCE FILE_+€€MOVE CURSOR DOWN ONE LINE_^1*_$6. BACKSPACE FILE_)MOVE CURSOR UP ONE LINE_^1*_$7. ADVANCE RECORD_)ADVANCE CURSOR ONE CHARACTER_^1*_]_^1*_$1711 TELETYPE_^1*_$1. BACKSPACE RECORD_'NO ACTION_^1*_$2. WRITE END OF FILE_%TOP OF FORM_^1*_$3. REWIND_1NO ACTION_^1*_$4. REWIND/UNLOAD_*TERMINATE REQUEST_^1*_$5. ADVANCE FILE_+NO ACTION_^1*_$6. BACKSPACE FILE_)NO ACTION_^1*_$7. ADVANCE€€ RECORD_)NO ACTION_^1*_]_^1*_]_^1*_$UNSOLICITED READ REQUEST - (TIMESHARE ONLY) THE DRIVER CHECKS ALL_^1*_$DEVICES FOR INPUT AT EVERY INTERRUPT AND SAVES ALL CHARACTERS_^1*_$WHICH ARE READY FOR INPUT IN A 40 - WORD BUFFER LOCATED IN AN_^1*_$ADDRESS STORED IN THE PHYSICAL DEVICE TABLE. ALL CHARACTERS ARE_^1*_$INPUT AS UPPER CASE, AND ALL CHARACTERS INPUT AFTER THE_^1*_$FIRST 80 ARE€€ IGNORED. IF ECHO MODE IS SELECTED, EACH INPUT_^1*_$CHARACTER WILL BE ECHOED AS IT IS READ. A CARRIAGE RETURN TERM-_^1*_$INATES INPUT, AND CAUSES A USER PROGRAM TO BE SCHEDULED WITH_^1*_$THE LOGICAL UNIT IN THE Q REGISTER._^1*_]_^1*_$ERRORS - THE DRIVER RECOGNIZES I/O OPERATION ERRORS. WHEN AN_^1*_$ERROR CONDITION IS DETECTED, AN ERROR CODE IS DETERMINED AS_^1*_$LISTED BELOW -_^€€1*_,00 = FAILURE TO INTERRUPT_^1*_,01 = LOST DATA_^1*_,02 = ALARM CONDITION_^1*_,03 = PARITY ERROR ON INPUT_^1*_,05 = INTERNAL REJECT_^1*_,06 = EXTERNAL REJECT_^1*_,33 = LINE BREAK_^1_%EJT_]_^1*_$*****************************************************************_^1*_$*_] *_^1*_$*_] *_^1*_$*_0SAMPLE PHYICAL DEVICE TABLE_2*_^1*_$*_] *_^1*_$*_] *_^1*_$**********************************€€*******************************_^1*_]_^1*_]_^1*_$ENT P1595X_^1*_$EXT I1595,C1595,E1595_^1*_$EQU L1595(10)_#SERIAL I/O CARD LEVEL_^1*P1595XADC $5200+L1595_!00 SCHEDULAR CALL_^1*_$ADC I1595_(01 INITIATOR ADDRESS_^1*_$ADC C1595_(02 CONTINUATOR_^1*_$ADC E1595_(03 I/O ERROR ADDRESS_^1*_$NUM -1_+04 DIAGNOSTIC CLOCK_^1*_$NUM 0_,05 CURRENT LOGICAL UNIT_^1*_$NUM 0_,06 PARAM€€ETER LIST ADDRESS_^1*_$ADC EQ1595+SLOTX 07 HARDWARE ADR/EQUIP STATUS_^1*_$NUM 0_,08 REQUEST STATUS_^1*_$NUM 0_,09 STATUS BITS_^1*_$ADC INBUF_(10 CURRENT LOCATION ( ADC INBUFF IF T/S)_^1*_$ADC INBUF+40_$11 LWA+1_^1*_$NUM 0_,12 HARDWARE STATUS_^1*_$NUM 0_,13 DRIVER LENGTH (M.M. ONLY)_^1*_$NUM 0_,14 SECTOR ADR (M.M. ONLY)_^1*_$NUM 0_,15 TEMP STORAGE_^1*_$ADC INBUF_€€(16 START OF BUFFER ADR_^1*_$NUM 0_,17 DIAGNOSTIC LOGICAL UNIT_^1*_$NUM 0_,18 TERMINATION CHARACTERS_^1*_$NUM 0_,19 ERROR CODE STORAGE_^1*_$NUM $8000_(20 ECHO TYPE, 0 = HALF DUPLEX_^1*_$NUM 0_,21 OUTPUT/INPUT DIAG CLOCK TIME_^1*_$NUM 0_,22 MOTION WORD 1_^1*_$NUM 0_,23 MOTION WORD 2_^1*_$NUM 0_,24 MOTION WORD 3_^1*_$NUM 0_,25 MOTION WORD 4_^1*_$NUM 0_,26 MOTION €€WORD 5_^1*_$NUM 0_,27 MOTION WORD 6_^1*_$NUM 0_,28 MOTION WORD 7_^1*_$NUM $8000_(29 CONTROL WORD - = T/S_%0 = NON T/S_^1*_$NUM 40_+30 BUFFER SIZE_((TIMESHARE ONLY)_^1*_$NUM 0_,31 USER ADR_^1*_$NUM 0_,32 CURRENT MOTION CODE_^1*_$ADC LU1595X-LOG1A 33 ACTUAL LOGICAL UNIT_^1*_$BZS INBUF(40)_#34 BEGINNING OF BUF_"(TIMESHARE ONLY)_^1*_$NUM 0_,74 TIMESHARE BUFFER LENGTH€€_^1*_$ADC P1595X_'75 PHYSTB THREAD_^1*_]_^1*_$* CONTROL WORD - BIT 15 = 1 TIMESHARE_^1*_6BIT 14 = 1 UNSOLICITED INPUT ACTIVE_^1*_6BITS 0-3 USER PRIORITY LEVEL_^1_%EJT_]_^1*_]_^1*_$*****************************************************************_^1*_$*_4EQUIVALENCES_=*_^1*_$*****************************************************************_^1*_]_^1_%EQU EDCLK(4)_(WD 4 DIAGNOS€€TIC CLOCK_^1_%EQU ELU(5)_*WD 5 LOGICAL UNIT_^1_%EQU EPTR(6)_)WD 6 PARAMETER LIST LOCATION_^1_%EQU EWES(7)_)WD 7 EQUIPMENT / STATION CODE_^1_%EQU EREQST(8)_'WD 8 REQUEST STATUS_^1_%EQU ESTAT1(9)_'WD 9 DRIVER STATUS_^1_%EQU ECCOR(10)_'WD 10 NEXT CORE LOCATION_^1_%EQU ELSTWD(11)_%WD 11 LAST CORE LOCATION + 1_^1_%EQU ESTAT2(12)_%WD 12 HARDWARE STATUS_^1_%EQU TEMP(15)_(WD €€15 TEMPORARY STORAGE_^1_%EQU COREIN(16)_%SAVE START OF BUFFER ADDRESS_^1_%EQU DIAGLU(17)_%DIAGNOSTIC LOGICAL UNIT_^1_%EQU TERM(18)_(TERMINATION CHARS (2)_^1_%EQU ERRCOD(19)_%ALTDEV ERROR CODE STORAGE_^1_%EQU ECHO(20)_(TYPE OF I/O FD,HD,BATCH_^1_%EQU TIMVAL(21)_%DIAGNOSTIC CLOCK TIME_^1_%EQU MTN(22)_)MOTION BUFER_^1_%EQU TYPE(29)_(TIMESHARE INDICATOR AND PRI_^1_%EQU BUFFNO(€€30)_%NO OF WORDS FOR UNSIL. READ_^1_%EQU USER(31)_(USER PROGRAM RETURN ADR_^1_%EQU MOTWD(32)_'CURRENT MOTION WORD_^1_%EQU ACTLU(33)_'ACTUAL LOGICAL UNIT_^1_%EQU INBUF(34)_'START OF BUFFER_^1_%EQU NEXT(75)_(NEXT PHYSTB ADR_^1_%EQU TIMERR(0)_'TIMEOUT ERROR CODE_^1_%EQU LOST(1)_)LOST DATA ERROR CODE_^1_%EQU ALARM(2)_(ALARM ERROR CODE_^1_%EQU PARITY(3)_'PARITY ERROR CODE_^1_%E€€QU INTREJ(5)_'INTERNAL REJECT CODE_^1_%EQU EXTREJ(6)_'EXTERNAL REJECT CODE_^1_%EQU LINEBK(33)_%LINE BREAK ERROR CODE_^1_%EQU LPMSK(2)_(START LEFT PARTS MASKS_^1_%EQU NZERO($12)_%START RIGHT PARTS MASKS_^1_%EQU ZERO($22)_'LOCATION CONTAINING ZERO_^1_%EQU ONEBIT($23)_$START ONE BIT MASKS_^1_%EQU ZROBIT($33)_$START ZERO BIT MASKS_^1_%EQU AFNR($B5)_'LOCATION OF FIND NEXT REQUE€€ST_^1_%EQU ACMPRQ($B6)_$LOCATION OF COMPLETE REQUEST_^1_%EQU ADISP($EA)_%LOCATION OF DISPATCHER_^1_%EQU AMONI($F4)_%LOCATION OF MONITOR_^1*_]_^1_%ENT I1595,C1595,E1595_^1*_]_^1_%EXT MAKEQ,ALTDEV,LOG_^1_%EJT_]_^1*_$*****************************************************************_^1*_$*_] *_^1*_$*_"H A R D W A R E Q - R E G I S T E R D E S C R I P T I O N*_^1*_$*_] *_^1*_$***€€**************************************************************_^1*_]_^1*_*Q R E G I S T E R D E S C R I P T I O N_^1*_]_^1*_*W FIELD = 0_$BITS 15 - 11_^1*_*EQUIP NUM_'BITS 10 = 07_^1*_*MODULE (1 OF 8) BITS 06 = 04_^1*_*STA LOC(1 OF 16) BITS 03 = 00_^1*_]_^1*_]_^1*_]_^1*_*BITS 00 - 03 = THE STATION I/O ADDRESS, DECODED FOR 1 OF 16_^1*_9STATION ADDRESS LOCATIONS IN THE MODULE_^1*_€€]_^1*_*BITS 04 - 06 = THE MODULE ADDRESS, DECODED FOR THE CIU MOD-_^1*_9ULE OR UP TO SEVEN CIE MODULES IN THE SYSTEM_^1*_]_^1*_]_^1*_*BIT 07 =_%FUNCTION/STATUS BIT CONTAINED IN THE EQUIP-_^1*_9MENT NUMBER_^1*_]_^1*_9IF 0, WRITE OPERATION LOADS STATION DEVICES_^1*_9WITH DATA FROM THE A REGISTER, READ OPERATION_^1*_9GATES DATA FROM STATION DEVICE INTO THE A_^1*_9REGISTER._^1*_]_^1*_9€€IF 1, WRITE OPERATION LOADS STATION DEVICE_^1*_9WITH FUNCTION COMMAND CONTAINED IN THE A_^1*_9REGISTER, READ OPERATION GATES STATUS FROM_^1*_9STATION DEVICE INTO THE A REGISTER._^1*_]_^1*_]_^1*_*BITS 08 - 10 = THE REMAINING BITS OF THE CIU/CIE EQUIPMENT_^1*_9NUMBER. THE CIU RESPONDS TO TWO EQUIPMENT_^1*_9NUMBERS= N AND N+1, WHERE N IS EVEN, DATA_^1*_9TRANSFERS ARE PERFORMED ON EQ€€UIPMENT NUMBER_^1*_9N AND FUNCTION/STATUS OPERATIONS ON EQUIPMENT_^1*_9NUMBER N+1._^1*_]_^1*_]_^1*_*BITS 11 - 15 = ALL ZEROS FOR THE W FIELD._^1_%EJT_]_^1*_*A R E G I S T E R D E S C R I P T I O N_^1*_]_^1*_]_^1*_]_^1*_*THE A REGISTER IS USED TO TRANSFER ALL INFORMATION TO/FROM_^1*_*THE SIO UNIT DEVICES. THE TYPE OF INFORMATION CONTAINED IN_^1*_*THE A REGISTER IS DEPENDENT UPON €€BIT 7 OF THE Q REGISTER._^1*_]_^1*_9IF 0 (DATA). BITS 0-15 OF A CONTAIN DATA TO_^1*_9BE TRANSFERRED TO/FROM THE SIO STATION DEVICE_^1*_9DURING WRITE/READ OPERATIONS_^1*_]_^1*_9IF 1 (FUNCTION/STATUS), BITS 0-15 OF A CON-_^1*_9TAIN, FOR WRITE OPERATIONS, FUNCTION BITS_^1*_9FOR SETTING UP THE SIO UNIT, AND, FOR READ_^1*_9OPERATIONS, FUNCTION BITS FOR SETTING UP THE_^1*_9SIO UNIT, AND,€€ FOR READ OPERATIONS, STATUS_^1*_9FROM THE SIO UNIT._^1*_]_^1*_*F U N C T I O N W R I T E O P E R A T I O N_^1*_]_^1*_*BITS 8-15 OF THE A REGISTER PROVIDE THE WRITE FUNCTION OPER-_^1*_*ATION TO THE SIO. THE A-REGISTER FUNCTIONS ARE AS FOLLOWS=_^1*_]_^1*_]_^1*_]_^1*_9BITS 0-7= N/A_^1*_]_^1*_]_^1*_9BIT 8 = IF SET, ENABLES THE SERIAL DATA TRANS_^1*_9MITTER FOR DATA WRITE TRANSFERS €€TO A TERMINAL_^1*_9DEVICE OR MODEM._^1*_]_^1*_]_^1*_9BIT 9 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT TO THE CIU WHEN THE TRANSMIT UNIT IS_^1*_9READY TO ACCEPT A DATA WORD._^1*_]_^1*_]_^1*_9BIT 10 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT TO THE CIU WHEN DATA IS RECEIVED FROM_^1*_9AN EXTERNAL DEVICE._^1*_]_^1*_]_^1*_9BIT 11 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT€€ TO THE CIU ON THE FOLLOWING RECEIVED_^1*_9DATA ERRORS=_^1*_;- PARITY ERROR_^1*_;- LINE BREAK_^1*_;- LOST CHARACTER_^1*_]_^1*_]_^1*_9BIT 12 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT TO THE CIU WHEN A PRESELECTED ASCII_^1*_9CHARACTER CODE OR A REMOTE SYSTEM INTERRUPT_^1*_9HAS BEEN DETECTED._^1*_]_^1*_]_^1*_9BIT 13 = IF SET, DISABLES RECEIVER ERROR AND_^1*_9AUXILLARY FLAGS AND €€CLEARS RECEIVER._^1*_]_^1*_]_^1*_9BIT 14 = IF SET, DISABLES REQUEST TO SEND AND_^1*_9TRANSMITTER FLAG AND CLEARS TRANSMITTER._^1*_]_^1*_]_^1*_9BIT 15 = IF SET, PROVIDES A COMBINED FUNCTION_^1*_9OF BITS 13 AND 14._^1*_]_^1*_*NOTE.. ALL BITS MUST BE SET TO THE DESIRED STATE FOR EACH_^1*_1FUNCTION COMMAND,_^1*_11 = ENABLE FUNCTION AND 0 = DISABLE FUNCTION_^1*_]_^1_%EJT_]_^1*_*S T A T €€U S R E A D O P E R A T I O N_^1*_]_^1*_]_^1*_*BITS 8 - 15 OF THE A -REGISTER WILL CONTAIN THE SIO CARD_^1*_*STATUS ON A READ STATUS OPERAION. A DESCRIPTION OF THE A-_^1*_*REGISTER STATUS READ IS AS FOLLOWS._^1*_]_^1*_]_^1*_]_^1*_9BITS 0 - 7 = NOT USED_^1*_]_^1*_]_^1*_9BIT 8 = IF SET, INDICATES READY STATUS OF_^1*_9EXTERNAL DEVICE OR MODEM._^1*_]_^1*_]_^1*_9BIT 9 = IF SET, INDIC€€ATES THAT A PRESELECTED_^1*_9ASCII CHARACTER CODE HAS BEEN DETECTED._^1*_]_^1*_]_^1*_9BIT 10 = IF SET, INDICATES THAT A SIGNAL HAS_^1*_9BEEN RECEIVED FROM A TERMINAL DEVICE OR MODEM_^1*_9VERIFYING IT IS RECEIVING SUITABLE DATA._^1*_]_^1*_]_^1*_9BIT 11 = IF SET, INDICATES ABSENCE OF STOP_^1*_9MITTER WILL ACCEPT THE NEXT DATA WORD TO BE_^1*_9TRANSMITTED._^1*_]_^1*_]_^1*_9BIT 12 = IF€€ SET, INDICATES A PARITY ERROR_^1*_9CONDITION OCCURRED DURING A READ DATA OPER._^1*_]_^1*_]_^1*_9BIT 13 = IF SET, INDICATES ABSENCE OF STOP_^1*_9BIT IN RECEIVED CHARACTER._^1*_]_^1*_]_^1*_9BIT 14 = IF SET, INDICATES TWO OR MORE CHAR-_^1*_9ACTERS RECEIVED WITHOUT AN INTERVENING READ_^1*_9OPERATION._^1*_]_^1*_]_^1*_9BIT 15 = IF SET, INDICATES THAT A SUITABLE_^1*_9CHARACTER HAS BEEN R€€ECEIVED._^1*_]_^1*_]_^1_%EJT_]_^1*_*D A T A R E A D / W R I T E O P E R A T I O N_^1*_]_^1*_*BIT 0 - 7 OF THE A-REGISTER CONTAIN THE RECEIVED DATA(READ)_^1*_*OR DATA TO BE TRANSMITTED(WRITE)._^1_%EJT_]_^1*_]_^1*_$*****************************************************************_^1*_$*_*INITIATOR ENTRY_D*_^1*_$*****************************************************************_^1*_]€€_^1I1595 STQ- I_,STORE PHYTAB_^1_%STQ* BASE_)SAVE BASE ADR_^1I0000 LDA- TYPE,I_'CHECK FOR TIMESHARE_^1_%SAP I0010_(NOT T/S CONTINUE_^1_%ALS 1_,CHECK FOR UNSOL READ_^1_%SAM I0020_(YES UNSOL READ_^1I0010 LDA- EREQST,I_$CHECK FOR OPERATION IN PROGRESS BIT SET_^1_%SAP I0040_(NO - GO TO FNR_^1I0020 LDA- NEXT,I_'PICKUP NEXT PHYTAB ADR_^1_%STA- I_,SAVE NEW PHYTAB ADR_^1_%SUB* BASE€€_)CHECK IF BACK AT BASE ADR_^1_%SAZ I0030_(YES THEY ARE THE SAME - FINISHED_^1_%JMP* I0000_(CHECK NEW PHYTAB_^1I0030 JMP- (ADISP)_%EXIT FROM DRIVER_^1*_]_^1I0040 RTJ- (AFNR)_'ANY REQUESTS_^1_%JMP* I0050_(NO_^1_%LDQ- EWES,I_'PICKUP HARDWARE ADR_^1_%INP REJECT-*_$INPUT STATUS_^1_%STA- ESTAT2,I_$SAVE STATUS WORD_^1_%ALS 1_,CHECK FOR ERROR_^1_%AND- NZERO+13_$LOST CHAR, LINE BRK, P€€ARITY_^1_%SAZ I0070_(GO TO CHECK TYPE OF REQUEST_^1_%ENA ALARM_(ALARM ERROR = 2_^1_%JMP* ERROR_^1*_]_^1I0050 RTJ* TSSET_(CLEAR INTERRUPT,SET-UP T/S_^1I0060 JMP* I0020_^1*_]_^1I0070 LDQ- EPTR,I_'CHECK TYPE OF REQUEST_^1_%LDA- (ZERO),Q_$GET REQUEST WORD_^1_%ALS 7_^1_%AND- LPMSK+5_%GET REQUEST CODE AND CHECK FOR MOTION (T14)_^1_%INA -14_^1_%SAN I0080_(NOT MOTION_^1_%ENA 0_^1_€€%STA- ECCOR,I_%MOTION REQUEST - ZERO BUFFER LOCATION_^1_%STA- ELSTWD,I_$ZERO LENGTH_^1_%JMP MOTION_^1*_]_^1I0080 LDA- ECCOR,I_%SAVE BUFFER POINTER LOCATION_^1_%STA- COREIN,I_^1_%ENA 1_,1 EQUALS WRITE 0 = READ_^1_%AND- ESTAT1,I_$CHECK TYPE OF I/O REQUEST_^1_%SAZ I0090_(READ FUNCTION_^1_%JMP WRITE_^1*_]_^1I0090 ENA $07_*SEND BELL_^1_%LDQ- EWES,I_'HARDWARE ADR_^1_%ADQ- ZROBIT+7€€_$MASK ,FF7F FOR CHAR OUTPUT_^1_%OUT REJECT-*_^1_%LDA- TYPE,I_'CHECK FOR T/S_^1_%SAP I0100_(NOT T/S_^1_%LDA- DIAGLU,I_$CHECK FOR DIAG LU_^1_%SUB- ELU,I_^1_%SAZ I0100_(YES - CONTINUE AS A REGUALR READ_^1_%LDA- TIMVAL,I_$SET DIAGNOSTIC CLOCK_^1_%AND- LPMSK+8_^1_%STA- EDCLK,I_^1_%JMP NTSDON_'GO COMPLETE REQUEST_^1*_]_^1I0100 LDA- TIMVAL,I_$SET DIAGNOSTIC CLOCK_^1_%AND- LPMSK+8_^1€€_%STA- EDCLK,I_%SET CLOCK AT 60 SECONDS_^1I0110 LDA =N$1500_^1_%LDQ- EWES,I_'HARDWARE/EQUIP CODE_^1_%OUT REJECT-*_%ENABLE INTERRUPTS_^1_%JMP* C0020_(GET NEXT PHYTAB_^1*_]_^1TSSET NOP 0_^1_%LDA =XINBUF,I_#PICKUP ADR OF INBUF_^1_%STA- COREIN,I_$STORE IN SAVE ADR BUFFER_^1_%STA- ECCOR,I_%SAVE IN ECCOR_^1_%ADD- BUFFNO,I_$NO OF ALLOWABLE INPUTS_^1_%STA- ELSTWD,I_$SAVE IN LWA+1_^1_%€€LDA- TYPE,I_'SET BIT $8000 INDICATING T/S UNSOL NOT RUNNING_^1_%AND- ZROBIT+14_#MASK WITH $BFFF_^1_%STA- TYPE,I_^1_%LDA =N$1500_%READ MODE FUNCTION COMMAND_^1_%LDQ- EWES,I_'HARDWARE ADR_^1_%OUT LOGREJ-*_$OUTPUT ENABLE EOT, DATA ERROR, DATA READY_^1_%ENA 0_,ZERO LOGICAL UNIT_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%STA- ELU,I_(ZERO LU_^1_%EIN 0_-ENABLE INTERRUPTS_^1_%JMP* (TSSET)_%EXI€€T_^1LOGREJ ENQ INTREJ_'INTERNAL REJECT_^1_%JMP* I0120_^1_%ENQ EXTREJ_'EXTERNAL REJECT_^1I0120 LDA- ACTLU,I_%FORM LOGGER CODE_^1_%ALS 6_^1_%EAQ Q_^1_%RTJ+ LOG_*LOG ERROR_^1_%JMP- (ADISP)_^1*_]_^1_%BZS BASE(1)_^1_%EJT_]_^1*_$*****************************************************************_^1*_$*_*TIMEOUT ERROR ENTRY_@*_^1*_$*****************************************************€€************_^1E1595 STQ- I_^1_%STQ* BASE_)SAVE BASE ADR_^1_%ENA TIMERR_'TIMEOUT ERROR = 0_^1*_]_^1ERROR LDQ- ELU,I_^1_%QLS 6_,FORM ALTERNATE DEVICE ERROR CODE_^1_%EAQ Q_^1_%STQ- ERRCOD,I_$SAVE ERROR CODE_^1_%RTJ+ LOG_*LOG ERROR ROUTINE_^1_%CLR A_^1_%LDQ- EWES,I_'LOAD HARDWARE ADR_^1_%INP 2_^1_%STA- ESTAT2,I_$SAVE INPUT STATUS IF NO REJECT_^1_%NOP 0_^1_%LDA- ONEBIT+15_#$800€€0 TO CLEAR SIO CARD_^1_%OUT 1_,CLEAR SIO CARD_^1_%NOP 0_^1ERR_"LDA- ONEBIT+14_#SET HARDWARE FAILURE IN PHYTAB $4000_^1_%EOR- EREQST,I_^1_%STA- EREQST,I_^1_%RTJ+ MAKEQ_(SET V BITS_^1_%LDA- EREQST,I_$CHECK IF OPERATION IN PROGRESS BIT SET_^1_%SAM E0010_(YES - THIS IS A MONITOR CALL_^1_%LDA- TYPE,I_'NO THIS IS AN UNSOLICITED READ_^1_%SAP E0000_(NOT T/S PROCESS NEXT FNR_^1_%RTJ* SC€€HUSR_^1E0000 JMP* I0040_(RETURN TO FNR_^1*_]_^1E0010 LDA- DIAGLU,I_$CHECK FOR DIAG LU_^1_%SUB- ELU,I_^1_%SAN E0015_^1_%RTJ- (ACMPRQ)_^1_%JMP* E0000_^1E0015 LDQ- ERRCOD,I_$PICKUP ERROR CODE FOR ALTDEV CALL_^1_%RTJ- (AMONI)_%SCHEDULE ALTERNATE DEVICE HANDLER_^1_%NUM $520A_^1_%ADC ALTDEV_^1_%JMP* C0020_(RETURN TO CHECK FOR NEXT PHYTAB_^1*_]_^1REJECT JMP* REJ2_^1REJ1_!ENA EXTREJ€€_'EXTERNAL REJECT = 6_^1_%JMP* ERROR_^1REJ2_!ENA INTREJ_'INTERNAL REJECT = 5_^1_%JMP* ERROR_^1*_]_^1*_]_^1*_]_^1SCHUSR NOP 0_,ROUTINE TO SCHEDULE USER PROGRAM_^1_%LDA- TYPE,I_'SET BIT $8000 INDICATING T/S UNSOL NOT RUNNING_^1_%AND- ZROBIT+14_#MASK WITH $BFFF_^1_%STA- TYPE,I_^1_%LDA- USER,I_'INPUT TIMEOUT - SCHED USER_^1_%SAN 1_^1_%JMP* S0030_(NO USER DEFINED GO GET FNR_^1_%STA€€* S0020_'SAVE USER ADR IN SCH CALL_^1_%LDA- TYPE,I_'PICKUP PRI LEVEL_^1_%AND- LPMSK+4_%MASK OFF PRI WITH $F_^1_%EOR =N$5200_%FORM SCHEDULAR CALL_^1_%STA* S0010_(SAVE IN MONITOR CALL_^1_%LDA- ECCOR,I_^1_%SUB- COREIN,I_^1_%INA 1_^1_%LDQ- COREIN,I_^1_%ADQ- BUFFNO,I_^1_%STA- (ZERO),Q_'STORE LENGTH OF TRANSFER_^1_%LDA- EREQST,I_$CHECK IF ERROR OCCURRED_^1_%AND- ONEBIT+14_^1_%ALS 1_,€€SET Q REGISTER WITH ERROR_^1_%ADD- ELU,I_(INDICATOR AND LU NUMBER_^1_%TRA Q_^1_%RTJ- (AMONI)_^1S0010 ADC 0_,REQUEST CODE AND PRI_^1S0020 ADC 0_,USER ADR_^1S0030 JMP* (SCHUSR)_$EXIT_^1_%EJT_]_^1*_$*****************************************************************_^1*_$*_*CONTINUATOR ENTRY_B*_^1*_$*****************************************************************_^1*_]_^1_%BZS S€€LOT(1)_^1*_]_^1C1595 STQ- I_,SAVE PHYTAB ADR_^1_%STQ* BASE_)SAVE BASE ADR_^1C0010 LDA- EWES,I_'PICKUP EQUIPMENT ADR_^1_%AND- LPMSK+4_%SAVE SLOT ADDRESS_^1_%STA* SLOT_^1_%LDA- EWES,I_'GET EQUIPMENT ADR_^1_%AND- NZERO+4_%MASKOUT SLOT ADR_^1_%TRA Q_^1_%INP C0020-*_%INPUT 1750-X MODULE STATUS_^1_%LDQ* SLOT_^1_%AND- ONEBIT,Q_$CHECK IF INTERRUPT SET_^1_%SAN C0040_(NO_"FOUND INTERRUP€€T_^1C0020 NOP 0_^1_%LDA- NEXT,I_'PICKUP NEXT PHYTAB ADR_^1_%STA- I_^1_%SUB* BASE_)CHECK IF BACK AT BASE ADR_^1_%SAN C0030_(NOT DONE CHECKING_^1_%JMP- (ADISP)_%EXIT_^1C0030 JMP* C0010_^1*_]_^1C0040 LDQ- EWES,I_'EQUIP ADR_^1_%INP REJECT-*_$INPUT STATUS_^1_%STA- ESTAT2,I_$SAVE STATUS_^1_%ENA $40_*IS COMPLETE FLAG SET_^1_%AND- ESTAT1,I_^1_%SAN 1_^1_%JMP* CKTS_)CHECK TIMESHARE_^€€1_%ENA $40_^1_%EOR- ESTAT1,I_$RESET COMPLETION FLAG_^1_%STA- ESTAT1,I_^1C040X LDA- TYPE,I_'TIMESHARE_^1_%SAP NTSDON_^1_%ALS 1_,CHECK FOR UNSOL BIT SET_^1_%SAP NTSDON_^1_%RTJ* SCHUSR_'SCHEDULER USER PROGRAM_^1_%JMP* C0041+1_^1NTSDON RTJ+ MAKEQ_^1C0041 RTJ- (ACMPRQ)_$COMPLETE REQUEST_^1_%JMP I0040_(CHECK NEXT FNR_^1*_]_^1*_]_^1CKTS_!LDA- ESTAT2,I_%CHECK TO SEE IF A VALID CHAR €€IS READY_^1_%SAM 1_^1_%JMP* C0042_(NO_^1_%LDQ- EWES,I_^1_%ADQ- ZROBIT+7_^1_%INP REJECT-*_$INPUT CHAR_^1_%AND- LPMSK+7_%STRIP OFF UNUSED BITS_^1_%INA -$60_)CHECK FOR LOWER CASE_^1_%SAP 1_^1_%INA $20_*NO, RESTORE CHAR_^1_%INA $40_*CONVERT TO UPPER_^1_%STA- TEMP,I_'STORE IT IN TEMP_^1_%STA* CHARSV+1_%ALSO SAVE IT IN TEMP LOC_^1_%LDA- TYPE,I_'IS IT A TIMESHARE LU_^1_%JMP* C0042_(€€NO_^1_%RTJ TERMCK_'CHECK TO SEE IF A TERMINATION CHAR_^1_%JMP* C0042_(NOT A TERM CHAR_^1_%ENA $40_^1_%EOR- ESTAT1,I_$RESET COMPLETION FLAG_^1_%STA- ESTAT1,I_^1_%LDA- EREQST,I_$CHECK FOR OPERATION IN PROGRESS_^1_%SAP NOREQQ_'NO_^1_%RTJ+ MAKEQ_^1_%RTJ- (ACMPRQ)_^1NOREQQ RTJ TSSET_(GO SET UP FOR TIMESHARE_^1CHARSV LDA =N0_^1_%STA- TEMP,I_^1_%JMP* C0105_^1C0042 LDA- ESTAT2,I_(CHE€€CK STATUS FOR ERRORS_^1_%AND =N$7000_%CHECK FOR LOST DATA, LINE BRK, OR PARITY_^1_%SAN 1_^1_%JMP* C0080_(NO ERROR_^1_%ALS 1_,CHECK FOR LOST DATA_^1_%SAP C0070_(NOT LOST DATA_^1_%ENQ LOST_)LOST DATA IS ERROR 1_^1_%JMP* C0078_^1C0070 ALS 1_,CK FOR LINE BRK_^1_%SAP C0075_(NOT LINE BRK MUST BE PARITY_^1_%ENQ LINEBK_'LINE BRK ERROR IS 33_^1_%JMP* C0078_^1C0075 ENQ PARITY_'PA€€RITY IS ERROR 3_^1C0078 LDA- ELU,I_(LU_^1_%SAN C0079_^1_%LDA- ACTLU,I_%GET LOGICAL UNIT IF TIMESHARE_^1C0079 STQ- ERRCOD,I_$STORE ERROR CODE_^1_%ALS 6_,SET UP CODE FOR LOGGER_^1_%EAQ Q_^1_%RTJ+ LOG_*LOG ERROR_^1_%ENA $7F_*OUTPUT BLOB_^1_%LDQ- EWES,I_'HARDWARE ADR_^1_%ADQ- ZROBIT+7_^1_%OUT REJECC-*_^1_%LDQ- EWES,I_^1_%LDA- ONEBIT+13_#CLEAR INTERRUPT_^1_%OUT REJECC-*_^1_%LDA-€€ ELU,I_(CHECK FOR DIAGNOSTIC LU_^1_%SUB- DIAGLU,I_^1_%SAN JPI100_^1_%JMP ERR_*GO TO COMPLETE REQUEST_^1JPI100 JMP I0100_^1*_]_^1REJECC JMP* REC_*INTERNAL REJECT_^1_%JMP REJ1_)EXTERNAL REJECT_^1REC_"JMP REJ2_^1*_]_^1*_]_^1C0080 LDA- EREQST,I_$CHECK FOR OPERATION IN PROGRESS_^1_%SAM C0090_(YES OPERATION IN PROGRESS_^1_%LDA- TYPE,I_'CHECK FOR T/S_^1_%SAP 1_^1_%JMP* C0105_(YES€€ T/S_^1_%LDA- ONEBIT+15_#CLEAR SERIAL I/O CARD_^1_%LDQ- EWES,I_'HARDWARD ADR_^1_%OUT 1_^1_%NOP 0_^1_%JMP* C0020_(READ NEXT PHYTAB_^1C0090 LDQ- EPTR,I_'PICKUP REQUEST WORD ADR_^1_%LDA- (ZERO),Q_$PICKUP REQUEST WORD_^1_%ALS 7_^1_%AND- LPMSK+5_%GET REQUEST CODE AND CHECK FOR MOTION (T14)_^1_%INA -14_^1_%SAN C0100_^1_%JMP MOT2_)MOTION REQUEST_^1*_]_^1*_]_^1C0100 ENA 1_^1_%AN€€D- ESTAT1,I_$CHECK FOR R/W REQ_^1_%SAN 1_,WRITE REQUEST_^1_%JMP* C0110_(READ REQ_^1_%JMP WRITE_^1*_]_^1C0105 IIN 0_,INHIBIT INTERRUPTS_^1_%LDA- ELU,I_(CHECK FOR LU = 0_^1_%SAZ 1_^1_%JMP* C0110_(REGULAR MONITOR CALL GO ON_^1_%LDA- ACTLU,I_%PICKUP WORD CONTAINING UNSOL READ LU_^1_%STA- ELU,I_(SET UP ELU AND ESTAT2 TO LOOK LIKE MONITOR CAL_^1_%ENA $A_+SET FORMATTED READ AND ASC€€II MODE BITS_^1_%STA- ESTAT1,I_$NOW CONTINUE_^1_%LDA- TYPE,I_^1_%AND- LPMSK+14_$MASK WITH $3FFF_^1_%EOR- NZERO+14_$SET $C000_^1_%STA- TYPE,I_'SET INDICATOR THAT UNSOL READ IS IN PROGRESS_^1_%LDQ- ECCOR,I_%FILL BUFFER WITH $FFFF_^1TS_#SET A_^1_%STA- (ZERO),Q_$FILL WITH $FFFF_^1_%INQ 1_,INCREMENT POINTER IN BUFFER_^1_%LDA- ELSTWD,I_%CHECK FOR LAST WORD TO BE FILLED_^1_%EAQ A_^1_%S€€AZ 1_,DONE_^1_%JMP* TS_+DO ANOTHER WORD_^1*_]_^1C0110 EIN 0_^1_%LDA- ESTAT2,I_$CHECK STATUS_^1_%SAM C0130_(NOT GHOST INTERRUPT_!GO ON_^1_%JMP I0110_(RETURN FOR NEXT CHAR_^1C0130 LDA- ECHO,I_'CHECK IS ECHO REQUIRED_^1_%SAP C0160_(NO ECHO REQUIRED_^1_%LDA- ONEBIT+8_^1_%LDQ- EWES,I_^1_%OUT REJECX-*_%ENABLE TRANSMITT_^1_%ADQ- ZROBIT+7_^1_%LDA- TEMP,I_'CHARACTER_^1_%OUT REJECX-€€*_$ECHO CHARACTER_^1*_]_^1C0160 LDQ- ESTAT2,I_%PICKUP STATUS_^1_%QLS 6_,CHECK FOR EOT_^1_%SQP TERCK_(NOT SET_^1_%JMP* C0285_(EOT IS SET_^1TERCK RTJ* TERMCK_'GO CHECK FOR TERMINATION CHAR_^1_%NOP 0_,NOT A TRM CHAR_^1*_]_^1C0210 LDQ- TEMP,I_'PICKUP CHAR_^1_%ENA 2_^1_%AND- ESTAT1,I_$CHECK FOR FORMATTED REQUEST_^1_%SAZ C0220_(UNFORMATTED_^1_%TRQ A_,CHECK FOR LINE FEED_^1_%INA €€ -$A_^1_%SAZ C0215_(YES - IGNOR IT_^1_%INA -3_+CHECK FOR CARRIAGE RETURN_^1_%SAN 1_^1_%JMP* C0280_(YES - PROCESS IT CARRIAGE RETURN_^1_%INA -$52_)CHECK FOR CANCEL CHAR_^1_%SAN 1_^1_%JMP* C0330_(YES - PROCESS CANCEL - RUBOUT_^1_%ENA $10_^1_%AND- ESTAT1,I_$CHECK FOR PASS FLAG_^1_%SAZ C0220_(STORE CHAR_^1C0215 JMP* C0250_(GO READ FUNCTION_^1*_]_^1C0220 ENA 4_^1_%AND- ESTAT1,€€I_$CHECK FOR UPPER CHAR_^1_%SAN C0230_(NO LOWER CHARACTER_^1_%ENA -0_+UPPER CHAR INIDCATOR SET_^1_%LLS 24_+SET LOWER CHAR TO $FF_^1_%JMP* C0240_(STORE CHAR_^1*_]_^1C0230 TRQ A_,LOWER CHAR_^1_%EOR- NZERO+8_%$FF MASK_^1_%LDQ- ECCOR,I_$ADR OF BUFFER_^1_%AND- (ZERO),Q_#COMBINE CHARACTERS_^1C0240 LDQ- ECCOR,I_$ADR OF BUFFER_^1_%STA- (ZERO),Q_$STORE CHARACTER(S)_^1_%TRQ A_^1_%S€€UB- ELSTWD,I_$CHECK FOR LAST WORD STORED_^1_%SAZ C0260_(YES BUFFER FULL_^1_%ENA 4_^1_%EOR- ESTAT1,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- ESTAT1,I_^1_%ALS 13_^1_%SAM C0250_(LOWER CHAR_^1_%RAO- ECCOR,I_%IT IS UPPER CHAR NOW - INC ECCOR POINTER_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$CHECK FOR END OF BUFFER NOW_^1_%SAZ C0260_(YES - END OF BUFFER_^1C0250 JMP I0100_^1*_]_^1C0260 ENA€€ 2_^1_%AND- ESTAT1,I_$CHECK FOR FORMATTED REQ_^1_%SAZ C0285_^1C0270 ENA $10_*SET PASS FLAG_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* C0250_(SETUP READ NEXT FUNCTION_^1*_]_^1C0280 ENA $20_+CHECK FOR CANCEL SWITCH_^1_%AND- ESTAT1,I_^1_%SAN C0290_^1C0285 JMP C040X_(COMPLETE_^1C0290 ENA -$34_)CLEAR LOWER BIT, CANCEL AND PASS FLAGS_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%LD€€Q- COREIN,I_$RESTORE BUFFER ADDRESS_^1_%STQ- ECCOR,I_^1C0320 SET A_^1_%STA- (ZERO),Q_$BACKROUND BUFFER WITH $FFFF_^1_%INQ 1_^1_%LDA- ELSTWD,I_^1_%EAQ A_^1_%SAZ 1_^1_%JMP* C0320_^1_%JMP* C0250_^1*_]_^1C0330 ENA -$30_)CLEAR CANCEL AND PASS FLAG_^1_%AND- ESTAT1,I_^1_%INA $30_*SET CANCEL AND PASS FLAG_^1_%STA- ESTAT1,I_^1_%JMP* C0250_^1*_]_^1*_]_^1*_'TERMINATION CHARACTER CHECK€€_^1*_]_^1*_'IF NOT TERM CHAR RETURN+0_!IF TERM CHAR RETURN+1_^1*_]_^1TERMCK NOP 0_^1_%LDQ- TERM,I_'GET TERM CHARS_^1TERM1 SQZ TOUT_)NO MORE TERM CHARS_^1_%LRS 8_^1_%ARS 8_^1_%SUB- TEMP,I_'SUB INPUT CHAR_^1_%SAN NEXTER_^1_%ENA $40_^1_%EOR- ESTAT1,I_%SET COMPLETION FLAG_^1_%STA- ESTAT1,I_^1_%RAO* TERMCK_^1TOUT_!JMP* (TERMCK)_^1NEXTER JMP* TERM1_(CHECK OTHER TERM CHARACTER_^1*_€€]_^1REJECX JMP* REJ_*INTERNAL REJECT_^1_%JMP REJ1_)EXTERNAL REJECT_^1REJ_"JMP REJ2_^1*_]_^1WRITE LDA- ESTAT2,I_$CHECK STATUS FOR READY TO OUTPUT NEXT CHAR_^1_%AND- ONEBIT+11_#CHAR REQUEST BIT_^1_%SAN W0000_(READY - CONTINUE_^1_%JMP* W0130_(GO SET PROPER INTERRUPTS AND EXITS_^1W0000 ENA 2_^1_%AND- ESTAT1,I_$CHECK FOR FORMATTED REQ_^1_%TRA Q_-Q = 0 IF UNFORMATTED_^1_%ENA $10€€_^1_%AND- ESTAT1,I_$CHECK FOR FIRST CHAR_^1_%SAN W0020_(NOT FIRST CHAR_^1_%ENA $10_*YES, FIRST CHAR - CLEAR FIRST CHAR FLAG_^1_%SQN 1_^1_%ENA $30_*CLEAR LINE FEED FLAG ALSO IF UNFORMATTED_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%SQZ W0030_(CONTINUE IF UNFORMATTED_^1_%ENQ $D_+SEND CARRIAGE RETURN_^1_%JMP* W0110_(SEND CHARACTER ROUTINE_^1*_]_^1W0020 SQZ W0030_(NOT FIRST CHARAC€€TER - CONT IF FORMATTED_^1_%ENA $20_^1_%AND- ESTAT1,I_$CHECK FOR LINE FEED FLAG_^1_%SAN W0030_(NOT LINE FEED_^1_%ENA $20_^1_%EOR- ESTAT1,I_$CLEAR LINE FEED FLAG_^1_%STA- ESTAT1,I_$CLEAR_^1_%ENQ $A_+$A = LINE FEED_^1_%JMP* W0110_(SEND CHARACTER ROUTINE_^1*_]_^1W0030 ENA $40_^1_%AND- ESTAT1,I_$CHECK FOR COMPLETION FLAG_^1_%SAZ W0040_^1_%JMP* W0080_(FINISHED - DO COMP REQ AND C€€LEAN UP_^1W0040 LDQ- ECCOR,I_%GET CURRENT CORE ADDRESS_^1_%LDQ- (ZERO),Q_$GET DATA WORD_^1_%ENA 4_^1_%AND- ESTAT1,I_$CHECK FOR UPPER CHAR_^1_%SAN W0050_(NO IT IS LOWER CHAR_^1_%QRS 8_,UPPER CHAR_^1W0050 LDA- LPMSK+8_%$FF MASK/ PICKUP PROPER CHAR_^1_%LAQ A,Q_^1_%INA -$D_*CHECK FOR CARRIAGE RETURN_^1_%SAN W0060_(NOT CARRIAGE RETURN_^1_%ENA 2_,CR - CHECK FOR FORMATTED REQ_^1_€€%AND- ESTAT1,I_^1_%SAZ W0060_(UNFORMATTED_^1_%LDA =N$60_(YES, SET LINE FEED FLAG AND COMP FLAG_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* W0110_(GO OUTPUT_^1W0060 TRQ A_^1_%INA -3_^1_%SAZ W0080_(IT IS A ETX_^1_%TRQ A_^1_%EOR- LPMSK+8_^1_%SAN W0090_(IF CHARACTER = $FF, TERMINATE_^1W0080 JMP C0041_)DONE_^1W0090 LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$CHECK FOR ZERO WORDS REQUEST€€ED_^1_%SAZ W0100_(YES - SET COMPLETE INDICATOR_^1_%ENA 4_^1_%EOR- ESTAT1,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- ESTAT1,I_^1_%ALS 13_+CHECK FOR UPPER CHAR_^1_%SAM W0110_(NOT UPPER CHAR_^1_%RAO- ECCOR,I_%YES - CHECK FOR LAST WORD_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_^1_%SAN W0110_(NOT COMPLETE_^1W0100 ENA $40_+YES, SET COMPLETE FLAG_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1*_]_^1W01€€10 LDA- EWES,I_^1_%AND- ZROBIT+7_$ELIMINATE STATUS/FUNCTION BIT $FF7F_^1_%LLS 16_^1_%OUT REJECX-*_$OUTPUT CHARACTER_^1_%LDA- TIMVAL,I_$SET DIAGNOSTIC CLOCK_^1_%ARS 8_^1_%AND- LPMSK+8_^1_%STA- EDCLK,I_%SET DIAG CLOCK_^1W0130 LDQ- EWES,I_'EQUIP CODE_^1_%LDA =N$700_'REQUEST IN/OUT INT,XMIT_^1_%OUT REJECX-*_$ENABLE INTERRUPTS_^1_%JMP C0020_(NEXT PHYTAB_^1_%EJT_]_^1*_]_^1*_$*****€€************************************************************_^1*_$*_*MOTION REQUEST PROCESSING (REQ CODE = 14)_)*_^1*_$*****************************************************************_^1*_]_^1MOTION LDA- 4,Q_*GET MOTION DEFINITION WORD FROM PARAM LIST_^1_%SAM 1_,REQUEST CAN BE REPEATED_^1_%AND- NZERO+4_%$FFF0 MASK OUT DENSITY BITS IF NOT REPEAT REQ_^1_%STA- TEMP,I_^1_%SAP MOT2_€€^1_%AND- LPMSK+12_$$FFF SAVE REPEAT COUNT IF REPEAT REQEST_^1_%STA- ERRCOD,I_^1MOT2_!ENA 4_^1_%AND- ESTAT1,I_$CHECK FOR UPPER MOTION CHARACTER_^1_%SAZ MOT2A_^1_%JMP* MOT5_)NO, PROCESS LOWER CHARACTER_^1MOT2A LDA- TEMP,I_'CHECK WHICH TYPE REQUEST_^1_%SAP MOT3_)REGULAR_^1_%LDA- ERRCOD,I_$REPEAT REQUEST_^1_%SAZ MOT4_)IF COUNT IS ZERO, REPEATS COMPLETE_^1_%INA -1_^1_%STA- ERRCOD,€€I_^1_%LDA- TEMP,I_'GET MOTION CODE_^1_%CLR Q_^1_%ALS 1_^1_%LLS 3_,STRIP OFF MOTION CODE_^1_%STQ- MOTWD,I_^1_%SQZ MOT4_)MOTION CODE ZERO - ILLEGAL NO ACTION_^1_%JMP* MOT5_)PROCESS MOTION CODE_^1MOT3_!CLR Q_^1_%LLS 4_,GET NEXT MOTION CODE_^1_%STQ- MOTWD,I_^1_%STA- TEMP,I_^1_%SQN MOT5_^1MOT4_!JMP* W0080_(DONE_^1*_]_^1*_*PROCESS MOTION CODE_^1*_]_^1MOT5_!LDQ- MOTWD,I_^1_%INQ -€€1_^1_%ENA 4_^1_%AND- ESTAT1,I_^1_%SAZ MOT5A_^1_%LDA- MTN,B_(PROCESS LOWER CHARACTER_^1_%AND- LPMSK+8_^1_%JMP* MOT5B_^1MOT5A LDA- MTN,B_(PROCESS UPPER CHARACTER_^1_%ARS 8_^1_%AND- LPMSK+8_^1MOT5B TRA Q_^1_%ENA 4_^1_%EOR- ESTAT1,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- ESTAT1,I_^1_%SQN MOT6_^1_%JMP* MOT2_)IF CONTROL IS ZERO, IGNOR CONTROL_^1MOT6_!JMP* W0110_(SEND CHAR_^1_%END_]€_^__ PD1711 CSY/ B27 P€1_%NAM D1711_(DECK-ID B27 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_*1711 TELETYPE AND 713-10/711-100/713-120 CRT DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*P1711 ADC $520A_(00 SCHEDULER CALL_^1*_%ADC CI1711_'01 INITIATOR ADDRESS_^1*_%ADC CC1711_'02 CONTINUATOR ADDRESS_^€€1*_%ADC CE1711_'03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $0091_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $3006+T713_"08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%NUM 0_€€,13 ERROR CODE AND STARTING LOCATION_^1*_%NUM $7FFF_(14 RESERVED_^1*_%NUM 0_,15 RESERVED FOR FNR AND CMR_^1*_%NUM 0_,16 DRIVER FLAGS_^1*_%NUM 1_,17 HARDWARE PARITY CHECK FLAG_^1*_%ADC U1711_(18 DIAG LU_^1 SPC 1_]_^1_%ENT I1711,C1711,E1711_^1_(EXT_%ALTDEV_^1_(EXT_%MAKEQ_^1_%EXT MI_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATOR_^1_%€€EXT RLAQ_)RELEASE A/Q ALLOCATOR_^1_%SPC 2_^1*_*DRIVER MAY BE USED FOR 1713 IF ONLY KEYBOARD IS USED_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_"DIAG. CLOCK TIME_^1_%EQU LU(5)_$LOGICAL UNIT_^1_%EQU REQAD(6)_!REQUES ADDRESS_^1_%EQU CALL(7)_"HARDWARE ADDRESS_^1_%EQU ERRTAB(8) REQUEST STATUS_^1_%EQU SWITCH(9) SWITCH WORD_^1_%EQU CORE(10)_!CORE ADDRESS_^1_%€€EQU LASTP1(11) LAST CORE LOCATION + 1_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%EQU ERRCOD(13) ERROR CODE (THIS DRIVER NEVER MASS MEM.)_^1_%EQU COREIN(13)_^1_%EQU TEMP(15)_!TEMP STORAGE_^1_%EQU FLAG(16)_^1_%EQU TMPWRD(11)_^1_%EQU PARFLG(17)_"#0=HARDWARE PARITY CHECK_.MSOS4.1_^1_%EQU DIAGLU(18)_"DIAGNOSTIC LU_4**MSOS 4.1**_^1_%SPC 2_^1***_"ERROR CODES_^1_%SPC 2_^1_%EQU TIME€€RR(0) TIME OUT ERROR_^1_%EQU LOSDAT(1) LOST DATA_^1_%EQU ALARM(2)_!ALARM_^1_%EQU PARERR(3) PARITY ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_6*MSOS V4.0_^1_%EQU EXTREJ(6) EXTERNAL REJECT_6*MSOS V4.0_^1_%EJT_]_^1***_"MASKS_^1_%SPC 2_^1_%EQU XFF00($1A)_^1_%EQU ZERO($22)_^1_%EQU LPMSK(2)_H*MSOS V4.0_^1_%EQU TFORM(12)_G*MSOS V4.0_^1_%EQU H003F(8)_H*MSOS V4.0_^1_%EQU HFFF0€€($16)_^1_%EQU BIT2($25)_G*MSOS V4.0_^1_%EQU BIT3($26)_G*MSOS V4.0_^1_%EQU BIT7($2A)_KMSOS4.1_^1_%EQU B5A3($28)_^1_%EQU BIT9($2C)_^1_%EQU BIT11($2E)_^1_%EQU BIT14($31)_^1_%EQU BIT15($21)_^1_%SPC 1_^1***_"TIME OUT VALUES ARE IN SECONDS_^1_%SPC 1_^1_%EQU INPVAL(60) KEYBOARD INPUT TIMEOUT PERIOD_^1_%EQU OUTVAL(2) KEYBOARD OUTPUT TIMEOUT PERIOD_^1_%SPC 1_^1_%EQU AFNR($B5)€€_"FIND NEXT REQUEST_^1_%EQU ACOMPR($B6) COMPLETE REQUEST_^1_%EQU DISPAD($EA) DISPATCHER_^1_%EJT_]_^1E1711 STQ- I_,DIAGNOSTIC TIMER ERROR ENTRY_$**MSOS 4.1**_^1_(ENA_%TIMERR_^1_(JMP*_$SETCOD_^1_%SPC 2_^1WREOAL NUM $118_)WRITE MODE,ALARM/EOP INT._^1_%SPC 1_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1711 STQ- I_,INITIATOR ENTRY_2**MSOS 4.1**_^1_(RTJ-_$(AFNR)_^1_%JMP* CLROUT_€€'CLEAR AND EXIT_^1*_82 CARDS DELETED FOR PSR 83*2129_^1_%RTJ* CLEAR_(CLEAR DEVICE_^1_%ENA -8_^1_%AND- SWITCH,I_!CLEAR PASS SWITCH BIT 3_^1_%STA- SWITCH,I_^1_%LDA- CORE,I_#SET REPEAT LOCATION_^1_%STA- COREIN,I_^1_%LDQ- CALL,I_#SELECT WRITE MODE AND_0*MSOS V4.0_^1_%LDA* WREOAL_'INTERRUPT ON EOP OR ALARM_^1_%OUT ERROR-*_^1_%LDQ- REQAD,I_"REQUEST ADDRESS_6*MSOS V4.0_^1_%LDA- (ZERO),Q€€_H*MSOS V4.0_^1_%ARS 9_O*MSOS V4.0_^1_%AND- LPMSK+5_"GET REQUEST CODE_5*MSOS V4.0_^1_%INA -14_'CHECK CODE FOR MOTION REQUEST_(*MSOS V4.0_^1_%SAN SENULL_#SKIP IF NOT MC_7*MSOS V4.0_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_'GET PARAMETER STRING_1*MSOS V4.0_^1_%SAP P3-*-1_#SKIP IF NOT ITER. TYPE PARA._)*MSOS V4.0_^1_%AND =N$7000_"GET ONLY PARA. IF IT€€ER._.*MSOS V4.0_^1P3_#AND- HFFF0_$GET THREE PARAMETERS_1*MSOS V4.0_^1_%STA- TMPWRD,I_!SAVE PARA. LIST_6*MSOS V4.0_^1_%JMP MOTREQ_#PROCESS MOTION REQUEST_/*MSOS V4.0_^1SENULL ENA 1_^1_%AND- SWITCH,I_!CHECK IF READ OR WRITE_^1_%SAZ SENBEL_'SKIP IF READ MODE TO OUTPUT BELL_%MSOS4.1_^1_%JMP AWRITE_#GO PREP. FOR WRITE_^1SENBEL ENA $07_*BELL CHARACTER_8MSOS4.1_^1_%SPC 2_^1SENDCH LD€€Q- CALL,I_#OUTPUT ROUTINE_^1_%INQ -1_^1OUTOUT OUT ERROR-*_^1_%SPC 2_^1EXIT_!ENA 0_^1_%STA ROFLAG_^1_%LDQ- CALL,I_^1_%INP ERROR-*_^1_%STA- STATUS,I_!SAVE STATUS_^1_%AND- BIT9_%READ MODE BIT_^1_%ENQ OUTVAL_#OUTPUT TIME OUT PERIOD_^1_%SAZ SETIME_#SKIP IF WRITE MODE_^1_%ENQ INPVAL_#INPUT TIMEOUT PERIOD_^1SETIME STQ- TIME,I_#SET CLOCK_^1_%JMP- (DISPAD)_!GO TO DISPATCHER_^1CLEAR€€ NUM 0_,SUBROUTINE TO CLEAR DEVICE_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%INP 1_,READ TO CLEAR DATA IF ANY_^1_%NOP 0_^1_%INQ 1_^1_%ENA 3_^1_%OUT 1_,CLEAR CONTROLLER AND INT._^1_%NOP 0_^1_%INP 1_,READ STATUS_^1_%NOP 0_^1_%STA- STATUS,I_$A = STATUS, Q = DIRECTOR CODE_^1_%JMP* (CLEAR)_%RETURN_^1_%EJT_]_^1***_"DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C1711 STQ- I_,CONTINUATOR_6**MSOS €€4.1**_^1_%LDQ- CALL,I_^1_%INP ERROR-*_"GET STATUS_^1_%STA- STATUS,I_^1_%ENA 6_^1_%OUT ERROR-*_%CLEAR AND SELECT DATA INTERRUPT_^1_%LDA- STATUS,I_^1_%AND- BIT11_$CHECK FOR MANUAL INTERRUPT_^1_%SAN GOMAN_$SKIP IF MANUAL INTERRUPT_^1_%JMP* NOMAN_^1GOMAN LDA- FLAG,I_'MI BEFORE_^1_%SAZ TAGIT1_'NO_^1*_82 CARDS DELETED (FOR 97*3168)_^1_%JMP- (DISPAD)_$YES, WAIT FOR COMPLETION_^1TAGI€€T1 RAO- FLAG,I_'SET FLAG_^1_%RTJ RQAQ_)REQUEST A/Q ALLOCATION_^1_%STQ- I_^1*_81 CARD DELETED (FOR 97*3168)_^1_%ENA 0_,RESET FLAG_^1_%STA- FLAG,I_^1_%LDA- (I)_*PICKUP SCHEDULER CALL FROM PHYSTB_^1_%STA* SCHCAL_'MAKE UP SCHEDULER CALL_^1_%RTJ- ($F4)_(SCHEDULE MI_^1SCHCAL NUM $1200_^1_%ADC MI_^1_%RTJ RLAQ_)RELEASE A/Q_^1_%STQ- I_^1_%ENA B5A3_^1_%AND- STATUS,I_!CHECK FOR DATA OR €€ALARM_^1_%SAN JNOMAN_#SKIP IF DATA OR ALARM_^1*_82 CARDS DELETED_^1*_81 CARD DELETED (FOR 97*3168)_^1_%JMP- (DISPAD)_$EXIT_^1JNOMAN JMP* NOMAN_^1_%SPC 2_^1ERROR JMP* INTRNL_J*MSOS V4.0_^1_%ENA EXTREJ_#EXTERNAL REJECT 6_4*MSOS V4.0_^1_%JMP* SETCOD_J*MSOS V4.0_^1INTRNL ENA INTREJ_#INTERNAL REJECT 5_4*MSOS V4.0_^1SETCOD_!LDQ-_$LU,I_^1_(QLS_%6_^1_(EAQ_%A_^1_(STA-_$ERRCOD,I_^1_(LDA€€-_$BIT14_^1_(EOR-_$ERRTAB,I_^1_(STA-_$ERRTAB,I_^1_%RTJ* CLEAR_(CLEAR DEVICE_^1_%LDA- LU,I_^1_%SAN 1_,EXIT IF NOT ASSIGNED_^1_%JMP- (DISPAD)_^1_%RTJ MAKEQ_^1_(ENA_%-1_^1_(STA-_$TIME,I_.CLEAR TIME_^1*_82 CARDS DELETED (FOR 97*3168)_^1_(LDQ-_$ERRCOD,I_^1_%LDA- LU,I_)DO NOT REPORT ERROR_.**MSOS 4.1**_^1_%SUB- DIAGLU,I_$ON DIAGNOSTIC LU_1**MSOS 4.1**_^1_%SAN LOGIT_J**MSOS 4.1**_^1_%J€€MP* COMPRQ_I**MSOS 4.1**_^1LOGIT RTJ+ LOG_*LOG ERROR IN EF_2**MSOS 4.1**_^1_(JMP+_$ALTDEV_^1NOMAN LDA- LU,I_^1_%SAN NOMAN1-*-1_^1CLROUT RTJ* CLEAR_(CLEAR AND EXIT_^1_%JMP- (DISPAD)_$EXIT_^1_%EJT_R*MSOS V4.0_^1NOMAN1 ENA $20_'ALARM BIT_<*MSOS V4.0_^1_%AND- STATUS,I_!CHECK FOR ALARM_6*MSOS V4.0_^1_%SAN ALRINT_#SKIP IF ALARM INTERRUPT_.*MSOS V4.0_^1_%LDA- SWITCH,I_!CHECK FOR MOTI€€ON REQUEST_-*MSOS V4.0_^1_%SAP CHKD-*-1_!SKIP IF NOT MOTION REQUEST_+*MSOS V4.0_^1_%JMP* MOTRTN_#MOTION REQUEST RETURN_0*MSOS V4.0_^1CHKD_!ENA 8_)DATA BIT_=*MSOS V4.0_^1_%AND- STATUS,I_!CHECK FOR DATA INTERRUPT_-*MSOS V4.0_^1_%SAZ DONE_)SKIP IF NOT_^1_%JMP* NOTDON_#PROCESS DATA INTERRUPT_/*MSOS V4.0_^1ALRINT ENA $40_'BIT 6_@*MSOS V4.0_^1_%AND- STATUS,I_!CHECK FOR LOST DATA_^1_%€€SAN A1_+SKIP IF LOST DATA_^1_%LDA- PARFLG,I_$CHECK FOR HARDWARE PARITY CHECK_^1_%SAZ A0_+SKIP IF NOT_^1_%LDA- BIT7_^1_%AND- STATUS,I_$CHECK FOR PARITY ERROR_^1_%SAN A2_+SKIP IF PARITY ERROR_^1A0_#ENA ALARM_^1_%JMP* SETCOD_J*MSOS V4.0_^1A1_#ENA LOSDAT_#LOST DATA ERROR 1_4*MSOS V4.0_^1_%JMP* SETCOD_J*MSOS V4.0_^1A2_#ENA PARERR_'PARITY ERROR 3_^1_%JMP* SETCOD_^1*_83 CARDS DELETE€€D_^1DONE_#LDQ-_$CALL,I_.NO,CLEAR_^1_(ENA_%2_3INTERRUPTS_^1_(OUT_%ERROR-*_^1_(ENA_%-1_2CLEAR TIME_^1_(STA-_$TIME,I_^1_(INP_%ERROR-*_-SAVE STATUS_^1_(STA-_$STATUS,I_^1_%RTJ MAKEQ_^1COMPRQ RTJ- (ACOMPR)_$GO TO COMPLETE THE STATUS_(**MSOS 4.1**_^1*_82 CARDS DELETED (FOR 97*3168)_^1_%JMP I1711+1_H**MSOS 4.1**_^1_%EJT_]_^1***_"PROCESS DATA INTERRUPT_^1_%SPC 2_^1NOTDON_!ENA_%1_^1_(AND-€€_$SWITCH,I_,OPERATION_^1_(SAZ_%1_^1_(JMP*_$AWRITE_.YES_^1_(ENA_%2_3NO,BUSY_^1_(AND-_$STATUS,I_^1_%SAZ NFREAD_^1_%JMP READ_^1NFREAD_!LDQ-_$CALL,I_.CLEAR INT.AND_^1_(ENA_%2_3SET READ MODE_^1_(OUT_%ERROR-*_-SELECT INT.ON_^1_(LDA*_$B9A4A2_.DATA AND ALARM_^1_%JMP OUTOUT_^1B9A4A2 NUM $214_^1_%EJT_]_^1***_"PROCESS MOTION REQUEST_^1_%SPC 2_^1NXTMCR LDA- SWITCH,I_H*MSOS V4.0_^1_%EOR- B€€IT15_$CLEAR BIT 15 FROM_4*MSOS V4.0_^1_%STA- SWITCH,I_!PREVIOUS MOTION REQUEST_.*MSOS V4.0_^1MOTREQ LDA- TMPWRD,I_!GET PARAMETER STRING_1*MSOS V4.0_^1_%CLR Q_O*MSOS V4.0_^1_%LLS 4_)GET ONE PARA. FROM STRING_,*MSOS V4.0_^1_%SQZ TRMMCR_#SKIP IF ZERO PARA_4*MSOS V4.0_^1_%STA- TMPWRD,I_!SAVE REMAINDER OF STRING_-*MSOS V4.0_^1_%INQ -2_(IS IT WEOF_;*MSOS V4.0_^1_%SQZ TOPFRM_#SKIP IF€€ WEOF_9*MSOS V4.0_^1_%INQ -2_(IS IT REWIND/UNLOAD_2*MSOS V4.0_^1_%SQZ TRMMCR_#SKIP IF YES_:*MSOS V4.0_^1_%JMP* MOTREQ_#GET NEXT PARAMETER_3*MSOS V4.0_^1TRMMCR JMP* DONE_L*MSOS V4.0_^1_%SPC 2_O*MSOS V4.0_^1***_"TOP OF FORM_J*MSOS V4.0_^1_%SPC 1_^1TOPFRM LDA- SWITCH,I_H*MSOS V4.0_^1_%AND- H003F_$SAVE LOWER SWITCHS_3*MSOS V4.0_^1_%EOR =N$81C0_"SET BIT 15 AND NULL COUNT FOR 7_%*MS€€OS V4.0_^1_%STA- SWITCH,I_!INTO SWITCH_:*MSOS V4.0_^1_%ENA TFORM_$ASCII TOP OF FORM (0C)_/*MSOS V4.0_^1_%JMP* TOSND_$OUTPUT TOP OF FORM_3*MSOS V4.0_^1_%EJT_]_^1AWRITE_!ENA_%2_3FORMATTED_^1_(AND-_$SWITCH,I_^1_%TRA Q_,Q = 0 IF UNFORMATTED_^1_(ENA_%$10_11ST CHAR._^1_(AND-_$SWITCH,I_^1_(SAN_%NOT1ST-*-1_^1_(ENA_%$10_1YES,CLEAR 1ST_^1_%SQN 1_,SKIP IF FORMATTED_^1_%ENA $30_*RESET LINE€€ FEED FLAGIF UNFORMATTED_^1_(EOR-_$SWITCH,I_,CHAR.SWITCH_^1_(STA-_$SWITCH,I_,SEND OUT A_^1_%SQZ NOCONT-*-1_"CONTINUE IF UNFORMATTED_^1_(ENA_%$D_2MARRIAGE_^1TOSND JMP SENDCH_#RETURN_^1NOT1ST SQZ NOCONT-*-1_"SKIP IF UNFORMATTED_/58*1183_^1_%ENA $20_M58*1183_^1_(AND-_$SWITCH,I_,SET_^1_(SAN_%NOCONT-*-1_^1_%RTJ* CHKTYP_'CHECK IF TTY OR DISPLAY._+*MSOS V4.1_^1_%LDA* BIT6T9_'DISPLAY9€€_;*MSOS V4.1_^1_%INA $20_*TTY._?*MSOS V4.1_^1_(EOR-_$SWITCH,I_,AND SEND OUT_^1_(STA-_$SWITCH,I_,A LINE FEED_^1_(ENA_%$A_^1_%JMP* TOSND_$TO SENDCH_^1_%SPC 2_^1***_"RETURN FROM TOP OF FORM_^1_%EQU MOTRTN(*)_G*MSOS V4.0_^1_%SPC 2_^1NOCONT_!LDA-_$SWITCH,I_,ANY CANCELS_^1_(AND*_$BIT6A7_.TO BE SENT_^1_(SAZ_%NOSPCC-*-1_^1_(LDA-_$SWITCH,I_,DECREMENT_^1_(INA_%-$40_0CANCEL COUNT_^1_(STA-€€_$SWITCH,I_^1_%RTJ* CHKTYP_'CHECK IF TTY OR DISPLAY._+*MSOS V4.1_^1_%JMP* SEND01_'DISPLAY._;*MSOS V4.1_^1_%ENA $7F_*TTY._?*MSOS V4.1_^1SEND01 JMP SENDCH_'GO OUTPUT CHARACTER._/*MSOS V4.1_^1NOSPCC LDA- SWITCH,I_H*MSOS V4.0_^1_%SAP 1_)SKIP IF NOT MOTION_3*MSOS V4.0_^1_%JMP* NXTMCR_#GET NEXT PARAMETER_3*MSOS V4.0_^1_%AND- BIT3_%CHECK COMPLETION SWITCH BIT_**MSOS V4.0_^1_(SAZ_%1_^1_€€(JMP*_$DONE_0YES,FINISHED_^1_(LDQ-_$CORE,I_.NO,PICK UP_^1_(LDQ-_$(ZERO),Q_,DATA WORD_^1_(ENA_%4_3UPPER CHAR._^1_(AND-_$SWITCH,I_^1_(SAN_%LOWER-*-1_^1_(QRS_%8_3YES,SHIFT_^1LOWER_"ENA_%$7F_1NO,CLEAR_^1_(LAQ_%A,Q_1UPPER CHAR._^1_%INA -3_+IS IT AN E.O.T._^1_%SAN NOTEOT_'NO_^1_%JMP* DONE_)YES, FINISHED_^1NOTEOT TRQ A_^1_(SAN_%NOTNUL-*-1_*NULL_^1_(ENA_%$7F_1YES,SUBSTITUTE_^1_(ENQ_%$7F€€_1CANCEL_^1NOTNUL_!INA_%-$D_1CARRIAGE RET._^1_(SAN_%NOTCR-*-1_^1_%RTJ* CHKTYP_'CHECK IF TTY OR DISPLAY._+*MSOS V4.1_^1_%LDA* BIT6T9_'DISPLAY._;*MSOS V4.1_^1_%INA $20_*TTY._?*MSOS V4.1_^1_(JMP*_$GOTCR_/CONTROL_^1NOTCR_"INA_%1_3NO,FORM OUT_^1_(SAZ_%GOTTAB-*-1_^1_(INA_%1_3NO,VERTICAL_^1_(SAZ_%GOTTAB-*-1_*TAB_^1_(INA_%2_3NO,HORIZONTAL_^1_(SAN_%NOCR-*-1_,TAB_^1GOTTAB_!LDA*_$BIT6A7_.YES€€,MODIFY_^1GOTCR_"EOR-_$SWITCH,I_,SWITCH_^1_(STA-_$SWITCH,I_^1NOCR_#TRQ_%A_3OUTPUT_^1_%INA -$7F_)TEST FOR RUBOUT_^1_%SAN NOCR1_(SKIP IF NOT A RUBOUT CHARACTER_^1_%RAO* ROFLAG_'SET RUBOUT PRESENT FLAG_^1_%JMP* RUBOUT_'DON'T OUTPUT A RUBOUT_^1NOCR1 ENA 0_,RESET RUBOUT PRESENT FLAG_^1_%STA* ROFLAG_^1_%TRQ A_,RESTORE ORIGINAL CHARACTER_^1_%LDQ- CALL,I_^1_(INQ_%-1_2CHARACTER_^1_(OUT€€_%TOEROR-*_^1RUBOUT LDA- CORE,I_'LAST WORD_^1_(SUB-_$LASTP1,I_^1_(SAZ_%COMPLT-*-1_^1_(ENA_%4_3NO,REVERSE_^1_(EOR-_$SWITCH,I_,UPPER LOWER_^1_(STA-_$SWITCH,I_,SWITCH_^1_%AND- BIT2_(NOW SET FOR_^1_%SAN GOGODI_%UPPER_^1_(RAO-_$CORE,I_.YES,INCREMENT_^1_(LDA-_$CORE,I_.CORE LOCATION_^1_(SUB-_$LASTP1,I_,NOW LAST_^1_(SAN_%GOGODI-*-1_*NO_^1COMPLT_!ENA_%8_3YES,SET_^1_(EOR-_$SWITCH,I_,COMPLET€€EO BIT_^1_(STA-_$SWITCH,I_,AND EXIT_^1_%JMP* GOGODO_^1GOGODI LDA* ROFLAG_'RUBOUT PRESENT FLAG SET_^1_%SAZ GOGODO_'NO_^1_%JMP C1711+1_%YES, GO GET THE NEXT CHARACTER_^1GOGODO JMP EXIT_^1ROFLAG NUM 0_,RUBOUT FLAG PRESENT_^1BIT6A7 NUM $3C0_^1BIT6T9 NUM $C0_N*MSOS V4.1_^1CHKTYP NUM 0_,ROUTINE CHECKS FOR TTY OR DISPLAY *MSOS V4.1_^1_%LDA- ERRTAB,I_$FETCH TYPE CODE FROM PDT._)*MS€€OS V4.1_^1_%ARS 4_O*MSOS V4.1_^1_%AND- LPMSK+7_%SAVE ONLY THE TYPE CODE._**MSOS V4.1_^1_%INA -4_N*MSOS V4.1_^1_%SAZ 1_O*MSOS V4.1_^1_%RAO* CHKTYP_'RETURN AT +2 IF TTY. A = 0._'*MSOS V4.1_^1_%CLR A_N**MSOS 4.1**_^1_%JMP* (CHKTYP)_I*MSOS V4.1_^1READ_#INQ_%-1_2INPUT A CHAR_^1_(ENA_%0_^1_(INP_%TOEROR-*_^1_%STA- TEMP,I_^1_%LDA- PARFLG,I_^1_%SAN NOPAR_(SKIP IF HARDWARE PARITY CHECK_€€^1_%LDA- TEMP,I_^1_(SPA-_$TEMP,I_^1_(SAN_%NOPAR-*-1_+PARITY OK_^1_%ENA PARERR_#PARITY ERROR 3_7*MSOS V4.0_^1_%JMP SETCOD_J*MSOS V4.0_^1TOEROR JMP* TR5_M*MSOS V4.0_^1_%JMP ERROR+1_"EXTERNAL REJECT_6*MSOS V4.0_^1TR5_"JMP ERROR_$INTERNAL REJECT_6*MSOS V4.0_^1NOPAR_"ENA_%$7F_1YES,STRIP_^1_(AND-_$TEMP,I_.PARITY BIT_^1_(TRA_%Q_^1_(ENA_%2_3FORMATTED_^1_(AND-_$SWITCH,I_^1_(SAZ_%ZIFORM-€€*-1_^1_(TRQ_%A_3YES,_^1_(INA_%-$A_1LINE FEED_^1_(SAZ_%PASSIT-*-1_*YES,IGNORE IT_^1_(INA_%-3_2NO,CARRIAGE_^1_(SAN_%1_3RETURN_^1_(JMP*_$CARRET_.YES_^1_(INA_%-$72_0NO,CANCEL_^1_(SAN_%1_^1_(JMP*_$CANCEL_.YES_^1_(ENA_%$10_1NO,PASS SWITCH_^1_(AND-_$SWITCH,I_,SET_^1_(SAZ_%1_^1PASSIT_!JMP*_$TGODIS_.YES,EXIT_^1ZIFORM TRQ A_O*MSOS V4.1_^1_%INA -$61_)LOWER CASE A_6*MSOS V4.1_^1_%SAM ZIFORN€€_'SKIP IF LESS THAN LOWER CASE A._"*MSOS V4.1_^1_%INA -$1A_)CHECK RANGE TO LOWER CASE Z._%*MSOS V4.1_^1_%SAP ZIFORN_'SKIP IF ABOVE LOWER CASE CHARACTERS*MSOS V4.1_^1_%INQ -$20_)DROP LOWER CASE BIT._.*MSOS V4.1_^1ZIFORN ENA 4_,CHECK IF UPPER CHARACTER._)*MSOS V4.1_^1_(AND-_$SWITCH,I_^1_(SAN_%LOWLOW-*-1_^1_(ENA_%-0_2YES_^1_(LLS_%24_^1_(JMP*_$TOSTO_^1LOWLOW_!TRQ_%A_3NO_^1_(EOR-_$X€€FF00_^1_(LDQ-_$CORE,I_^1_(AND-_$(ZERO),Q_^1TOSTO_"LDQ-_$CORE,I_^1_(STA-_$(ZERO),Q_^1_(LDA-_$CORE,I_.LAST LOC_^1_(SUB-_$LASTP1,I_^1_(SAZ_%TGETOU-*-1_*YES,GETOUT_^1_(ENA_%4_-+NO,REVERSE_^1_(EOR-_$SWITCH,I_,UPPER-LOWER_^1_(STA-_$SWITCH,I_,SWITCH_^1_%AND- BIT2_%CHECK IF UPPER_7*MSOS V4.0_^1_%SAN TGODIS_#SKIP IF UPPER_8*MSOS V4.0_^1_.RAO-_$CORE,I_.YES,INCREMENT_^1_(LDA-_$CORE,I_.CORE L€€OCATION_^1_(SUB-_$LASTP1,I_,NOW LAST_^1_(SAZ_%NGODIS-*-1_^1TGODIS JMP* GOGODI_#TO EXIT_>*MSOS V4.0_^1NGODIS_!ENA_%2_^1_(AND-_$SWITCH,I_^1_(SAN_%NOG-*-1_^1TGETOU_!ENA_%8_3SELECT EOT_^1_(LDQ-_$CALL,I_.INTERRUPT_^1_(OUT_%TOEROR-*_^1*_81 CARD DELETED_^1_%JMP* GOGODI_#TO EXIT_>*MSOS V4.0_^1_%ADC INPVAL_^1NOG_$ENA_%$10_1TURN ON PASS_^1_(EOR-_$SWITCH,I_,SWITCH_^1_(STA-_$SWITCH,I_^1_(JMP*€€_$TGODIS_^1CARRET_!ENA_%$20_1CANCEL SWITCH_^1_(AND-_$SWITCH,I_,SET_^1_(SAN_%1_^1_(JMP*_$TGETOU_.NO_^1_(ENA_%-$34_0YES,CLEAR PASS_^1_(AND-_$SWITCH,I_,CANCEL AND_^1_(STA-_$SWITCH,I_,LOWER_^1_(LDQ-_$COREIN,I_,INITIALIZE_^1_(STQ-_$CORE,I_.CORE LOCATION_^1MORUB_"SET_%A_3TO ALL ONES_^1_(STA-_$(ZERO),Q_^1MORUB0 EQU MORUB0(*)_^1_(LDA-_$LASTP1,I_^1*_8PSR 89*2925 DELETED_^1_(EAQ_%A_^1_%SAZ €  MORUB1_'SKIP IF ALL DATA ERASED_^1_%SET A_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%JMP* MORUB0_^1MORUB1 EQU MORUB1(*)_^1_(JMP*_$TGODIS_^1CANCEL_!ENA_%-$30_0CANCEL-SET_^1_(AND-_$SWITCH,I_,PASS AND_^1_(INA_%$30_1CANCEL SWITCH_^1_(STA-_$SWITCH,I_^1_(JMP*_$TGODIS_^1_(END_^__ PD1720P CSY/ B28 P€1_%NAM D1720P_'DECK-ID B28 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_*1720-1 PAPER TAPE PUNCH DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$--------_^1*S1_"THIS PROGRAM IS THE MSOS DRIVER FOR THE 1720-1 PAPER_^1*_$TAPE PUNCH. THE DRIVER IS OPERATED BY THE MONITOR_^1*_$REQUESTS WRITE,€€ FWRITE AND MOTION_^1*_]_^1*S1_"ENTRY._^1*_$-----_^1*S1_"THE DRIVER HAS 3 DECLARED ENTRY POINTS._^1*_*I1720P - THE INITIATOR._^1*_*C1720P - THE CONTINUATOR._^1*_*E1720P - THE DIAGNOSTIC TIME OUT ENTRY._^1*S1_"UPON ENTRY, THE Q REGISTER CONTAINS THE PHYSICAL_^1*_$DEVICE TABLE ADDRESS._^1*S1_"THERE IS AN IMPLIED ENTRY POINT, START, AT THE_^1*_$BEGINNING OF THE PROGRAM. START IS ENTER€€ED BY MMEXEC_^1*_$WHEN THE DRIVER IS MASS MEMORY RESIDENT. AT THIS_^1*_$ENTRY, THE AQ REGISTERS CONTAIN -_^1*_*A = FIRST WORD ADDRESS OF DRIVER._^1*_*Q = PDT ADDRESS._^1*_]_^1*S1_"DESCRIPTION._^1*_$-----------_^1*S1_"UPON ENTRY, THE DRIVER CALL THE FIND NEXT REQUEST_^1*_$ROUTINE. THE DRIVER INITIALIZES THE PDT AND STARTS_^1*_$I/O OPERATION. DATA IS PUNCHED A FRAME AT A TIME_^1*_$FR€€OM THE REQUESTORS BUFFER, TWO FRAMES PER_^1*_$WORD. INTERRUPTS ARE USED TO SIGNIFY THE DATA AVAIL-_^1*_$ABLE CONDITION._^1*_]_^1*_$THE CONTINUATOR IS ENTERED TO SERVICE THE INTERRUPT._^1*_$I/O ERROR CONDITIONS ARE DETECTED BY THE CONTINUATOR._^1*_$ERRORS ARE LOGGED IN THE ENGINEERING FILE._^1*_$WHEN THE CONTINUATOR DETECTS THAT DATA TRANSFER IS_^1*_$COMPLETE, THE COMPLETE REQUEST R€€OUTINE IS CALLED,_^1*_$AND THE DRIVER INTIATOR IS REENTERED._^1*_]_^1*_$WHEN THERE ARE NO MORE REQEUSTS TO PROCESS, THE_^1*_$BUFFER IN WHICH THE DRIVER IS EXECUTING IS RE-_^1*_$LEASED BY CALLING MAS300, IN MMEXEC._^1*_]_^1*E_#PARAMETERS._^1*_$----------_^1*_]_^1*P1720P ADC $520E_(00 SCHEDULE CALL_^1_%EJT_]_^1*_%ADC I1720P_'01 INITIATOR ADDRESS_^1*_%ADC C1720P_'02 CONTINUATOR €€ADDRESS_^1*_%ADC E1720P_'03 TIME OUT ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $00C1_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $2004+T1720P 08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%A€€DC L1720P_'13 DRIVER LENGTH_^1*_%ADC S1720P_'14 MASS MEMORY SECTOR NUMBER_^1*_%NUM 0_,15 CHECKSUM AND ERROR CODE_^1*_%NUM 0_,16 TEMPORARY_^1*_%NUM 0_,17 RETURN ADDRESS_^1*_%NUM 0_,18 TEMPORARY ADDRESS_^1*_%NUM 0_,19 ERROR CODE_^1*_%NUM 0_,20 TEMPORARY_^1*_%NUM 0_,21 LOST DATA_^1*_%ADC U1720P_'22 DIAGNOSTIC LOGICAL UNIT_^1*_%EQU T1720P(59*$10) TYPE CODE_^1_%SPC €€ 2_^1*_]_^1*_$EXTERNAL PROGRAMS_^1*_]_^1_%ENT I1720P,C1720P,E1720P_^1_%EXT MAS300_'RELEASE DRIVER BUFFER_^1_%EXT MAKEQ_(MAKE ERROR CODE_^1_%EXT ALTDEV_'ALTERNATE DEVICE HANDLER_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATION_+**MSOS 4.1**_^1_%EJT_]_^1*_]_^1*_$PYSTAB EQUATES_^1*_]_^1_%EQU €€INIADR(1)_^1_%EQU CONADR(2)_^1_%EQU ERRADD(3)_^1_%EQU TIME(4)_^1_%EQU LU(5)_^1_%EQU REQAD(6)_!REQUEST ADDRESS_^1_%EQU CALL(7)_^1_%EQU ERRTAB(8)_^1_%EQU SWITCH(9)_^1_%EQU CORE(10)_^1_%EQU LASTP1(11)_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%EQU CHKSUM(16) CHECKSUM_^1_%EQU LENGTH(17) RECOR LENGTH_^1_%EQU ERRCOD(19) ERROR CODE_^1_%EQU TEMP(20)_!TEMP. STORAGE_^1_%EQU TMPWR€€D(20) MOTION REQUEST PARAMETERS_^1_%EQU LOSDAT(21) FLAG FOR LOST DATA_^1_%EQU DIAGLU(22)_"DIAGNOSTIC LU_^1_%SPC 2_^1*_]_^1*_$SYSTEM EQUATES_^1*_]_^1_%EQU ONEBIT($23)_^1_%EQU BIT2($25)_^1_%EQU COMPRQ($B6)_^1_%EQU AFNR($B5)_^1_%EQU DISP($EA)_#DISPATCHER_^1_%EQU BIT5($28),BIT7($2A),BIT8($2B)_^1_%EQU M007F($9)_#$007F MASK_^1_%EQU HFFF0($16)_^1_%EQU H001F(7)_^1_%EQU LDLNG(60)€€ LEADER LENGTH (6 INCHES)_^1_%EQU EOFCOD($1C)_!END-OF-FILE CODE_^1_%EQU BIT14($20),BIT15($21)_^1_%EQU ZERO($22)_^1_%EQU INTVAL(2)_^1*_]_^1*_$ERROR EQUATES_^1*_]_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU ALARM(2)_!ALARM ERROR_^1_%EQU PARITY(3)_#PARITY ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU INVLID(27)_"INVALID DM STATUS_^1_%EQU €€ECHO(30)_$ECHO ERROR_^1_%EQU TAPLOW(32)_"TAPE LOW_^1****_]_^1_%EJT_]_^1*_]_^1*_$ENTRY FROM MMEXEC. Q= PDT, A= FWA_^1*_]_^1START STQ- I ENTER ADDRESS OF START IN A_^1_%LDQ =XE1720P-START_^1_%AAQ Q_^1_%STQ- ERRADD,I_!ERROR ADDRESS_^1_%LDQ =XC1720P-START_^1_%AAQ Q_^1_%STQ- CONADR,I CONTINUATOR ADDRESS_^1_%LDQ =XI1720P-START_^1_%AAQ A_^1_%STA- INIADR,I_!INITATOR ADDRESS_^1_%JMP€€* I1720P+1_^1MS300 ADC MAS300_^1CRLF_!NUM $0D0A_(CARRAGE RETURN LINE FEED_^1B6A7_!NUM $C0_^1_%EJT_]_^1*_]_^1*_$DRIVER INITATOR ENTRY. Q= PDT_^1*_]_^1_%SPC 2_^1I1720P STQ- I_,STORE PDT ADDRESS_^1_%RTJ- (AFNR)_'FIND NEXT REQUEST_^1_%JMP* (MS300)_^1_%LDQ- REQAD,I_^1_%LDA- (ZERO),Q_$CHECK REQUEST CODE_^1_%ARS 9_^1_%AND- H001F_^1_%INA -14_'FOR MOTION REQUEST_^1_%SAN NOTMC_$SKIP €€IF NOT MOTION_^1_%STA- CORE,I_^1_%STA- LASTP1,I_^1_%LDA- 4,Q_'PICKUP PARAMETER STRING_^1_%SAP P3-*-1_#SKIP IF NOT ITER. TYPE_^1_%AND =N$7000_"GET ONLY PARA._^1P3_#AND- HFFF0_$GET THREE PARA,S_^1_%STA- TMPWRD,I_!SAVE PARA. STRING_^1_%RTJ+ RQAQ_)REQUEST A/Q ALLOCATION_^1_%STQ- I_^1_%JMP MOTREQ_#PROCESS MOTION REQUEST_^1NOTMC RTJ+ RQAQ_)REQUEST A/Q ALLOCATION_^1_%STQ- I_^1_%LDQ- C€€ALL,I_^1_%ENA $16_*ALARM,DATA,-CLEAR INT_^1_%OUT STCK60-*_^1_%ENA INTVAL_'SET CLOCK COUNT TO 1_^1_%STA- TIME,I_^1_%ENA 0_^1_%STA- CHKSUM,I_$CLEAR CHECK SUM_^1_%JMP- (DISP)_^1_%EJT_]_^1*_]_^1*_$DRIVER CONTINUATOR ENTRY. Q= PDT_^1*_]_^1_%SPC 2_^1C1720P STQ- I_,SAVE PDT ADDRESS_^1_%LDQ- CALL,I_'PICK UP CONNECT CODE_^1_%INP STCK60-*_$INPUT STATUS_^1_%STA- STATUS,I_$STORE STATUS I€€N PYSTAB_^1_%ENA $16_*CLEAR/SELECT INTERRUPTS_^1_%OUT STCK60-*_^1_%LDA- STATUS,I_^1_%TRA Q_^1_%AND- ONEBIT+10_#CHECK DEVICE MESSAGE_^1_%SAZ STCK15_'OR LOST DATA SKIP IF NO_^1_%JMP PTP500_^1STCK15 TRQ A_^1_%AND- ONEBIT+5_$MASK FOR ALARM_^1_%SAZ STCK20_'NO ALARM NORMAL RETURN_^1_%JMP STCK40_^1STCK20 STA- LOSDAT,I_^1_%LDA- SWITCH,I_^1_%SAP C1_^1_%JMP MOTRTN_^1C1_#AND- BIT5_%€€CHECK FOR CONTROL SWITCH SET_^1_%SAZ PTP010_'NO_^1_%ENA -$20_^1_%AND- SWITCH,I_$RESET_^1_%STA- SWITCH,I_^1_%ENQ $A SEND LINE FEED CHARACTER_^1_%JMP* PTP038_^1PTP010 LDA- BIT8_)COMP SWITCH_^1_%AND- SWITCH,I_$SWITCH SET_^1_%SAZ PTP020_'NO IT'S NOT CONTINUE_^1PTP015 LDQ- CALL,I_'PICK UP CONNECT CODE_^1_%ENA 2_,CLEAR INT_^1_%OUT_!STCK60-*_^1_%ENA_!-1 INACTIVATE TIMER_^1_%STA- T€€IME,I_^1_%INP_!STCK60-*_%INPUT STATUS_^1_%STA- STATUS,I_!STORE IT AWAY_^1_%RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_^1_%STQ- I_^1_%RTJ MAKEQ_^1PTP017 RTJ- (COMPRQ)_^1_%JMP* I1720P+1_$GO FIND NEXT REQUEST_^1PTP020 LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%TRA Q_,PUT LENGTH IN Q_^1_%ARS 8_^1_%INA -$2A_)LENGTH= *_^1_%SAN PTP030_^1_%ADQ =N$FEEF_%YES, ADD $100_^1PTP030 ENA 2_^1_%AND- SWITCH,I_€€$FORMATTED_^1_%SAN PTP035_'YES_^1_%JMP* PTP070_'NO_^1PTP035 ENA 8_^1_%AND- SWITCH,I_$ASCII_^1_%SAZ PTP050_'BINARY_^1_%LDA* B6A7_"ASCII, ANY SPACE CHAR TO SEND_^1_%AND- SWITCH,I_^1_%SAZ PTP040_'NO, SPACERS_^1_%LDA- SWITCH,I_$YES,DECREMENT_^1_%INA -$40_)SPACE COUNTER_^1_%STA- SWITCH,I_^1_%ENQ $7F_^1PTP038 RTJ* PTP400_^1_%JMP* PTP300_^1PTP040 SQN PTP070_'END OF RECORD_^1_%LDQ* €€CRLF_)YES, SEND C.R._^1_%JMP* PTP080_^1PTP050 SQN PTP060_'END OF RECORD_^1_%LDQ- CHKSUM,I_$YES, SEND COMPL OF LENGTH_^1_%TCQ Q_^1_%JMP* PTP080_^1PTP060 ENA $10_*1ST WORD_^1_%AND- SWITCH,I_^1_%SAZ PTP080_'YES,PUNCH LENGTH_^1PTP070 LDQ- CORE,I_^1_%LDQ- (ZERO),Q_^1PTP080 ENA 4_^1_%AND- SWITCH,I_^1_%SAN PTP090_'LOWER_^1_%QRS 8_^1_%JMP* PTP100_'UPPER_^1PTP090 TRQ A_^1_%ADD- CHKS€€UM,I_^1_%STA- CHKSUM,I_^1PTP100 ENA 8_,BINARY MODE_^1_%AND- SWITCH,I_^1_%SAN PTP105_^1_%JMP* PTP160_'YES BINARY MODE_^1PTP105 ENA $7F_"STRIP HIGH ORDER BITS_^1_%LAQ Q_^1_%ENA 2_^1_%AND- SWITCH,I_$FORMATTED_^1_%SAZ PTP140_^1_%TRQ A_,YES_^1_%INA -$D_*CAR. RETURN_^1_%SAN PTP110_'NOT CAR RETURN_^1_%ENA $20_*YES SET CONTROL SWITCH_^1_%JMP* PTP130_^1PTP110 INA 1_^1_%SAZ PTP12€€0_'TAB_^1_%INA 1_^1_%SAZ PTP120_'TAB AGAIN OR FORM OUT_^1_%INA 2_^1_%SAN PTP140_'ITS ASCII_^1PTP120 LDA B6A7_)SET SPACER CT._^1PTP130 EOR- SWITCH,I_$SET SWITCH_^1_%STA- SWITCH,I_^1PTP140 RTJ* PTP400_^1_%JMP* PTP200_^1*_]_^1STCK60 JMP* ST61_^1_%ENA EXTREJ_'EXTERNAL REJECT 6_^1_%JMP* STCD10_^1ST61_!ENA INTREJ_'INTERNAL REJECT 5_^1_%JMP STCD10_^1PTP160 TRQ A_^1_%LDQ- CALL,I_^€€1_%INQ -1_^1_%OUT STCK60-*_^1_%JMP* PTP200_^1*_]_^1*_$THIS PART OF THE PROGRAM REVERSES THE UPPER_^1*_$AND LOWER SWITCH CHECKS FOR FIRST CHARACTER_^1*_$OR LAST WORD ADDRESS + 1_^1*_]_^1PTP200 LDA- LASTP1,I_^1_%SUB- CORE,I_^1_%TRA Q_,PUT REMAIN LENGTH IN Q_^1_%ENA 4_^1_%EOR- SWITCH,I_$REVERSE UPPER + LOWER_^1_%STA- SWITCH,I_^1_%AND- BIT2_^1_%SAZ PTP210_'LOWER_^1_%ENA $10_^1_%A€€ND- SWITCH,I_^1_%SAN PTP205_'FIRST CHARACTER YES_^1_%SQZ PTP220_'LAST WORD_^1PTP205 JMP* PTP300_^1PTP210 SQZ PTP220_'DONE_^1_%ENA $1A_*FORMATTED BINARY_^1_%AND- SWITCH,I_^1_%INA -2_^1_%SAZ PTP230_'FIRST CHAR_^1_%RAO- CORE,I_'NO INC CORE_^1_%INQ -1_^1_%SQN PTP300_'LAST_^1_%ENA 2_,YES IT'S LAST_^1_%AND- SWITCH,I_$FORMATTED_^1_%SAN PTP300_^1PTP220 LDA- BIT8_)NO SET COMPL SW€€ITCH_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%JMP* PTP300_^1PTP230 ENA $10_^1_%EOR- SWITCH,I_$RESET 1ST CHAR SWITCH_^1_%STA- SWITCH,I_^1_%EJT_]_^1*_]_^1*_$THIS PART OF THE PROGRAM GETS LATEST STATUS_^1*_$AND THEN GOES TO DISPATCHER_^1*_]_^1*_]_^1PTP300 ENA INTVAL_^1_%STA- TIME,I_^1_%JMP- (DISP)_'DISPATCHER EXIT_^1_%SPC 2_^1*_]_^1*_$PUNCH LEADER / MOTION REQUEST_^1*_]_^1_%SPC 2_^€€1PLEAD CLR A_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT STCK60-*_^1_%JMP* PTP300_^1*_]_^1*_$THIS PART OF THE PROGRAM CKS PARITY AND OUTPUTS_^1*_]_^1*_]_^1PTP400 NOP_]_^1_%TRQ A_^1_%SPA- TEMP,I_^1_%SAN PTP410_'PARITY OK SKIP_^1_%LDA- BIT7_^1_%EAQ Q_^1PTP410 TRQ A_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT STCK60-*_^1_%JMP* (PTP400)_^1_%EJT_]_^1*_]_^1*_$THIS PART REPUNCHES THE BAD CHARACTE€€R_^1*_]_^1*_]_^1PTP500 ENA $11_^1_%RTJ* DMSTCK_'CHECK DEVICE MSG PARITY ERR_^1_%SAN PTP505_'IS PARITY ERR_^1_%JMP* PTP530_'CHECK OTHER_^1PTP505 LDA- LOSDAT,I_^1_%SAZ PTP510_^1_%ENA PARITY_^1_%JMP* TSTC10_#TO ERROR EXIT_^1PTP510 LDQ- TEMP,I_^1_%RAO- LOSDAT,I_$SET LOSDAT FLAG_^1_%ENA 8_^1_%AND- SWITCH,I_^1_%SAZ PTP520_"SKIP IF BINARY_^1_%RTJ* PTP400_!SEND ASCII CHARACTER_^1_%JM€€P* PTP300_'EXIT_^1PTP520 TRQ A_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT STCK60-*_^1_%JMP* PTP300_^1PTP530 ENA $12_*TAPE SUPPLY LOW CHECK_^1_%RTJ* DMSTCK_^1_%SAZ PTP540_^1_%ENA TAPLOW_'TAPE SUPPLY LOW ERROR_^1_%JMP* TSTC10_^1PTP540 ENA $14_*ECHO CHECK_^1_%RTJ* DMSTCK_^1_%SAZ PTP550_^1_%ENA ECHO_)ECHO ERROR_^1_%JMP* TSTC10_^1PTP550 ENA INVLID_'INVALID DEVICE MSG STATUS_^1_%JMP* T€€STC10_^1_%SPC 3_^1*_]_^1*_*DEVICE MSG STATUS READ SUBROUTINE_^1*_]_^1DMSTCK NUM 0_,ENTRY_^1_%CLR Q_^1_%STQ* COUNTS_^1_%LDQ- CALL,I_'EQUIP CODE_^1_%INQ 1_,DM CODE_^1_%OUT STCK60-*_$SEND DM REQUEST_^1DMLOOP LDQ- CALL,I_'EQUIP_^1_%INP STCK60-*_^1_%TRA Q_^1_%AND- ONEBIT+3_$DATA/FUNCTION BIT_^1_%SAN DMVLID_^1_%RAO* COUNTS_'* DEBUG_^1_%LDA* COUNTS_'*_^1_%JMP* DMLOOP_^1_%LDA* COU€€NTS_'* DEBUG_^1DMVLID TRQ A_^1_%AND- ONEBIT+10_#ISOLATE DM STATUS_^1_%JMP* (DMSTCK)_$RETURN_^1COUNTS NUM 0_^1_%EJT_]_^1*_]_^1*_*TIME OUT ENTRY_^1*_]_^1_%SPC 2_^1E1720P STQ- I_,SAVE PDT ADDRESS_^1_%ENA TIMERR_'TIME OUT ERROR 0_^1TSTC10 JMP STCD10_#TO ERROR ROUTINE_^1_%EJT_]_^1STCK40 ENA ALARM_^1_%JMP* STCD10_^1*_$THIS PART PROCESSES ALL ERRORS EXCEPT LOST DATA_^1*_]_^1STCD10 L€€DQ- LU,I_)PICK UP LOGICAL UNIT NUMBER_^1_%QLS 6_,SHIFT 6 PLACES_^1_%EAQ A_,OR WITH ERROR CODE_^1_%STA- ERRCOD,I_^1_%LDA- BIT14_(SET ERROR IN ERRTAB_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_$ERROR IN ERRTAB_^1_%RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_^1_%STQ- I_^1_%RTJ MAKEQ_^1_%LDQ- CALL,I_'PICKUP CONNECT CODE_^1_%CLR A_,IN CASE REJECT_^1_%INP 1_^1_%NOP 0_^1_%STA- STATUS,I_^1_%ENA 1_^1€€_%OUT 1_^1_%NOP_!0_+CLEAR CONTROLLER_^1_%ENA -1_^1_%STA- TIME,I_'CLEAR TIMER_^1_%LDQ- ERRCOD,I_^1_%RTJ+ LOG_*LOG ERROR_^1_%LDA- LU,I_)SKIP FAILURES LOG_^1_%SUB- DIAGLU,I_$IF DIAGNOSTIC LU_^1_%SAZ NOLOG_^1_%JMP+ ALTDEV_^1NOLOG JMP PTP017_^1_%EJT_]_^1*_]_^1*_$PROCESS MOTION REQUEST_^1*_]_^1_%SPC 2_^1NXTMCR LDA- SWITCH,I_^1_%EOR- BIT15_^1_%STA- SWITCH,I_^1_%SPC 2_^1MOTREQ LDA- €€TMPWRD,I_!GET PARAMETER STRING_^1_%CLR Q_^1_%LLS 4_)GET ONE PARAMETER_^1_%SQZ TRMMC_$SKIP IF PARA. ZERO_^1_%STA- TMPWRD,I_!SAVE REMAINDER OF STRING_^1_%INQ -2_(CHECK IF WEOF (LEADER)_^1_%SAZ LEADER_#SKIP IF WEOF_^1_%INQ -2_(CHECK IF REWIND/UNLOAD_^1_%SQZ TRMMC_$SKIP IF YES_^1_%JMP* MOTREQ_#CHECK NEXT PARAMETER_^1TRMMC JMP PTP015_'TERMINATE MOTION REQUEST_^1_%SPC 2_^1LEADE€€R LDA- SWITCH,I_^1_%EOR- BIT15_^1_%STA- SWITCH,I_^1_%ENA LDLNG_$60 FRAMES = 6 INCHES_^1_%STA- LENGTH,I_^1_%JMP NOTMC_$SETUP INT'S - EXIT_^1_%SPC 2_^1MOTRTN LDA- LENGTH,I_!CHECK IF LEADER PUNCH_^1_%SAZ GOT6_%IS DONE_^1_%TRA Q_^1_%INQ -LDLNG_^1_%INA -1_(UPDATE COUNT_^1_%STA- LENGTH,I_^1_%SQZ EOF_*START OF LEADER - PUNCH EOF_^1_%JMP PLEAD_(PUNCH LEADER_^1GOT6_!JMP* NXTMCR_#P€RROCESS NEXT PARAMETER_^1EOF_"ENA EOFCOD_^1_%JMP PLEAD+1_%PUNCH EOF_^1_%END_]_^__RPD1720R CSY/ B29 P€1_%NAM D1720R_'DECK-ID B29 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_*1720-1 PAPER TAPE READER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1****_!FUNCTION._^1*_$--------_^1*S1_"THIS PROGRAM IS THE MSOS DRIVER FOR THE 1720-1 PAPER_^1*_$TAPE READER. THE DRIVER IS OPERATED BY THE MONITOR_^€€1*_$REQUESTS READ, FREAD AND MOTION_^1*_]_^1*S1_"ENTRY._^1*_$-----_^1*S1_"THE DRIVER HAS 3 DECLARED ENTRY POINTS._^1*_*I1720R - THE INITIATOR._^1*_*C1720R - THE CONTINUATOR._^1*_*E1720R - THE DIAGNOSTIC TIME OUT ENTRY._^1*S1_"UPON ENTRY, THE Q REGISTER CONTAINS THE PHYSICAL_^1*_$DEVICE TABLE ADDRESS._^1*S1_"THERE IS AN IMPLIED ENTRY POINT, START, AT THE_^1*_$BEGINNING OF THE PROGRA€€M. START IS ENTERED BY MMEXEC_^1*_$WHEN THE DRIVER IS MASS MEMORY RESIDENT. AT THIS_^1*_$ENTRY, THE AQ REGISTERS CONTAIN -_^1*_*A = FIRST WORD ADDRESS OF DRIVER._^1*_*Q = PDT ADDRESS._^1*_]_^1*S1_"DESCRIPTION._^1*_$-----------_^1*S1_"UPON ENTRY, THE DRIVER CALL THE FIND NEXT REQUEST_^1*_$ROUTINE. THE DRIVER INITIALIZES THE PDT AND STARTS_^1*_$I/O OPERATION. DATA IS READ A FRAME AT €€A TIME AND_^1*_$PLACED IN THE REQUESTORS BUFFER, TWO FRAMES PER_^1*_$WORD. INTERRUPTS ARE USED TO SIGNIFY THE DATA AVAIL-_^1*_$ABLE CONDITION._^1*_]_^1*_$THE CONTINUATOR IS ENTERED TO SERVICE THE INTERRUPT._^1*_$I/O ERROR CONDITIONS ARE DETECTED BY THE CONTINUATOR._^1*_$ERRORS ARE LOGGED IN THE ENGINEERING FILE._^1*_$WHEN THE CONTINUATOR DETECTS THAT DATA TRANSFER IS_^1*_$COMPLETE,€€ THE COMPLETE REQUEST ROUTINE IS CALLED,_^1*_$AND THE DRIVER INTIATOR IS REENTERED._^1*_]_^1*_$WHEN THERE ARE NO MORE REQEUSTS TO PROCESS, THE_^1*_$BUFFER IN WHICH THE DRIVER IS EXECUTING IS RE-_^1*_$LEASED BY CALLING MAS300, IN MMEXEC._^1*_]_^1*E_#PARAMETERS._^1*_$----------_^1*_]_^1_%EJT_]_^1*_$PHYSICAL DEVICE TABLE LAYOUT_^1*_]_^1*P1720R ADC $520E_)00 SCHEDULER CALL_^1*_%ADC I€€1720R_'01 INITIATOR ENTRY_^1*_%ADC C1720R_'02 CONTINUATOR ENTRY_^1*_%ADC E1720R_'TIME OUT ENTRY_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $00A1_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $2002+T1720R 08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LO€€CATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L1720R_'13 DRIVER LENGTH_^1*_%ADC S1720R_'14 MASS MEMORY SECTOR NUMBER_^1*_%NUM 0_,15 CHECKSUM AND ERROR CODE_^1*_%NUM 0_,16 LENGTH_^1*_%NUM 0_,17 RETURN ADDRESS_^1*_%NUM 0_,18 TEMPORARY ADDRESS_^1*_%NUM 0_,19 ERROR CODE_^1*_%NUM 0_,20 TEMPORARY_^1*_%NUM 0_,21 LOST DATA_^1*_%ADC SKPAR_(22 LU OF NON-PARITY P€€APER TAPE READER_^1*_%ADC U1720R_'23 DIAGNOSTIC LOGICAL UNIT_^1*_%EQU T1720R(58*$10) TYPE CODE_^1_%SPC 2_^1*_]_^1*_$ENTRY/EXTERNALS_^1*_]_^1_%ENT I1720R,C1720R,E1720R_^1_%EXT LOG_*ERROR LOGGING ENTRY_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATION_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATION_^1_%EXT MAS300_'EXIT FOR DRIVER_^1_%EXT MAKEQ_(MAKE ERROR CODE_^1_%EXT ALTDEV_'ALTERNATE DEVICE HAN€€DLER_^1_%EJT_]_^1*_]_^1*_$PYSTAB EQUATES_^1*_]_^1_%EQU_!INIADR(1)_^1_%EQU_!CONADR(2)_^1_%EQU_!ERRADD(3)_^1_%EQU TIME(4)_^1_%EQU LU(5)_^1_%EQU REQAD(6)_^1_%EQU CALL(7)_^1_%EQU ERRTAB(8)_^1_%EQU SWITCH(9)_^1_%EQU CORE(10)_^1_%EQU LASTP1(11)_^1_%EQU STATUS(12)_^1_%EQU CHKSUM(16)_^1_%EQU LENGTH(17)_"LENGTH OF RECORD_^1_%EQU ADDRES(18)_"RETURN ADDRESS_^1_%EQU ERRCOD(19)_"ER€€ROR CODE STORAGE_^1_%EQU TEMP(20)_$TEMP STORAGE FOR WORD BRAKING_^1_%EQU LOSDAT(21)_"FLAG FOR DATA THAT IS LOST_^1_%EQU SKPAR(22)_#ASCII READ WITHOUT PARITY LU_^1_%EQU DIAGLU(23)_"DIAGNOSTIC LU_^1*_]_^1*_$SYSTEM EQUATES_^1*_]_^1_%EQU_!COMPRQ($B6)_%COMPLETE REQUEST_^1_%EQU DISP($EA)_^1_%EQU AFNR($B5)_^1*_]_^1*_$ERROR EQUATES_^1*_]_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU LO€€STDA(1) LOST DATA ERROR_^1_%EQU ALARM(2)_!ALARM ERROR_^1_%EQU PARERR(3) PARITY ERROR_^1_%EQU CHEKSM(4) CHECKSUM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU NOTRDY(14)_"NOT READY_^1*_]_^1*_$MASKS_^1*_]_^1_%EQU EOF($1C)_$END-OF-FILE CODE_^1_%EQU ONEBIT($23)_^1_%EQU BIT7($2A)_^1_%EQU BIT11($2E)_^1_%EQU BIT14($31)_^1_%EQU BI1415($2€€0)_^1_%EQU INTVAL(1)_^1_%EQU ZERO($22)_^1_%EQU H001F(7)_^1_%EQU HFFF0($16)_^1****_]_^1_%EJT_]_^1*_]_^1*_$ENTRY FROM MMEXEC. Q= PDT A= FWA_^1*_]_^1START STQ- I_"ENTER ADDRESS OF START IN A_^1_%LDQ =XE1720R-START_^1_%AAQ Q_^1_%STQ- ERRADD,I_!ERROR ADDRESS_^1_%LDQ =XC1720R-START_^1_%AAQ Q_^1_%STQ- CONADR,I CONTINUATOR ADDRESS_^1_%LDQ =XI1720R-START_^1_%AAQ A_^1_%STA- INIAD€€R,I_"INITATOR ADDRESS_^1_%JMP* I1720R+1_^1MS300 ADC MAS300_^1_%EJT_]_^1*_]_^1*_$DRIVER INITIATOR ENTRY_^1*_]_^1_%SPC 2_^1I1720R STQ- I_,STORE PDT ADDRESS_^1_%RTJ- (AFNR)_^1_%JMP* (MS300)_^1_%LDQ- REQAD,I_%REQUEST ADDRESS_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- H001F_(MASK REQUEST CODE_^1_%INA -14_*CHECK FOR MOTION REQUEST_^1_%SAN NOTMC_(SKIP IF NOT MOTION_^1_%STA- CORE,I_^1_%STA€€- LASTP1,I_^1_%LDA- 4,Q_*IS THIS A REPETITIVE REQUEST_^1_%SAP P3_+NO_^1_%AND =N$7000_%SAVE ONLY THE MOTION CODE_^1P3_#AND- HFFF0_^1_%STA- TEMP,I_'MOTION CODES_^1TOMOT JMP MOTREQ_'GO PROCESS THE MOTION REQUEST_^1NOTMC RTJ+ RQAQ_)REQUEST A/Q ALLOCATION_^1_%STQ- I_^1_%LDQ- CALL,I_^1_%INP STCK60-*_$READ STATUS_^1_%AND- ONEBIT+10_#MASK BACKWARD MOTION_^1_%ARS 10_+CLEAR CONTROLLER€€ IF TRUE_^1_%INA $16_*REQUEST ALARM, DATA - CLEAR INT._^1_%OUT STCK60-*_^1_%ENA INTVAL_'SET CLOCK COUNT TO 1_^1_%STA- TIME,I_^1_%ENA 0_^1_%STA- CHKSUM,I_$CLEAR_^1_%ENA 1_^1_%STA- LENGTH,I_$LENGTH_^1_%JMP- (DISP)_'EXIT AND WAIT FOR INT_^1_%EJT_]_^1*_]_^1*_$THIS PART IS THE CONTINUATOR_^1*_]_^1C1720R STQ- I_,SAVE PDT ADDRESS IN I_^1_%ENA -1_+RESET TIMER_^1_%STA- TIME,I_^1_%LD€€Q- CALL,I_'PICK UP CONNECT CODE_^1_%INP STCK60-*_$READ STATUS_^1_%STA- STATUS,I_$SAVE IN PDT_^1_%ENA 2_,CLEAR INT_^1_%OUT STCK60-*_^1_%LDA- STATUS,I_$GET STATUS_^1_%TRA Q_,DUPLICATE IN Q_^1_%AND- ONEBIT+5_$MASK FOR ALARM_^1_%SAZ PTR1_)NO ALARM_^1_%TRQ A_^1_%AND- ONEBIT+8_$PARITY_^1_%SAZ STCK05_'NO PARITY ERR_^1_%ENA PARERR_^1_%JMP* STCK11_^1STCK05 LRS 1_^1_%SAM STCK10_'DE€€VICE READY_^1_%ENA NOTRDY_'NOT READY_^1_%JMP* STCK11_^1STCK10 ENA ALARM_(JUST ALARM_^1STCK11 JMP STCD10_'GO REPORT ERR_?*_^1PTR1_!LDQ- CALL,I_^1_%INQ -1_^1_%ENA 0_^1_%INP STCK60-*_^1_%TRA Q_,CHARACTER IN Q_^1_%ENA 2_^1_%AND- SWITCH,I CHECK FOR FORMATTED_^1_%SAN 1_^1_%JMP* PTR090_'NOT FORMATTED_^1_%ENA $10_^1_%AND- SWITCH,I_$IS THIS THE FIRST CHARACTER_^1_%SAN PTR020_'NO€€_^1_%ENA EOF_^1_%EAQ A_,IS THIS AN E-O-F CHARACTER_^1_%SAN PTR020_'NO_^1_%STA- CORE,I_^1_%STA- LASTP1,I_^1_%LDA- BI1415_^1_%EOR- ERRTAB,I_$SET END OF FILE CONDITION_^1_%STA- ERRTAB,I_$IN THE DRIVER STATUS_^1_%LDA- STATUS,I_^1_%EOR- STATUS,I_$SET EOF IN STATUS_^1_%STA- STATUS,I_^1_%JMP* TP290_(COMPLETE THE REQUEST_^1PTR020 ENA 8_^1_%AND- SWITCH,I_!ASC II_^1_%SAZ PTR030_^1_%JMP*€€ PTR080_'FORMATTED ASCII_^1*_]_^1*_$THIS NOW BECOMES FORMATTED BINARY_^1*_]_^1PTR030 ENA $10_*1ST CHAR_^1_%AND- SWITCH,I_^1_%SAN PTR050_'NOT 1ST CHARACTER_^1_%LDA- BIT7_^1_%LAQ A_,IS THIS LEADER_^1_%SAN PTR040_^1_%JMP* PTR160_'YES, IGNORE_^1*_]_^1*_$RESET THE 1ST CHARTER SWITCH AND CK TO SEE_^1*_$IF IT IS AN ASTERISK_^1*_]_^1PTR040 ENA $10_^1_%EOR- SWITCH,I_$CHANGE 1ST CHAR B€€IT_^1_%STA- SWITCH,I_^1_%TRQ A_^1_%SUB =N$AA_(CODE FOR ASTERISK_^1_%SAZ PTR070_'ASTERISK_^1_%SAP 1_,NO GRTR THAN *_^1_%INQ 1_,MAKE PARITY ERROR INVALD CHARATER_^1PTR050 ENA_!$20_!CONTROL CHARACTER_^1_%AND- SWITCH,I_^1_%SAN PTR080_'CONTROL CHARACTER_^1_%LDA- LENGTH,I_$END OF RECORD_^1_%SAN 1_^1_%JMP* PTR100_^1_%ENA LENGTH_'SET ADDRESS_^1_%JMP* PTR110_^1PTR070 LDA- SWITCH,I€€_$SET ASCII MODE_^1_%INA 8_^1_%STA- SWITCH,I_^1PTR080 LDA- CORE,I_^1_%SUB- LASTP1,I_$CORE EQ LAST+ 1_^1_%SAZ PTR100_^1PTR090 LDA- CORE,I SET ADDRESS TO CURRENT CORE_^1_%JMP* PTR120_^1PTR100 ENA TEMP_)SET DUMMY ADDRES_^1PTR110 ADD- I_^1PTR120 STA- ADDRES,I_^1_%ENA 8_^1_%AND- SWITCH,I_$CHECK FOR ASCII_^1_%SAN PTR133_^1_%JMP* PTR140_^1PTR133 TRQ A_^1_%SPA- TEMP,I_'ODD PARITY_^1€€_%SAN PTR135_^1_%LDA- LU,I_)ACTIVE LOGICAL UNIT_^1_%SUB- SKPAR,I_%SKIP PARITY LOGICAL UNIT_^1_%SAZ PTR135_'SKIP IF NO PARITY ERROR LOG. UNIT_^1_%ENA PARERR_'PARITY ERROR 3_^1_%JMP* TSTC10_'TO ERROR EXIT_^1*_]_^1*_$REJECT HANDLERS_^1*_]_^1STCK60 JMP* INTRJ_^1_%ENA EXTREJ_'EXTERNAL REJECT_^1_%JMP* TSTC10_^1INTRJ ENA INTREJ_'INTERNAL REJECT_^1_%JMP STCD10_^1*_]_^1PTR135 ENA $€€7F_*STRIP PARITY BIT_^1_%LAQ Q_^1_%ENA 2_,FORMATED_^1_%AND- SWITCH,I_^1PTR140 SAZ PTR180_^1_%TRQ A_^1_%INA -$D_*CARRAGE RETURN_^1_%SAN 1_^1TP290 JMP* PTR290_^1_%SQZ PTR160_'NULL, CANCEL OR LINE FEED_^1_%INA -$72_^1_%SAZ PTR160_^1_%INA $75_^1_%SAN 1_^1PTR160 JMP* PTR270_^1PTR180 LDA- $1A_"PICK UP $FF00 UPPER BITS FOR A_^1_%EAQ Q_^1_%ENA 4_^1_%AND- SWITCH,I_$UPPER CHA€€RACTER_^1_%SAN 1_^1_%JMP* PTR230_'YES_^1_%TRQ A_,NO, COMBINE_^1_%LDQ- ADDRES,I_^1_%AND- (ZERO),Q_$OR THE TWO CHARACTERS_^1_%STA- (ZERO),Q_^1_%ADD- CHKSUM,I_^1_%STA- CHKSUM,I_^1_%ENA $A_+FORMATTED BINARY_^1_%AND- SWITCH,I_^1_%INA -2_^1_%SAZ 1_^1_%JMP* PTR240_'NO_^1_%LDA- LENGTH,I_$YES LENGTH_^1_%SAN PTR200_'IS IT ZERO_^1_%LDA- CHKSUM,I_^1_%SAZ 2_^1_%ENA CHEKSM_^1_%JMP* TSTC1€€0_'TO ERROR EXIT_^1_%ENA 4_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%JMP* PTR290_'YES, FINISHED_^1*_]_^1*_$CONTINUATION OF THE REQUEST_^1*_]_^1PTR200 ENA $20_^1_%AND- SWITCH,I_^1_%SAZ PTR210_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$LAST +1_^1_%SAZ 1_^1_%RAO- CORE,I_'NO INCREMENT CORE_^1_%RAO- LENGTH,I_$DEC LENGTH_^1PTR210 ENA 4_^1_%EOR- SWITCH,I_$REVERSE UPPER AND LOWER_^1_%STA- SWITC€€H,I_^1_%LDA- LENGTH,I_$END OF RECORD_^1_%SAN PTR220_^1_%ENA -$20_)YES_^1_%AND- SWITCH,I_$CLEAR CONTROL SWITCH BIT_^1_%STA- SWITCH,I_^1_%JMP* PTR270_^1PTR190 ENA LOSTDA_#LOST DATA ERROR 1_^1TSTC10 JMP* STCD10_'TO ERROR EXIT_^1*_]_^1* THIS PART IF NOT AT END OF RECORD, SET CONTROL SWITCH_^1*_]_^1PTR220 ENA -$20_^1_%AND- SWITCH,I_^1_%INA $20_^1_%STA- SWITCH,I_^1_%JMP* PTR270_^1*_€€]_^1* THIS PART FOR THE STORAGE OF THE UPPER CHARACTER_^1*_]_^1PTR230 TRQ A_^1_%ALS 8_^1_%LDQ- ADDRES,I_^1_%STA- (ZERO),Q_^1_%JMP* PTR250_^1*_]_^1*_$IF NOT LAST CORE LOCATION INCREMENT CORE_^1*_]_^1PTR240 LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ PTR260_^1_%RAO- CORE,I_^1PTR250 LDA- CORE,I_^1_%SUB- LASTP1,I NOW LAST_^1_%SAZ PTR280_'YES_^1*_]_^1* MISC CLEANUP_^1*_]_^1PTR260 ENA 4€€_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1PTR270 LDQ- CALL,I_^1_%ENA $14_*SET INTERUPTS_^1_%OUT STCK60-*_$SELECT INTERRUPTS_^1_%INP STCK60-*_$STATUS_^1_%STA- STATUS,I_^1_%ENA INTVAL_^1_%STA- TIME,I_'UPDATE DIAG TIMER_^1_%JMP- (DISP)_^1PTR280 ENA 2_^1_%AND- SWITCH,I_$FORMATTED_^1_%SAZ PTR290_^1_%JMP* PTR260_'YES_^1*_]_^1* THIS PART STOPS READER AND COMPLETE THE REQUEST_^1*_]_^1PT€€R290 LDQ- CALL,I_'PICK UP CONNECT CODE_^1_%ENA 2_,CLEAR INTERRUPTS_^1_%OUT_!STCK60-*_^1_%ENA_!-1 INACTIVATE TIMER_^1_%STA- TIME,I_^1_%INP_!STCK60-*_%INPUT STATUS_^1_%LDQ- ERRTAB,I_$WAS AN END-OF-FILE FOUND_^1_%SQP PTR292_'NO_^1_%LDQ- BIT11_(YES, SET E-O-F STATUS_^1_%EAQ A_^1PTR292 STA- STATUS,I_$STORE IT AWAY_^1_%RTJ MAKEQ_^1_%RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_^1_%STQ- I_^1PT€€R295 RTJ- (COMPRQ)_^1_%JMP I1720R+1_$GO FIND ANOTHER REQUEST_^1E1720R STQ- I_,PDT ADDRESS TO I_^1_%ENA TIMERR_^1_%JMP* TSTC10_'TO ERROR EXIT_^1*_]_^1*_$MOTION REQUEST PROCESSOR_^1*_]_^1MOTREQ LDA- TEMP,I_^1_%CLR Q_^1_%LLS 4_^1_%SQZ TRMMC_(ZERO PARAMETER TERMINATES RQST_^1_%STA- TEMP,I_^1_%INQ -4_+REWIND-UNLOAD REQUEST_^1_%SQZ TRMMC_(YES, TERMINATE_^1_%JMP* MOTREQ_'NO, GET NE€€XT PARAMETER_^1TRMMC JMP* PTR290_'EXIT_^1_%EJT_]_^1STCK40 ENA ALARM_^1_%JMP* STCD10_^1*_$PROCESS ERRORS_^1*_]_^1STCD10 LDQ- LU,I_)PICK UP LOGICAL UNIT NUMBER_^1_%QLS 6_,SHIFT 6 PLACES_^1_%EAQ A_,OR WITH ERROR CODE_^1_%STA- ERRCOD,I_^1_%LDA- BIT14_(SET ERROR IN ERRTAB_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_$ERROR IN ERRTAB_^1_%RTJ MAKEQ_^1_%LDQ- CALL,I_'PICKUP CONNECT CODE_^1_%CLR€€ A_,IN CASE REJECT_^1_%INP 1_^1_%NOP 0_,INT REJECT HERE_^1_%STA- STATUS,I_^1_%ENA 1_^1_%OUT 1_^1_%NOP_!0_+CLEAR CONTROLLER_^1_%ENA -1_^1_%STA- TIME,I_'CLEAR TIMER_^1_%RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_^1_%STQ- I_^1_%LDQ- ERRCOD,I_^1_%RTJ+ LOG_*LOG THE ERROR IN EF_^1_%LDA- LU,I_)IF LU = DIAGNOSTIC LU_^1_%SUB- DIAGLU,I_$DON T LOG ERROR_^1_%SAZ NOLOG_^1_%JMP+ ALTDEV_^1NOLOG JM€P* PTR295_^1_%END_]_^__ PD1725 CSY/ B30 P€1_%NAM D1725_(DECK-ID B30 PERIPH. DRIVERS 1.0B SUMMARY-106_^1***_#1725-1 DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1***_]_^1*S2_"FUNCTION -_^1*_$THE PURPOSE OF THIS PROGRAM IS TO PERFORM I/O_^1*_$FUNCTIONS ON THE 1725-1 CARD PUNCH._^1*_]_^1*_]_^1*_$GENERAL DESCRIPTION -_^1*_$THE €€CARD DRIVER IS BROKEN UP INTO THREE PARTS 1) INITIATOR,_^1*_$2) CONTINUATOR, 3) ERROR ENTRY. UPON ENTRY TO THE_^1*_$INITIATOR, A CALL IS MADE TO FIND NEXT REQUEST_^1*_$IF A REQUEST IS NOT FOUND THE DRIVER EXITS._^1*_$OTHERWISE, A CHECK IS MADE TO SEE IF THE REQUEST IS_^1*_$A MOTION REQUEST. IF SO, THE DRIVER INITIATES THE_^1*_$MOTION CODE. IF NOT, THE DRIVER FILLS THE OUTPUT_^1*€€_$BUFFER WITH DATA AND FEEDS A CARD. THE CONTINUATOR_^1*_$DETERMINES WHAT TYPE OF INTERRUPT OCCURRED. IF THE_^1*_$INTERRUPT WAS ON ALARM, THE TYPE OF ERROR IS DETERMINED_^1*_$THE ERROR IS REPORTED, THE REQUEST IS COMPLETED, AND_^1*_$A CALL IS MADE TO FIND NEXT REQUEST. IF AN EOP_^1*_$INTERRUPT OCCURRED, THE DRIVER CHECKS IF IT IS DONE_^1*_$WITH THE REUUEST. IF SO, THE REQUEST I€€S COMPLETED_^1*_$AND A CALL IS MADE TO FIND NEXT REQUEST. OTHERWISE,_^1*_$THE OUTPUT BUFFER IS FILLED WITH DATA AND A CARD IS_^1*_$FED. IF THE INTERRUPT IS FOR DATA, DATA IS OUTPUT_^1*_$AND A CHECK IS MADE FOR ALL DATA PUNCHED. THE RATE_^1*_$OF OUTPUT IS REGULATED BY HARDWARE INTERRUPTS. IF ALL_^1*_$DATA HAS BEEN PUNCHED, IT IS TREATED LIKE AN EOP INTERRUPT._^1*_$IF ALL DATA HA€€S NOT BEEN PUNCHED, IT EXITS TO THE_^1*_$DISPATCHER AND AWAITS THE NEXT INTERRUPT._^1*_$UPON ENTRY TO THE ERROR ENTRY, THE TIMEOUT ERROR IS_^1*_$REPORTED AND THE REQUEST IS COMPLETED._^1_%EJT_]_^1***_]_^1*E_]_^1*_$INPUT REQUIREMENTS -_^1*_$UPON ENTRY TO THE PROGRAM, THE Q REGISTER CONTAINS THE_^1*_%ADDRESS OF THE PHYSICAL DEVICE TABLE._^1*_]_^1*_]_^1****_!ENTRY/EXIT -_^1_%ENT I172€€5_(DRIVER INITIATOR_^1_%ENT C1725_(DRIVER CONTINUATOR_^1_%ENT E1725_(DRIVER ERROR_^1*_]_^1*_]_^1*_$SUBROUTINES -_^1_%EXT ALTDEV_'ALTERNATE DEVICE HANDLER_^1_%EXT MAKEQ_(ROUTINE TO SET UP V BITS_^1_%EXT LOG_*ERROR LOGGING ENTRY_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATION_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATION_^1_%EXT MAS300_'EXIT FOR DRIVER_^1_%EXT* CDPC_)CARD CONVERSION (PUNCH)_^1_%€€EXT COMPV4_'MAGNITUDE COMPARISION ROUTINE_^1_%SPC 2_^1_%EQU AFNR($B5)_#FIND NEXT REQUEST_^1_%EQU ADISP($EA)_"DISPATCHER_^1_%EQU COMPRQ($B6)_!COMPLETE REQUEST_^1_%EQU AMONI($F4)_"MONITOR_^1****_]_^1_%EJT_]_^1***_]_^1*E_]_^1*_$PARAMETERS -_^1*_$THE FOLLOWING IS A SAMPLE PHYSICAL DEVICE TABLE FOR_^1*_$THE 1725-1._^1*P1725 ADC $520E_(00 SCHEDULER CALL_^1*_$ADC I1725_(01 INIT€€IATOR ADDRESS_^1*_$ADC C1725_(02 CONTINUATOR ADDRESS_^1*_$ADC E1725_(03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_$NUM $0541_(07 CONVERTER, EQUIPMENT, STATION_^1*_%NUM $1B94_(08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PL€€US ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L1725_(13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC S1725_(14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 PACKING CYCLE ADDRESS STORAGE_^1*_$NUM $000F_(16 READ/PUNCH SWITCH, EOF FORMAT (6789)_^1*_$ADC BUF25_(17 FIRST LOCATION OF 80 WORD I / O BUFFER_^1*_%NUM 0_,18 CURRENT CARD BUFFER LOCATION_^1*_%NUM 0_,19 SUBROUTINE R€€ETURN ADDRESS_^1*_%NUM 0_,20 CARD SEQUENCE NUMBER_^1*_%NUM 0_,21 RECORD LENGTH_^1*_%NUM 0_,22 CHECKSUM ACCUMULATOR_^1*_%NUM 0_,23 TEMPORARY STORAGE_^1*_%NUM 0_,24 OUTPUT OFFSET SWITCH_^1*_%NUM 0_,25 ERROR RETURN_^1*_%NUM 0_,26 HOLLERITH ERROR FLAG_^1*_%ADC U1725_(27 DIAGNOSTIC LU_^1**_]_^1*_$BZS BUF25(80)_#29 INPUT / OUTPUT BUFFER_^1**_8108 INPUT / OUTPUT BUFF€€ER_^1_%EJT_]_^1***_]_^1*E_]_^1*_$Q REGISTER FORMAT -_^1*_$BITS 0-1 - STATUS/FUNCTION CONTROL_^1*_$BITS 2-4 - NOT USED_^1*_$BITS 5-6 - STATION (Q5=0, Q6=1 FOR PUNCH STATION)_^1*_$BITS 7-10 - EQUIPMENT NUMBER_^1*_$BITS 11-15 - W FIELD (ALWAYS ZERO)_^1*_]_^1*_]_^1*_$A REGISTER, DIRECTOR FUNCTION FORMAT (Q0=1, Q1=0)_^1*_$BIT 0 - CLEAR CONTROLLER_^1*_$BIT 1 - CLEAR INTERRUPT_^1*_$BIT 2 €€- DATA INTERRUPT REQUEST_^1*_$BIT 3 - END-OF-OPERATION INTERRUPT REQUEST_^1*_$BIT 4 - ALARM INTERRUPT REQUEST_^1*_$BITS 5-6 - NOT USED_^1*_$BIT 7 - FEED COMMAND_^1*_$BIT 8 - OFFSET COMMAND_^1*_$BITS 9-15 - NOT USED_^1*_]_^1*_]_^1*_$A REGISTER, DIRECTOR STATUS 1 (Q0=1, Q1=0)_^1*_$BIT 0 - READY_^1*_$BIT 1 - BUSY_^1*_$BIT 2 - INTERRUPT_^1*_$BIT 3 - DATA_^1*_$BIT 4 - END-OF-OPERATION_^€€1*_$BIT 5 - ALARM_^1*_$BIT 6 - LOST DATA_^1*_$BIT 7 - PROTECTED_^1*_$BIT 8 - ERROR_^1*_$BITS 9-15 - NOT USED_^1_%EJT_]_^1***_]_^1*E_]_^1*_$A REGISTER, DIRECTOR STATUS 2 (Q0=1, Q1=1)_^1*_$BIT 0 - HOPPER EMPTY_^1*_$BITS 1-5 - NOT USED_^1*_$BIT 6 - READ ERROR_^1*_$BIT 7 - PUNCH ERROR_^1*_$BIT 8 - STAND-BY_^1*_$BIT 9 - PUNCH INHIBIT_^1*_$BITS 10-15 - NOT USED_^1*_]_^1*_]_^1*_$MESSAGES €€-_^1****_!THE FOLLOWING ERROR ARE DETECTED BY THE DRIVER AND_^1*_$ARE REPORTED TO THE USER_^1_%EQU TIMERR(0) TIME OUT_^1_%EQU ALARM(2)_!ALARM_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU ECHO(7)_"ECHO OR PRE-READ ERROR_^1_%EQU EMPTY(23) INPUT TRAY EMPTY_^1****_]_^1_%EJT_]_^1*_$MASK BITS_^1_%SPC 2_^1_%EQU FORMTD(2) FORMATTED REQUEST IF BIT€€1=1_^1_%EQU ORIDE(4)_!CHECKSUM OVERRIDE BIT2_^1_%EQU CHEKSM(4)_#CHECKSUM SWITCH_^1_%EQU BINASC(8) BINARY-ASCII MODE INDICATOR_^1_%EQU FIRST($10) FIRST CARD INDICATOR_^1_%EQU ZERO($22)_#START ZERO BITS MASK_^1_%EQU ONEBIT($23)_!START OF ONE BITS MASK_^1_%EQU LPMSK(2)_$START OF RIGHT PARTS MASK_^1_%EQU NZERO($12)_"START OF LEFT PARTS MASK_^1_%EJT_]_^1*_$PHYSICAL DEVICE TABLE€€ WORDS_^1_%SPC 2_^1_%EQU TIME(4)_"DIAG. CLOCK TIME_^1_%EQU LU(5)_$LOG. UNIT_^1_%EQU REQAD(6)_!REQUEST ADDRESS_^1_%EQU CALL(7)_"HARDWARE ADDRESS_^1_%EQU ERRTAB(8) REQUEST STATUS_^1_%EQU SWITCH(9) DRIVER SWITCHS_^1_%EQU CORE(10)_!CORE ADDRESS WORD (IN/OUT)_^1_%EQU LASTP1(11) LAST CORE LOCATION + 1_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%EQU CYCLE(15) PACKING CYCLE ADDRES€€S STORAGE WORD_^1_%EQU EOFCRD(16) EOF CARD PATTERN AND RD/PUN SWITCH ERROR_^1_%EQU BUFFER(17) STARTING ADDRESS OF 80 WORD BUFFER_^1_%EQU BUFFAD(18) CURRENT WORD BUFFER ADDRESS_^1_%EQU RETURN(19) SUBROUTINE RETURN ADDRESS_^1_%EQU SEQ(20)_"SEQUENCE NUMBER_^1_%EQU LENGTH(21) RECORD LENGTH_^1_%EQU CHKSUM(22) CHECKSUM WORD_^1_%EQU TPMWRD(23) TEMP.STORAGE_^1_%EQU OFFSET(24) OFFS€€ET CARD SWITCH_^1_%EQU ERRETN(25) ERROR RETURN_^1_%EQU FLAG(26)_^1_%EQU DIAGLU(27)_"DIAGNOSTIC LU_^1_%EQU TEMP(LENGTH)_^1_%EQU ERRCOD(FLAG)_^1*_81 CARD DELETED_883_^1_%EJT_]_^1_%SPC 2_^1START STQ- I_^1_%LDQ =XE1725-START_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC1725-START_^1_%AAQ Q_^1_%STQ- 2,I_^1_%LDQ =XI1725-START_^1_%AAQ Q_^1_%STQ- 1,I_^1_%LDQ =XFEEDIT-START_^1_%AAQ Q_^1€€_%STQ SCHDAT+1_^1_%LDQ =XALMLLV-START_^1_%AAQ Q_^1_%STQ SCHALM+1_^1_%LDQ =XPUNCMS-START_^1_%AAQ Q_^1_%STQ PNCHIT+1_^1_%JMP* I1725+1_^1MS300 JMP+ MAS300_'RELEASE BUFFER_^1_%EJT_]_^1E1725 STQ- I_,1728 TIME EXPIRED_^1_%ENA TIMERR_#TIME OUT ERROR 0_^1_(JMP_%ERROR_^1_%SPC 2_^1**_%DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1725 STQ- I_,INITIATOR_^1FNR_%RTJ-_#(AFNR)_.GET A REQUEST_^€€1_%JMP* MS300_^1_(ENA_%0_^1_(STA-_$TPMWRD,I_^1_%STA- CHKSUM,I_$INITIALIZE PHYSTAB WORDS_^1_(STA-_$CYCLE,I_^1_%STA- FLAG,I_^1_(LDQ-_$BUFFER,I_^1_(STQ-_$BUFFAD,I_^1_)LDQ-_$REQAD,I_,TAPE MOTION CONTROL_^1_)LDA-_$(ZERO),Q_+REQUEST_^1_)ARS_%9_^1_%AND- LPMSK+5_%MASK FOR REQUEST CODE_^1_)INA_%-14_!CHECK FOR MOTION REQUEST_^1_(SAN_%TOPCH-*-1_^1_%STA- CORE,I_^1_%STA- LASTP1,I_^1_)LDA-_$4,Q_€€0YES, MOTION_^1_%SAP P3-*-1_%SKIP IF NOT ITER.TYPE PARAM._^1_%AND =N$7000_$GET ONLY PARAM._^1P3_#AND- NZERO+4_$GET ALL PARAMS._^1_)STA-_$TPMWRD,I_+SAVE PARAMETER WORD_^1_(JMP_%MORMC_^1TOPCH JMP PUNCH_(NOT MOTION, MUST BE WRITE REQUEST_^1_%EJT_]_^1**_%DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C1725 STQ- I_,CONTINUATOR_^1_)LDQ-_$CALL,I_^1_%INP ERREJ-*_%GET STATUS_^1_(STA-_$STATUS,I€€_^1_%ENA 2_^1_%OUT ERREJ-*_%CLEAR INTERRUPTS_^1_%LDA- TIME,I_^1_%SAM GHOINT_'CHECK FOR GHOST INTERRUPT_^1_%LDA- LU,I_^1_%SAZ GHOINT_^1_%ENA -1_^1_%STA- TIME,I_'RESET DIAGNOTIC CLOCK_^1_%ENA $20_*ALARM BIT_^1_%AND- STATUS,I_^1_%SAZ CHKB5_(SKIP IF NOT ALARM INTERRUPT_^1_%JMP* ALMINT_'PROCESS ALARM INTERRUPT_^1GHOINT JMP- (ADISP)_"GHOST INTERRUPT - GET OUT_^1CHKB5 ENA $10_*CH€€ECK FOR EOP_^1_%AND- STATUS,I_^1_%SAZ DAINT_(GOT DATA_^1_%JMP* EP1725_#EOP INTERRUPT_^1DAINT ENA 8_^1_%AND- STATUS,I_$SEE IF DATA STATUS PRESENT_^1_%SAZ NOSTAT_^1_%JMP* DA1725_'PROCESS DATA INTERRUPT_^1NOSTAT JMP* EXIT+1_'WAIT FOR READ DATA INTERRUPT_^1_%EJT_]_^1**_%ANALYZE ALARM INTERRUPT_^1_%SPC 2_^1ALMINT LDA- SEQ,I_(DECREMENT SEQUENCE NUMBER_^1_%INA -1_R82_^1_%STA- SEQ,I_€€(IN CASE OF RP_^1_%LDA- ONEBIT+8_$BAD PUNCH CARD_^1_%STA- OFFSET,I_$WILL BE OFFSET_^1_%LDA- STATUS,I_!ADJUST STATUS WORD_^1_%AND- ONEBIT+8_!CHECK BIT 8 (ERROR)_^1_%SAZ ALRCHK_#SKIP IF NOT PRE-READ ERROR_^1_%ENA ECHO_%PRE-READ OR PUNCH ERROR 7_^1_%JMP* TERROR_#REPORT ERROR_^1ALRCHK INQ 2_)SET D BITS 0 AND 1_^1_%INP ERREJ-*_"GET LEVEL 2 STATUS_^1_%TRA Q_^1_%LRS 1_)CHECK EMPTY_^€€1_%SAP NOTECH_^1_%ENA EMPTY_(INPUT TRAY EMPTY_^1_%JMP* TERROR_^1NOTECH ENA ALARM_$ALARM ERROR 2_^1TERROR JMP ERROR_$ERROR EXIT_^1_%EJT_]_^1**_%ANALYZE DATA INTERRUPT_^1_%SPC 2_^1DA1725 INQ -1_(PROCESS DATA INTERRUPT_^1_%SPC 2_^1**_%PROCESS DATA INTERRUPT FOR PUNCH_^1*_$PUNCH A COLUMN_^1_%SPC 2_^1_%LDA- TEMP,I_#DATA INT FOR PUNCH_^1_%SAZ NXTCRD_#SKIF IF ALL WORDS ARE PUNCHE€€D_^1_%RAO- TEMP,I_#UPDATE NUMBER OF WORDS LEFT TO PUNCH_^1_%LDQ- BUFFAD,I_!MORE TO PUNCH_^1_%LDA- (ZERO),Q_!GET A DATA WORD AND PUNCH IT_^1_(LDQ-_$CALL,I_^1_(INQ_%-1_^1_%OUT ERREJ-*_"DATA WORD_^1_(JMP*_$EXIT_^1NXTCRD JMP* EP1725_#GOT-UM ALL GOOD AS EOP INT._^1_%SPC 2_^1EXIT_!RAO- BUFFAD,I_!INCREMENT BUFFER ADDRESS_^1_%LDQ- CALL,I_#SELECT INTERRUPTS ON_^1_%ENA $1C_'DATA - EOP - €€AND ALARM_^1_%OUT ERREJ-*_^1SAVSTA ENA 1_^1_%STA- TIME,I_#RESET TIME_^1_%JMP- (ADISP)_"EXIT TO DISPATCHER_^1_%SPC 2_^1ERREJ JMP* REJECT_#INTERNAL REJECT_^1_%JMP* REJECT+1_!EXTERNAL REJECT_^1_%EJT_]_^1**_%ANALYZE EOP INTERRUPT_^1_%SPC 2_^1EP1725 RTJ+ RLAQ_)RELEASE AQ CHANNEL_^1_%STQ- I_^1_%SPC 2_^1**_%PROCESS EOP INTERRUPT FOR PUNCH_^1_%SPC 2_^1_%LDA- BUFFER,I_^1_%STA- BUFFAD€€,I_^1_%ENA 2_)FORMATTED BIT 1_^1_%AND- SWITCH,I_^1_%SAN FORMOP-*-1_"SKIP IF FORMATTED_^1_(LDA-_$LASTP1,I_^1_(SUB-_$CORE,I_.NO,LAST WORD_^1_(SAZ_%TTDONE-*-1_^1TOPNCH_!JMP_%PUNCH_/NO_^1FORMOP ENA 8_)ASCII BIT 3_^1_%AND- SWITCH,I_^1_%SAN TTDONE-*-1_"SKIP IF ASCII_^1_%ENA 4_)CHECKSUM PUNCHED BIT 2_^1_%AND- SWITCH,I_^1_%SAN TTDONE-*-1_"SKIP IF PUNCHED_^1_(JMP*_$TOPNCH_.NO_^1_%S€€PC 2_^1TTDONE JMP_"DONE_^1_%EJT_]_^1*_$SCHEDULE UP FOR CARD READ_^1_%SPC 2_^1FEEDCD LDQ- I_^1_%RTJ- (AMONI)_^1SCHDAT ADC $520E_(SCHED UP FOR READ DATA_^1_%ADC FEEDIT_^1_%JMP- (ADISP)_^1FEEDIT STQ- I_^1_%LDA- BUFFER,I_$INITIALIZE BUFFER ADDRESS_^1_(STA-_$BUFFAD,I_,ADDRESS_^1_%RTJ+ RQAQ_)GET AQ_^1_%STQ- I_^1_%LDA- OFFSET,I_$CHECK OFFSET OPERATION_^1_(SAM_%DEFOFF-*-1_^1_(ENQ_%0_^1€€_%STQ- OFFSET,I_$CLEAR OFFSET SWITCH_^1NOOFF EOR- ONEBIT_'CLEAR CONTROLLER_^1_(LDQ-_$CALL,I_^1_(OUT_%REJECT-*_^1_%JMP* XXX_^1_%SPC 2_^1REJECT JMP* INTRNL_#INTERNAL REJECT ERROR_^1_%ENA EXTREJ_#EXTERNAL REJECT ERROR_^1TTERR JMP* TTTERR_#REPORT ERROR_^1_%SPC 2_^1DEFOFF LDQ- ONEBIT+8_$SET OFFSET SWITCH_^1_(STQ-_$OFFSET,I_^1_(LAQ_%A_^1_%JMP* NOOFF_(GO REQUEST OFFSET_^1XXX_"ENA $1€€4_'SELECT INTERRUPTS ON DATA - ALARM_^1_%LDQ- CALL,I_^1_%EOR- ONEBIT+7_!FEED CARD FUNCTION_^1_(OUT_%REJECT-*_^1_%INP REJECT-*_$INPUT STATUS_^1_(STA-_$STATUS,I_^1_(JMP_%SAVSTA_^1INTRNL_!ENA_%INTREJ_.SET INTERNAL REJECT ERROR_^1TTTERR JMP* ERROR_^1_%EJT_]_^1DONE_#LDQ-_$REQAD,I_^1_%LDA- (ZERO),Q_$GET REQUEST CODE_^1_%ARS 9_^1_%AND- LPMSK+5_^1_%INA -14_*CHECK FOR MOTION REQUEST_^1_(€€SAN_%NOTMC-*-1_^1_%SPC 2_^1*_$PROCESS MOTION REQUEST_^1MORMC LDA- TPMWRD,I_$GET MOTION REQUEST PARAMETER STRING_^1_%CLR Q_^1_%LLS 4_,GET ONE PARAMETER_^1_%SQZ NOTMC-*-1_#SKIP IF ZERO PARAMETER_^1_%STA- TPMWRD,I_$SAVE REMAINDER OF STRING_^1_%INQ -2_+TEST FOR WEOF (2)_^1_%SQN MC1_*SKIP IF NOT WEOF_^1_%JMP* WEOF_^1MC1_"INQ -2_+TEST FOR ZROSEQ (4)_^1_%SQN MORCI_(SKIP IF NOT RE€€WIND UNLOAD CODE_^1_%JMP* ZROSEQ_'GO CLEAR SEQ. AND TERMINATE REQUEST_^1MORCI JMP* MORMC_(CHECK NEXT PARAMETER_^1NOTMC_"ENA_%2_^1_(LDQ-_$CALL,I_^1_%OUT REJECT-*_$CLEAR INTERRUPT_^1_%INP REJECT-*_$INPUT STATUS_^1_%STA- STATUS,I_^1_(ENA_%0_^1_%JMP* MAKQ_^1TMAKQ EQU TMAKQ(*)_^1_%RTJ+ RLAQ_)RELEASE A/Q CHANNEL_^1_%STQ- I_^1_%RTJ- (COMPRQ)_$GO COMPLETE REQUEST_^1_%JMP FNR_*GO FIND€€ NEXT REQUEST_^1_%EJT_]_^1*_$WRITE END OF FILE_^1_%SPC 2_^1WEOF_#ENA_%0_3PUNCH EOF CARD-SET PHONY_^1_(STA-_$SEQ,I_/CLEAR SEQUENCE BASE_^1_(ENA_%CHKSUM_^1_(ADD-_$I_^1_(STA-_$CORE,I_^1_(INA_%1_^1_(STA-_$LASTP1,I_^1_(LDA-_$EOFCRD,I_^1_(ALS_%4_^1_%AND- NZERO+4_^1_(STA-_$CHKSUM,I_^1_%LDA- NZERO+15_^1_(EOR-_$OFFSET,I_^1_(STA-_$OFFSET,I_^1_(ENA_%1_3SET WRITE AND OFFSET SWITCHES_^1_(STA-€€_$SWITCH,I_^1_%JMP PUNCH_^1_%SPC 2_^1*_$SET SEQUENCE NUMBER TO ZERO_^1_%SPC 2_^1ZROSEQ STQ- SEQ,I_(CLEAR SEQUENCE COUNTER_^1_%JMP* NOTMC_(TERMINATE THIS REQUEST_^1_%EJT_]_^1ERROR_"LDQ-_$LU,I_0CODE_^1_(QLS_%6_^1_(EAQ_%A_^1_(STA-_$ERRCOD,I_,SET UP FOR EXIT TO_^1_%LDA- NZERO+14_^1_(EOR-_$ERRTAB,I_,HANDLER_^1_(STA-_$ERRTAB,I_^1_(LDQ-_$CALL,I_^1_%CLR A_^1_%INP 1_,INPUT STATUS_^1_(N€€OP_%0_^1_%STA- STATUS,I_$SAVE STATUS_^1_(ENA_%1_^1_%OUT 1_,CLEAR CONTROLLER_^1_(NOP_%0_^1_%LDQ- I_^1_%RTJ- (AMONI)_^1SCHALM ADC $520A_(SCHD DOWN FOR ALARM_^1_%ADC ALMLLV_^1_%JMP- (ADISP)_^1ALMLLV STQ- I_^1_%RTJ+ RLAQ_)RELEASE A/Q CHANNEL_^1_%STQ- I_^1_%ENA 1_^1_%STA- ERRETN,I_^1_%JMP* MAKQ_^1UMAKQ LDQ- ERRCOD,I_^1_%RTJ+ LOG_*LOG ERROR IN EF_^1_%LDA- LU,I_)DO NOT USE ALTERNATE €€DEVICE HANDLER_^1_%SUB- DIAGLU,I_'ON DIAGNOSTIC LU_^1_%SAZ NORPT_^1_%JMP+ ALTDEV_^1NORPT JMP* TMAKQ_(GO TO COMPLETE REQUEST_^1MAKQ_!LDQ- ERRETN,I_^1_%SQZ 1_^1_%ENA UMAKQ-TMAKQ_!GET RETURN ADDRESS_^1_%STA- RETURN,I_^1_(ENQ_%0_^1_%STQ- ERRETN,I_^1_%ENA -ORIDE_^1_%AND- SWITCH,I_$SET OFFSET OVERRIDE SWITCH_^1_%STA- SWITCH,I_^1_%RTJ MAKEQ_^1_(LDQ-_$RETURN,I_^1_(JMP*_$TMAKQ,Q_^1_%E€€JT_]_^1PCNVRT_!STQ-_$RETURN,I_,CONVERT THE_^1_%AND- LPMSK+8_%CLEAR SLOP_^1_(TRA_%Q_3ASCII CODE_^1_(INA_%-$60_0IN A TO 12_^1_(SAP_%OUTRNG-*-1_*BIT HOLLERITH_^1_(INA_%$40_1LEAVE THE RESULT_^1_(SAP_%1_3IN A_^1OUTRNG_!ENQ_%$20_^1_%INQ -$20_^1_%LDA CDPC,Q_^1_(LDQ-_$BUFFAD,I_,STORE INTO_^1_(STA-_$(ZERO),Q_,BUFFER_^1_(RAO-_$BUFFAD,I_,INC BUFFER ADDRESS_^1_(LDQ-_$RETURN,I_^1_(JMP*_$PUNCH€€,Q_^1_%EJT_]_^1*_$PACK DATA INTO CARD READER'S BUFFER_^1_%SPC 2_^1PUT_$STQ-_$RETURN,I_^1_(TRA_%Q_^1_(ADQ-_$CHKSUM,I_^1_(STQ-_$CHKSUM,I_,THIS SUBROUTINE_^1_(LDQ-_$CYCLE,I_-ACCEPTS A WORD AS INPUT_^1_(JMP*_$PCYCL1,Q_,IT SEPERATES THIS WORD_^1PCYCL1_!ALS_%12_2IN TO 12 BIT COLUMNS_^1_(LDQ-_$BUFFAD,I_,AND STORES THEM INTO_^1_(STA-_$(ZERO),Q_+A PUNCH BUFFER._^1_(ALS_%12_^1_%AND- NZERO+8€€_^1_(STA-_$1,Q_^1_(ENQ_%PCYCL2-PCYCL1_^1PPEXIT_!STQ-_$CYCLE,I_^1_(LDQ-_$RETURN,I_^1_(JMP*_$PUNCH,Q_^1PCYCL2_!STA-_$TEMP,I_^1_%AND- NZERO+8_^1_(ALS_%8_^1_(LDQ-_$BUFFAD,I_^1_(EOR-_$1,Q_^1_(STA-_$1,Q_^1_(LDA-_$TEMP,I_^1_%AND- LPMSK+8_^1_(ALS_%4_^1_(STA-_$2,Q_^1_(ENQ_%PCYCL3-PCYCL1_^1_(JMP*_$PPEXIT_^1PCYCL3_!LDQ-_$BUFFAD,I_^1_(STA-_$3,Q_^1_(ALS_%4_^1_%AND- LPMSK+4_^1_(EOR-_$2,Q_^1_(STA€€-_$2,Q_^1_(INQ_%4_^1_(STQ-_$BUFFAD,I_^1_%ENQ 0_)RE-SET CYCLE TO ZERO_^1_%STQ- CYCLE,I_^1_%JMP* PPEXIT_#RETURN_^1_%EJT_]_^1PUNCH LDQ- I_^1_%RTJ- (AMONI)_^1PNCHIT ADC $520A_(SCHCD DOWN FOR PUNCH_^1_%ADC PUNCMS_^1_%JMP- (ADISP)_^1PUNCMS STQ- I_^1_%ENA 0_^1_(STA-_$CYCLE,I_^1_(ENA_%BINASC_.IS THE REQUEST BINARY MODE_^1_(AND-_$SWITCH,I_^1_(SAZ_%PUNCH1-*-1_^1_'JMP*_$PUNCH6_.NO_^1PUNC€€H1_!ENA_%FORMTD_.YES,FORMATTED_^1_(AND-_$SWITCH,I_^1_(SAZ_%PUNCH5-*-1_^1_(JMP*_$PUNCH3_^1PUNCH5_!LDQ-_$CORE,I_.NO,PUT A WORD IN THE BUFFER_^1_(LDA-_$(ZERO),Q_^1_(ENQ_%PUNCH4-PUNCH_'/_^1TPUT_#JMP*_$PUT_^1_%SPC 2_^1*_$PUNCH4 - UNFORMATTED BINARY_^1*_.CHECKS FOR 80 WORD BUFFER FULL -_^1*_.OR ALL DATA PACKED,WHEN EITHER CONDITION_^1*_.HAS BEEN MET -_^1*_.CONTROL IS PASSED TO PNCH17.._€€^1_%SPC 1_^1PUNCH4 RAO- CORE,I_^1_%LDA- BUFFER,I_!CHECK IF PUNCH BUFFER -_^1_%SUB- BUFFAD,I_!HAS BEEN FILLED._^1_%INA 80_^1_%SAZ FULL80_#SKIP IF FULL CARD_^1_%LDA- CORE,I_#CHECK IF ALL DATA HAS BEEN -_^1_%SUB- LASTP1,I_!MOVED TO PUNCH BUFFER._^1_%SAZ PNC69_$SKIP IF ALL DATA CONVT'D_^1_%JMP* PUNCH5_#PUT NEXT DATA WORD INTO BUFFER_^1FULL80 ENA -80_'80 WORDS TO PUNCH_^1_%STA- TEMP€€,I_^1_%JMP* TFDCRD_#PUNCH CARD_^1PNC69_"ENA_%CHEKSM+FORMTD+FIRST_^1_(EOR-_$SWITCH,I_^1_(STA-_$SWITCH,I_^1_(JMP*_$PNCH17_^1_%EJT_]_^1PUNCH6_!ENA_%FIRST_/ASCII PUNCH_^1_(AND-_$SWITCH,I_,FIRST CARD_^1_(SAZ_%PNC12-*-1_^1_(ENA_%FORMTD_.NO, FORMATTED_^1_(AND-_$SWITCH,I_^1_(SAN_%PNC16-*-1_^1_(LDA-_$CORE,I_.NO,LAST WORD_^1_(SUB-_$LASTP1,I_,PROCESSED_^1_(SAN_%PNC13-*-1_^1PNC16_"JMP_%DONE_0Y€€ES,FINISHED_^1PNC12_"ENA_%FIRST_/FIRST CARD-SET_^1_(EOR-_$SWITCH,I_,NOT FIRST_^1_(STA-_$SWITCH,I_^1PNC13_"LDQ-_$CORE,I_.PROCESS UPPER CHAR_^1_(LDA-_$(ZERO),Q_^1_(STA-_$TEMP,I_^1_(ARS_%8_^1_(ENQ_%PNCH7-PUNCH_^1TCNVRT_!JMP_%PCNVRT_^1PNCH7_"LDA-_$TEMP,I_.PROCESS LOWER_^1_(ENQ_%PNCH8-PUNCH_)CHAR_^1_(JMP*_$TCNVRT_^1_%SPC 2_^1*_$PNCH8 - FORM. OR UNFORM. ASCII_^1*_.CHECKS FOR 80 WORD BUF€€FER FULL -_^1*_.OR ALL DATA PACKED,WHEN EITHER CONDITION_^1*_.HAS BEEN MET -_^1*_.THE COMP. OF WORD COUNT IS SET IN 'TEMP'_^1*_.AND CONTROL IS PASSED TO 'FEEDCD'._^1_%SPC 1_^1PNCH8 RAO- CORE,I_^1_%LDA- CORE,I_#CHECK IF ALL DATA PACKED_^1_%SUB- LASTP1,I_^1_%SAZ PNCH9_$PACKED ALL_^1_%LDA- BUFFAD,I_!IS 80 WORD BUFFER FULL_^1_%SUB- BUFFER,I_^1_%INA -80_^1_%SAN PNC10_$SKIP IF BUFF.€€ IS NOT FULL_^1_%ENA -80_'FULL 80 WORDS_^1P8XX_!STA- TEMP,I_#COMP. OF WORD COUNT_^1TFDCRD JMP FEEDCD_#PUNCH A CARD_^1PNCH9 LDA- BUFFER,I_!CALCULATE WORD COUNT_^1_%SUB- BUFFAD,I_^1_%JMP* P8XX_%COMP. OF WORD COUNT TO TEMP._^1PNC10 JMP* PNC13_$PACK NEXT WORD_^1PUNCH3 ENA FIRST_(IS THIS THE FIRST CIRD_^1_%AND- SWITCH,I_^1_%SAZ PNCH3B_^1_%JMP* SEQXX_^1PNCH3B LDQ- CORE,I_'FORMATTED€€ BINARY_^1_%LDA- (ZERO),Q_$PICK UP FIRST WORD OF BUFFER_*82_^1_%ARS 8_,SHIFT TO LOWER BITS_382_^1_%INA -$2A_)CHECK FOR AN *_882_^1_%SAN PNCH3A_'SKIP IF NOT *_982_^1_%LDA- LASTP1,I_$LWA OF REQUEST_^1_%RTJ COMPV4_'GET DIFFERENCE_^1_%INA -41_^1_%SAM PNCH3C_'SKIP IF REC.LE.40_^1_%LDQ- CORE,I_'FWA OF REQUEST_^1_%JMP* PNCH3A_'JMP IF REC.GT.40_^1PNCH3C ENA BINASC_^1_%EOR- SWITCH,I_€€$CHANGE REQUEST TO ASCII_/82_^1_%STA- SWITCH,I_L82_^1_%JMP* PUNCH6_'COMPLETE AS ASCII REQUEST_-82_^1PNCH3A LDA- (ZERO),Q_$PICK UP FIRST WORD OF BUFFER_*82_^1_%SUB =N$2050_%IS THIS A NAM BLOCK_^1_%SAN SEQXX_(N0,GET NEXT SEQUENCE NUMBER_+82_^1_%LDA- NZERO+15_^1_%EOR- OFFSET,I_$SET DEFERRED OFFSET SWITCH_,82_^1_%STA- OFFSET,I_L82_^1_%ENA 0_,SET SEQUENCE NUMBER TO ZERO_+82_^1_%JMP* €€ SEQXX1_M82_^1SEQXX LDA- SEQ,I_(GET NEXT SEQUENCE NUMBER_.82_^1_%AND- LPMSK+8_%MODULO 256_^1SEQXX1 STA- SEQ,I_O82_^1_(RAO-_$SEQ,I_^1_(ALS_%8_^1_(INA_%$50_1ADD 7,9 PUNCH_^1PNCH18_!ENQ_%PNCH12-PUNCH_^1_%JMP* TPUT_^1PNCH12_!ENA_%FIRST_/IS THIS THE FIRST CARD_^1_(AND-_$SWITCH,I_^1_(SAN_%PNCH16-*-1_^1_(ENA_%FIRST_/YES,RESET FIRST CARD_^1_(EOR-_$SWITCH,I_,SWITCH AND PUNCH_^1_(STA-_$SWIT€€CH,I_,COMPLEMENTED LENGTH_^1_(LDA-_$CORE,I_^1_(SUB-_$LASTP1,I_^1_(ENQ_%PNCH13-PUNCH_^1_(JMP*_$TPUT_^1PNCH13_!LDQ-_$CORE,I_.PUNCH A WORD_^1_(LDA-_$(ZERO),Q_^1_(ENQ_%PNCH14-PUNCH_^1_(JMP*_$TPUT_^1PNCH14_!RAO-_$CORE,I_.INCREMENT CORE_^1_%SPC 1_^1*_$PNCH16 - FORMATTED BINARY_^1_%SPC 2_^1PNCH16 LDA- BUFFER,I_!CHECK IF BUFFER IS FULL_^1_%SUB- BUFFAD,I_^1_%INA 80_^1_%SAZ FUL80_$SKIP I€€F 80 WORD BUFF. IS FULL_^1_%LDA- CORE,I_#ALL WORDS PACKED_^1_%SUB- LASTP1,I_^1_%SAZ PNCH15_#SKIP IF ALL PACKED_^1_%JMP* PNCH13_#PACKED NEXT WORD_^1FUL80 JMP* FULL80_#SET FOR CARD PUNCH_^1PNCH15_!ENA_%CHEKSM_.YES, HAS THE CHECKSUM_^1_(AND-_$SWITCH,I_,BEEN PUNCHED_^1_(SAN_%PNCH17-*-1_^1_(ENA_%CHEKSM_.NO, RESET CHECKSUM_^1_(EOR-_$SWITCH,I_^1_(STA-_$SWITCH,I_^1_(LDA-_$CHKSUM,I_,PUNCH€€ THE CHECKSUM_^1_(TCA_%A_^1_(JMP*_$PNCH18_^1_%EJT_]_^1*_$PNCH17 - FORM. AND UNFORM. BINARY_^1*_.CHECK IS MADE FOR CYCLE = ZERO_^1*_.IF CYCLE IS ZERO ALL DATA HAS BEEN PACKED_^1*_.OR 80 WORD BUFFER IS FULL_^1*_.THE COMP. OF WORD COUNT IS SET INTO_^1*_.'TEMP' AND CONTOL IS PASSED TO 'FEEDCD'_^1*_.IF CYCLE IS NOT ZERO - A ZERO IS_^1*_.PACKED INTO THE BUFFER AND THE_^1*_.CHECK IS MADE €XAGAIN FOR CYCLE = ZERO_^1_%SPC 2_^1PNCH17 LDA- CYCLE,I_"ALL DATA HAS BEEN PACKED_^1_%SAN PNCH19_#SKIP IF NOT CYCLE ZERO_^1_%LDA- BUFFER,I_!GET COMP. OF WORD COUNT_^1_%SUB- BUFFAD,I_^1_%STA- TEMP,I_#OF NUMBER OF WORDS TO PUNCH_^1_%JMP* TFDCRD_#FEED A CARD FOR PUNCHING_^1_%SPC 2_^1PNCH19_!ENA_%0_3NO, PUNCH A ZERO_^1_(JMP*_$PNCH18_^1_(END_^__XPD17293 CSY/ B31 P€1_%NAM D17293_'DECK-ID B31 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_*1729-3 CARD READER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*P17293 ADC $520E_%00 SCHEDULER CALL_0**MSOS 4.1**_^1*_$ADC I17293_'01 INITIATOR ADDRESS_^1*_$ADC C17293_'02 CONTINUATOR ADDRESS_^1*_$ADC E17293_'€€03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $05A1_(07 CONVERTER, EQUIPMENT, STATION_^1*_$ADC $1A62_(08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L17293_'13 DRIVER LENGT€€H IF MASS MEMORY_^1*_%ADC S17293_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 PACKING CYCLE ADDRESS STORAGE_^1*_%NUM $000F_(16 E O F FORMAT (6789)_^1*_%ADC BFR293_'17 FIRST LOCATION OF 80 WORD INPUT BUFFER_^1*_%NUM 0_,18 CURRENT CARD BUFFER LOCATION_^1*_%NUM 0_,19 SUBROUTINE RETURN ADDRESS_^1*_%NUM 0_,20 CARD SEQUENCE NUMBER_^1*_%NUM 0_,21 RECORD LENGTH_^1€€*_%NUM 0_,22 CHECKSUM ACCUMULATOR_^1*_%NUM 0_,23 TEMPORARY STORAGE_^1*_%NUM 0_,24 OUTPUT OFFSET SWITCH_^1*_%NUM 0_,25 TEMPORARY STORAGE_^1*_%NUM 0_,26 HOLLERITH ERROR FLAG_^1*_%ADC U17293_'27 DIAGNOSTIC LOGICAL UNIT_^1**_]_^1*_$BZS BFR293(80)_"28 INPUT BUFFER_^1**_7107 INPUT BUFFER_^1*_]_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1_%EXT ALTDEV_^1_%EXT MAKEQ_^1_€€%EXT RQAQ_)REQUEST A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT* CDRD_)CARD CONVERSION (READ)_+**MSOS 4.1**_^1_%EXT MAS300_'EXIT FOR DRIVER_^1_%SPC 2_^1_%ENT E17293_'DRIVER ERROR_5**MSOS 4.1**_^1_%ENT I17293_'DRIVER INITIATOR_1**MSOS 4.1**_^1_%ENT C17293_'DRIVER CONTINUATOR_/**MSOS 4.1**_^1_%SPC 2_^1_%EQU ADISP($EA)_"ADDRESS OF DI€€SPATCHER_^1_%EQU AFNR($B5)_^1_%EQU COMPRQ($B6)_^1_%EQU AMONI($F4)_^1_%EJT_]_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_"DIAG. CLOCK TIME_^1_%EQU LU(5)_$LOGICAL UNIT_^1_%EQU REQAD(6)_!ADDRESS OF REQUEST_^1_%EQU CALL(7)_"HARDWARE ADDRESS_^1_%EQU ERRTAB(8) REQUEST STATUS_^1_%EQU SWITCH(9) DRIVER SWITCHS_^1_%EQU CORE(10)_!CORE ADDRESS WORD_^1_%EQU LASTP1€€(11) LAST CORE LOCATION PLUS ONE_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%EQU CYCLE(15) PACKING CYCLE_^1_%EQU EOFCRD(16) EOF CARD PATTERN_^1_%EQU BUFFER(17) STARTING ADDRESS OF 80 WORD BUFFER_^1_%EQU BUFFAD(18) CURRENT WORD ADRS. OF 80 WORD BUFFER_^1_%EQU RETURN(19) SUBROUTINE RETURN ADDRESS_^1_%EQU SEQ(20)_"SEQUENCE NUMBER_^1_%EQU LENGTH(21) RECORD LENGTH_^1_%EQU CHKSUM(22€€) CHECKSUM WORD_^1_%EQU TPMWRD(23)_^1_%EQU TMPWRD(23) TEMP.MOTION REQUEST PARAMETERS_^1_%EQU OFFSET(24) OFFSET CARD SWITCH_^1_%EQU ERRCOD(25) ERROR CODE_^1_%EQU HOLERR(26)_"HOLLERITH ERROR_2**MSOS 4.1**_^1_%EQU DIAGLU(27)_"DIAGNOSTIC LU_4**MSOS 4.1**_^1_%SPC 2_^1***_"ERROR CODES_^1_%SPC 2_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU ALARM(2)_!ALARM_^1_%EQU CKSMER(4) CHECK €€SUM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU HOLRTH(8) ILLEGAL HOLLERITH PUNCH_^1_%EQU SEQER(9)_!OUT OF SEQUENCE ERROR_^1_%EQU LENGER(10) NO NEGATIVE RECORD LENGTH_^1_%EQU NO79ER(12) NO 79 PUNCH ON BINARY_^1_%EQU DINTER(34) DATA INTERRUPT NUMBER 81_^1_%EQU ERLYEP(35) EOP BEFORE ALL 80 READ_^1_%EJT_]_^1***_"MASK BITS_^1_%SPC 2_^1_€€%EQU FORMTD(2) FORMATTED REQUEST IF BIT1=1_^1_%EQU ORIDE(4)_!CHECK SUM OVERRIDE_^1_%EQU BINASC(8) MODE BIT_^1_%EQU FIRST($10) FIRST CARD INDICATOR_^1_%EQU FSTCRD($10)_^1_%EQU QMARK($3F)_^1_%EQU ZERO($22)_^1_%EQU ZROBIT($33)_^1_%EQU ONEBIT($23)_^1_%EQU H0001($23)_^1_%EQU H000F(6)_^1_%EQU H00FF($A)_^1_%EQU H0FFF($E)_^1_%EQU H0080($2A)_^1_%EQU HFF00($1A)_^1_%EQU HFFF€€0($16)_^1_%EQU H0100($2B)_^1_%EQU HC000($20)_^1_%EQU HFFBF($39)_^1_%EQU LPMSK(2)_H*MSOS V4.0_^1_%EQU BIT11($2E)_^1_%EQU BIT14($31)_^1_%EQU BIT15($21)_^1_%EJT_]_^1_%SPC 2_^1START STQ- I_^1_%LDQ =XE17293-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC17293-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 2,I_^1_%LDQ =XI17293-START_A**MSOS 4.1**_^1_%AAQ A_^1_%STA- 1,I_^1_%€€JMP* I17293+1_^1MS300 JMP+ MAS300_'RELEASE BUFFER_3**MSOS 4.1**_^1E17293 STQ- I_N**MSOS 4.1**_^1_%ENA TIMERR_'TIME OUT ERROR_4*MSOS V4.0*_^1_%JMP* TTRROR_^1_%EJT_]_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I17293 STQ- I_,INIATIATOR_7**MSOS 4.1**_^1_%RTJ- (AFNR)_'GET A REQUEST_^1_%JMP* MS300_^1_%ENA 0_^1_%STA- TPMWRD,I_^1_%STA- CHKSUM,I_^1_%STA- CYCLE,I_^1_%STA- HOLERR,I_G**MSOS€€ 4.1**_^1_%LDQ- REQAD,I_I*MSOS V4.0_^1_%LDA- (ZERO),Q_!GET REQUEST CODE_5*MSOS V4.0_^1_%ARS 9_O*MSOS V4.0_^1_%AND- LPMSK+5_I*MSOS V4.0_^1_%INA -14_'CHECK IF MOTION REQUEST_.*MSOS V4.0_^1_%SAN INITRD_#SKIP IF NOT MOTION_3*MSOS V4.0_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_'GET PARAMETERS_7*MSOS V4.0_^1_%SAP P3-*-1_#SKIP IF NOT ITERATIVE TYPE_+*MSOS €€V4.0_^1_%AND =N$7000_"GET ONLY PARAMETER_3*MSOS V4.0_^1P3_#AND- HFFF0_$NOT ITERATIVE - GET ALL PARAMETERS_"*MSOS V4.0_^1_%STA- TMPWRD,I_!SAVE PARAMETER STRING_0*MSOS V4.0_^1_%JMP MORMC_$PROCESS MOTION REQUEST_/*MSOS V4.0_^1INITRD JMP FEEDCD_#INITIATE CARD READ_^1_%SPC 2_^1***_"EOF READ - SET BIT 14 IN ERRTAB WORD_^1***_/SET BIT 11 IN STATUS WORD_^1_%SPC 2_^1EOFRD LDA- BIT14_€€(READ EOF_^1_%EOR- ERRTAB,I_$MARK THE REQUEST_^1_%STA- ERRTAB,I_$COMPLETE WITH ERROR_^1_%LDA- H0100_^1_%STA- OFFSET,I_^1_%ALS 3_O*MSOS V4.0_^1_%STA- STATUS,I_!SET BIT 11 IN STATUS WORD_,*MSOS V4.0_^1_%JMP* TODONE_J*MSOS V4.0_^1_%EJT_]_^1***_"CONVERT 12 BIT HOLL. COLUMN TO ASCII_^1_%SPC 2_^1CONVRT SAN 2_^1_%ENA $20_^1_%JMP* GETOUT_'CONVERT 12 BIT HOLLERITH_^1_%STQ- RETURN,I_^1_%€€TRA Q_,COLUMN TO ASCII_^1_%ENA 0_^1_%QLS 7_^1_%SQP 1_^1_%INA $71_*ROW 1_^1_%QLS 1_^1_%SQP 1_^1_%INA $62_*ROW 2_^1_%QLS 1_^1_%SQP 1_^1_%INA $63_*ROW 3_^1_%QLS 1_^1_%SQP 1_^1_%INA $64_*ROW 4_^1_%QLS 1_^1_%SQP 1_^1_%INA $65_*ROW 5_^1_%QLS 1_^1_%SQP 1_^1_%INA $66_*ROW 6_^1_%QLS 1_^1_%SQP 1_^1_%INA $67_*ROW 7_^1_%QLS 1_^1_%SQP 1_^1_%INA $18_*ROW 8_^1_%QLS 1_^1€€_%SQP 1_^1_%INA $79_*ROW 9_^1_%AND =N$FF8F_%CLEAR CARRY FORCING BITS FOR_^1_%QLS 5_,NUMERIC PUNCHES_^1_%SQP 1_^1_%INA $70_*ROW 12_^1_%QLS 1_^1_%SQP 1_^1_%INA $60_*ROW 11_^1_%QLS 1_^1_%SQP 1_^1_%INA $50_*ROW ZERO_^1_%AND- HFFBF_^1_%ENQ 0_^1_%LLS 9_,ILLEGAL PUNCH_^1_%SQZ NOHLER_^1_%LDQ- BUFFER,I_G**MSOS 4.1**_^1_%LDA- EOFCRD,I_G**MSOS 4.1**_^1_%AND- H0FFF_J**MSOS 4.1**€€_^1_%EOR- (ZERO),Q_G**MSOS 4.1**_^1_%SAN 1_N**MSOS 4.1**_^1_%JMP* EOFRD_J**MSOS 4.1**_^1_%ENA 1_^1_%STA- HOLERR,I_G**MSOS 4.1**_^1_%ENA QMARK_^1_%JMP* SETUP_^1NOHLER LLS 6_^1_%LDQ CDRD,Q_I**MSOS 4.1**_^1_%SAN 1_,UPPER CHAR_^1_%LLS 8_,NO, SHIFT IT_^1_%LLS 8_^1SETUP AND- H00FF_^1_%LDQ- RETURN,I_^1GETOUT JMP ASCII1,Q_^1TTRROR JMP* TERROR_^1TODONE JMP* TTDONE_^1_%EJT_]_^1***_€€"DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C17293 STQ- I_,CONTINUATOR ENTRY_0**MSOS 4.1**_^1_%LDQ- CALL,I_^1_%INP DEJECT-*_^1_%STA- STATUS,I_^1_%ENA 2_^1_%OUT DEJECT-*_$CLEAR INTERRUPTS_^1_%LDA- TIME,I_I**MSOS 4.1**_^1_%SAM GHOST_J**MSOS 4.1**_^1_%LDA- LU,I_K**MSOS 4.1**_^1_%SAZ GHOST_J**MSOS 4.1**_^1_%ENA -1_M**MSOS 4.1**_^1_%STA- TIME,I_I**MSOS 4.1**_^1_%ENA $20_*ALARM STATUS_€€5**MSOS 4.1**_^1_%AND- STATUS,I_H*MSOS V4.0_^1_%SAZ CHKB5_(SKIP IF NOT ALARM INTERRUPT_%**MSOS 4.1**_^1_%JMP* ALMINT_'PROCESS ALARM INTERRUPT_***MSOS 4.1**_^1GHOST JMP- (ADISP)_"GHOST INTERRUPT RETURN TO DISP._%*MSOS V4.0_^1CHKB5 ENA $10_*EOP BIT_:**MSOS 4.1**_^1_%AND- STATUS,I_H*MSOS V4.0_^1_%SAZ DATINT_'SKIP IF DATA INTERRUPT_+**MSOS 4.1**_^1_%JMP* EP1729_#PROCESS EOP INTERR€€UPT_0*MSOS V4.0_^1DATINT ENA 8_N**MSOS 4.1**_^1_%AND- STATUS,I_G**MSOS 4.1**_^1_%SAZ ODDINT_I**MSOS 4.1**_^1_%JMP* DA1729_I**MSOS 4.1**_^1ODDINT JMP* ANDATA_^1_%EJT_]_^1ALMINT ENA ALARM_$ALARM - NO TECH. DISCRIPTION 2_%**MSOS 4.1**_^1TERROR JMP ERROR_$REPORT ERROR_9*MSOS V4.0_^1_%EJT_R*MSOS V4.0_^1***_"PROCESS DATA INTERRUPT_?*MSOS V4.0_^1_%SPC 2_^1DA1729 INQ -1_N*MSOS V4.0_^€€1_%LDA- SWITCH,I_!CHECK IF DATA INT. FOR SLEW_**MSOS V4.0_^1_%SAP DATA_%SKIP IF NOT FOR SLEW_1*MSOS V4.0_^1_%JMP* SLWDAT_J*MSOS V4.0_^1DATA_!LDA- BUFFAD,I_G**MSOS 4.1**_^1_%SUB- BUFFER,I_L68*1546_^1_%INA -80_*MUST READ ONLY 80 COLUMNS (0-79) **MSOS 4.1**_^1_%SAM GETDAT_'SKIP IF LEGAL DATA INT._***MSOS 4.1**_^1_%ENA DINTER_'DATA INTERRUPT NUMBER 81 ERROR 34 **MSOS 4.1**_^1_%JMP€€* TERROR_I**MSOS 4.1**_^1GETDAT INP DEJECT-*_$GET DATA WORD_4**MSOS 4.1**_^1_%LDQ- BUFFAD,I_$CURRENT BUFFER ADDRESS_+**MSOS 4.1**_^1_%STA- (ZERO),Q_$STORE INTO BUFFER_0**MSOS 4.1**_^1EXIT_!RAO- BUFFAD,I_$INCREMENT CURRENT WORD ADDRESS_"**MSOS 4.1**_^1_%LDQ- CALL,I_'FUNCTION_9**MSOS 4.1**_^1ANDATA ENA $1C_*INT. ON DATA - EOP - ALARM_^1_%OUT DEJECT-*_^1SAVSTA ENA 1_^1_%STA- TIME,€€I_^1_%JMP- (ADISP)_%FXIT TO DISPATCHER_^1TTDONE JMP DONE_^1DEJECT JMP* REJT_^1_%JMP* REJT+1_^1_%EJT_]_^1***_"PROCESS EOP INTERRUPT_^1_%SPC 2_^1EP1729 RTJ+ RLAQ_)RELEASE AQ CHANNEL_/MSOS 4.1**_^1_%STQ- I_NMSOS 4.1**_^1_%LDA- SWITCH,I_$CHECK FOR SLEW EOP_/**MSOS 4.1**_^1_%SAP EP_N*MSOS V4.0_^1_%CLR A_,CLEAR COLUMN 1 READ SWITCH_(*MSOS V4.0_^1_%STA* COL1_L*MSOS V4.0_^1_%JMP SNC_*€€FEED NEXT CARD FOR SLEW_+*MSOS V4.0_^1EP_#LDA- BUFFAD,I_G**MSOS 4.1**_^1_%SUB- BUFFER,I_$SORRY - NO FAST READ FEATURE_$**MSOS 4.1**_^1_%INA -80_*WE MUST READ 80 COLUMNS_***MSOS 4.1**_^1_%SAZ SCH_*SKIP IF 80 READ_2**MSOS 4.1**_^1_%ENA ERLYEP_'EARLY EOP INTERRUPT ERROR 35_$**MSOS 4.1**_^1_%JMP* TERROR_I**MSOS 4.1**_^1SCH_"LDQ- I_O*MSOS V4.0_^1_%RTJ* *+1_*CALCULATE ABS ADDRESSES_,*€€**MSOS4.0_^1_%ADC 0_P***MSOS4.0_^1_%LDA* *-1_N***MSOS4.0_^1_%INA ENDOP-*+2_H***MSOS4.0_^1_%STA* SCHINP+2_I***MSOS4.0_^1SCHINP RTJ- (AMONI)_I*MSOS V4.0_^1_%ADC $520A_J**MSOS 4.1**_^1_%ADC ENDOP_L***MSOS4.0_^1_%JMP- (ADISP)_^1ENDOP STQ- I_^1_%LDA- BUFFER,I_$PROCESS END OF_^1_%STA- BUFFAD,I_$OPERATION INTERRUPT_^1*_84 CARDS DELETED_762*1303_^1_%ENA FORMTD_^1_%AND- SWITCH,I_^1_%S€€AN FRDBIN-*-1_"SKIP OF RORMATTED BINARY_^1_%ENA BINASC_'UNFORMATTED BINARY OR ASCII_+62*1303_^1_%AND- SWITCH,I_L62*1303_^1_%SAZ UFBIN_O62*1303_^1_%JMP* TOASCI_N62*1303_^1UFBIN JMP RDBIN_O62*1303_^1FRDBIN ENQ TOGETW-GETWRD FREAD BINARY_^1_%JMP* GETWRD_'GET 1ST WORD_^1_%EJT_]_^1TOGETW TRA Q_^1_%ENA FIRST_^1_%AND- SWITCH,I_^1_%SAZ CHKEOF-*-1_^1_%JMP* FRDB1_^1CHKEOF LDA- EOFCR€€D,I_!CHECK FOR -_:*MSOS V4.0_^1_%ALS 4_,EOF CARD_^1_%AND- HFFF0_^1_%EAQ A_^1_%SAN TS1-*-1_"SKIP IF NOT EOF_6*MSOS V4.0_^1TTEF_!JMP EOFRD_(TO EOF READ_^1TS1_"JMP* FRDB1_^1_%SPC 2_O*MSOS V4.0_^1***_"PROCESS DATA INTERRUPT FOR SLEW REQUEST_.*MSOS V4.0_^1_%SPC 2_^1SLWDAT INP REJT-*_#READ FIRST COLUMN_4*MSOS V4.0_^1_%LDQ* COL1_)HAS COLUMN 1 BEEN CHECK_+*MSOS V4.0_^1_%SQN NEOFX_(€€FOR EOF,SKIP IF YES_/*MSOS V4.0_^1_%RAO* COL1_)SET COLUMN 1 CHECKED FLAG_)*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%LDA- EOFCRD,I_$EOF CARD PAT_6*MSOS V4.0_^1_%AND- H0FFF_K*MSOS V4.0_^1_%EAQ A_O*MSOS V4.0_^1_%SAN NEOFX-*-1_G*MSOS V4.0_^1_%STA* COL1_L*MSOS V4.0_^1_%JMP* TTEF_L*MSOS V4.0_^1NEOFX JMP* EXIT+1_'WAIT FOR EOP_6*MSOS V4.0_^1COL1_!NUM 0_,CLUMN 1 READ FLAG_^1****_]_^1_%SPC €€2_O*MSOS V4.0_^1FRDB1 TRQ A_^1_%AND- H00FF_$79 PUNCH_^1_%AND =N$0050_K72*1684_^1_%INA -$50_%IF FIRST CARD_^1_%SAN FRDB1A_'SKIP IF NO 7/9 PUNCH_^1_%JMP* FRDB2_(GO PROCESS BINARY_^1FRDB1A EQU FRDB1A(*)_^1_%ENA BINASC_'ASCII_^1_%AND- SWITCH,I_^1_%SAN TOASCI-*-1_^1_%ENA FIRST_(NO,FIRST WORD_^1_%AND- SWITCH,I_^1_%SAN NOT1ST_^1_%LDA- SWITCH,I_^1_%AND- ZROBIT+3_^1_%EOR- ONEBIT+3€€_$SET BIT 3 OF ESTAT1 = ASCII MODE_^1_%STA- SWITCH,I_^1TOASCI JMP ASCII_^1NOT1ST ENA NO79ER_'NO,ERROR-NO 7/9 PUNCH_^1_%JMP* TERROR_^1_%SPC 2_^1REJT_!JMP* REJECT_#INTERNAL REJECT_6*MSOS V4.0_^1_%JMP* REJECT+1_!EXTERNAL REJECT_6*MSOS V4.0_^1_%SPC 2_^1FRDB2 LDA- SWITCH,I_^1_%AND- ZROBIT+3_^1_%STA- SWITCH,I_$CLEAR BIT 3 OF ESTAT1 = BINARY MODE_^1_%ENA $20_*IS CHECKSUM_^1_%LAQ A_€€,OVERRIDE BIT SET_^1_%SAZ FRDB3-*-1_#IN THIS CARD_^1_%ENA -ORIDE_'YES,SET IT_^1_%AND- SWITCH,I_$IN PHYSTAB_^1_%INA ORIDE_^1_%STA- SWITCH,I_^1FRDB3 TRQ A_,IS THE SEQUENCE_^1_%ARS 8_,NUMBER OK_^1_%AND- H00FF_^1_%SAZ VERIFY_'SEQ.NUMBER.EQ.0_^1_%STA- TPMWRD,I_$SAVE SEQ.NUMBER_^1_%SUB- SEQ,I_^1_%SAN SEQERR_'SEQ.ERROR_^1_%JMP* FRDB4_(NORMAL EXIT_^1VERIFY STA- SEQ,I_(RESET SEQ.TO €€ZERO FOR_^1_%JMP* FRDB4_(NAM CARD,MACSKL OR 00FF_^1SEQERR LDQ- TPMWRD,I_^1_%STQ- SEQ,I_(SET SEQ.CTR.FOR A READ THRU_^1_%ENA SEQER_(EXIT TO ERROR_^1TTTROR JMP TERROR_^1FRDB4 LDA- SEQ,I_(INCREMENT SEQUENCE_^1_%INA 1_^1_%AND- H00FF_(NUMBER_^1_%STA- SEQ,I_^1_%ENQ FRDB6-GETWRD GET THE NEXT WORD_^1_%JMP* GETWRD_^1FRDB6 TRA Q_^1_%ENA FSTCRD_'IS THIS THE FIRST_^1_%AND- SWITCH,I_$C€€ARD OF THE RECORD_^1_%SAZ 1_^1_%JMP* NOTOST_^1_%ENA FSTCRD_'YES,RESET FIRST CARD_^1_%EOR- SWITCH,I_$SWITCH_^1_%STA- SWITCH,I_^1_%SQM LNGOK-*-1_^1_%LDA- SEQ,I_(DECREMENT SEQUENCE NUMBER_^1_%INA -1_-FOR A RE-TRY_^1_%STA- SEQ,I_^1_%ENA LENGER_^1_%JMP* TTTROR_^1LNGOK STQ- LENGTH,I_^1MORE_!ENQ FRDB7-GETWRD GET THE NEXT WORD_^1GETWRD STQ- RETURN,I_$THIS SUBROUTINE_^1_%LDQ- CYCLE,€€I_%WILL ASSEMBLE_^1_%JMP* CYCLE1,Q_$AND DELIVER_^1CYCLE1 LDA- BUFFAD,I_$A BINARY WORD_^1_%TRA Q_,FROM THE_^1_%SUB- BUFFER,I_$CORE BUFFER_^1_%INA -80_*IF THE BUFFER_^1_%SAN NOTEXB-*-1_"IS EMPTY WHEN_^1_%JMP* FEEDCD_'WORD IS REQUESTED,A -_^1NOTEXB LDA- (ZERO),Q_$FEED CYCLE IS_^1_%LDQ- 1,Q_*INITIATED_^1_%QLS 4_^1_%LLS 4_^1_%ENQ CYCLE2-CYCLE1_^1GETWEX STQ- CYCLE,I_^1_%TRA Q_^1_%€€ADQ- CHKSUM,I_$UPDATE CHECKSUM_^1_%STQ- CHKSUM,I_^1_%LDQ- RETURN,I_^1_%JMP* GETWRD,Q_^1FRDB7 TRA Q_^1NOTOST LDA- LENGTH,I_^1_%SAN NOTUST-*-1_^1_%TRQ A_^1_%JMP* FRDB9_^1NOTUST LDA- CORE,I_^1_%SUB- LASTP1,I_$LAST PLUS 1_^1_%SAZ GOTALL-*-1_^1_%TRQ A_,NO,STORE THE WORD_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_'INCREMENT CORE ADDRESS_^1GOTALL RAO- LENGTH,I_$HAS THE COMPLE€€TE_^1_%LDA- LENGTH,I_$RECORD BEEN READ_^1_%SAZ FRDB8-*-1_^1_%JMP* MORE_)NO_^1FRDB8 ENQ FRDB9-GETWRD YES,GET THE CHECKSUM_^1_%JMP* GETWRD_^1REJECT JMP* INTRNL_^1_%ENA EXTREJ_'SET EXTERNAL REJECT ERROR_^1_%JMP* TTTROR_'CODE_^1_%EJT_]_^1***_"SCHEDULE UP FOR DATA READ_^1_%SPC 2_^1FEEDCD LDQ- I_^1_%LDA- (I)_M*MSOS V4.0_^1_%STA* SCHDAT_#SCHEDULE AT DRIVER'S PRIORITY_(*MSOS V4.0_^1_€€%RTJ* *+1_*CALCULATE ABS ADDRESS_.***MSOS4.0_^1_%ADC 0_P***MSOS4.0_^1_%LDA* *-1_N***MSOS4.0_^1_%INA FEEDIT-*+2_G***MSOS4.0_^1_%STA* SCHDAT+1_H*MSOS V4.0_^1_%ADD =XALMLLV-FEEDIT_@**MSOS 4.1**_^1_%STA SCHALM+1_H*MSOS V4.0_^1_%RTJ- (AMONI)_^1SCHDAT NUM $520E_^1_%ADC *-*_^1_%JMP- (ADISP)_^1FEEDIT STQ- I_^1_%LDA- BUFFER,I_$INITIALIZE BUFFER ADDRESS_^1_%STA- BUFFAD,I_$ADDRESS_^1SNC€€_"RTJ+ RQAQ_)GET AQ_;**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDA- OFFSET,I_$CHECK OFFSET OPERATION_+**MSOS 4.1**_^1_%ENQ 0_^1_%STQ- OFFSET,I_^1_%EOR- H0001_(CLEAR CONTROLLER_^1_%LDQ- CALL,I_^1_%OUT REJECT-*_^1_%ENA $14_*SELECT INTERPRET ON_^1_%EOR- H0080_(DATA,ALARM AND END OF_^1_%OUT REJECT-*_$OPERATION_^1_%INP REJECT-*_^1_%STA- STATUS,I_^1_%JMP SAVSTA_^1_%SPC 2_^1***_"PR€€OCESS MOTION REQUESTS_^1_%SPC 2_^1NXTMC LDA- SWITCH,I_!CLEAR SLEW INDICATOR_1*MSOS V4.0_^1_%EOR- BIT15_K*MSOS V4.0_^1_%STA- SWITCH,I_H*MSOS V4.0_^1MORMC LDA- TMPWRD,I_!GET PARAMETER STRING_^1_%CLR Q_^1_%LLS 4_)ISOLATE ONE_^1_%SQZ MCDONE_#SKIP IF ZERO PARAMETER_^1_%STA- TMPWRD,I_!SAVE REMAINDER OF STRING_^1_%INQ -4_(IS IT REWIND UNLOAD (4)_^1_%SQZ MCDONE_#SKIP IF UNLOAD_^1_%€€INQ -1_(IS IT SLEW TO EOF (5)_^1_%SQZ SLEW_%SKIP IF SLEW REQUEST_^1_%JMP* MORMC_$CHECK NEXT PARAMETER_^1MCDONE JMP* DONE_%TERMINATE REQUEST_^1_%SPC 2_^1***_"SLEW CARDS TO END OF FILE_^1_%SPC 2_^1SLEW_!LDA- SWITCH,I_!SET SWITCH NEGATIVE_2*MSOS V4./_^1_%EOR- BIT15_K*MSOS V4.0_^1_%STA- SWITCH,I_!TO INDICATE SLEW REQUEST_^1_%JMP* FEEDCD_#FEED A CARD_^1_%EJT_]_^1FRDB9 LDA- CHKSUM,I€€_$DOES THE SUM BALANCE_^1_%SAZ DEXIT_$TO ZERO_^1_%ENA ORIDE_(NO,CHECKSUM OVERRIDE_^1_%AND- SWITCH,I_$SET_^1_%SAN DEXIT_(SKIP IF CHKSUM OVERRIDE SET_)72*1685_^1_%LDA- SEQ,I_O76*1885_^1_%INA -1_+DECREMENT SEQUENCE COUNTER_,76*1885_^1_%STA- SEQ,I_(FOR RETRY_=76*1885_^1_%ENA CKSMER_'NO,ERROR_^1_%JMP* ERROR_^1DEXIT JMP* DONE_^1RDBIN LDA- LASTP1,I_$SINGLE COLUMN INPUT_^1_%SUB- COR€€E,I_^1_%SAZ ONECHR-*-1_^1MORRDB ENQ RDBIN1-GETWRD NO,GET A WORD_^1_%JMP* GETWRD_^1RDBIN1 LDQ- CORE,I_'PUT IT AWAY_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_'INC CORE_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ RDBIN2-*-1_"FINISHED_^1_%JMP* MORRDB_'NO_^1ONECHR ENQ RDBIN3-GETWRD INPUT AND STORE_^1_%JMP* GETWRD_'A SINGLE INPUT_^1RDBIN3 AND- HFFF0_^1_%EOR- H000F_^1_%LDQ- CORE,I_^1_%STA- (ZER€€O),Q_^1RDBIN2 JMP* DONE_)FINISHED_^1CYCLE2 LDQ- BUFFAD,I_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1_%QLS 4_^1_%LLS 8_^1_%LDQ =XCYCLE3-CYCLE1_@**MSOS 4.1**_^1_%JMP* GETWEX_^1INTRNL ENA INTREJ_'SET INTERNAL REJECT ERROR_^1_%JMP* ERROR_^1CYCLE3 LDQ- BUFFAD,I_^1_%TRQ A_^1_%INA 4_^1_%STA- BUFFAD,I_^1_%LDA- 3,Q_^1_%ALS 4_^1_%LDQ- 2,Q_^1_%LRS 4_^1_%ENQ 0_^1_%JMP GETWEX_^1_%EJT_]_^1***_"REQUES€€T COMPLETION EXIT_^1_%SPC 2_^1DONE_!LDA- SWITCH,I_H*MSOS V4.0_^1_%SAP NM-*-1_#SKIP IF NOT SLEW_5*MSOS V4.0_^1_%JMP* NXTMC_$CHECK NEXT MOTION PARA._.*MSOS V4.0_^1NM_#ENA 1_^1_%LDQ- CALL,I_J*MSOS V4.0_^1_%OUT REJECT-*_!CLEAR CONTROLLER_5*MSOS V4.0_^1_%INP REJECT-*_!TAKE STATUS_:*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%LDA- STATUS,I_!LAST STATUS_^1_%AND- BIT11_$SAVE EOF BIT_9*MSOS V€€4.0_^1_%AAQ A_)MERGE_@*MSOS V4.0_^1_%STA- STATUS,I_!SAVE ADJUSTED STATUS_1*MSOS V4.0_^1_%ENA 0_^1_%JMP* MAKQ_^1TOMAKQ LDA- HOLERR,I_$CHECK ILLEGAL HOOLERITH_***MSOS 4.1**_^1_%SAZ TMAKQ_(PUNCH FLAG_^1_%ENA HOLRTH_^1_%JMP* ERROR_^1TMAKQ EQU TMAKQ(*)_G**MSOS 4.1**_^1_%RTJ+ RLAQ_)RELEASE A/Q CHAN._0**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%RTJ- (COMPRQ)_^1_%JMP I17293+1_G**MSOS €€4.1**_^1_%EJT_]_^1***_"ERROR HANDLER_^1_%SPC 2_^1ERROR LDQ- LU,I_)CODE_^1_%QLS 6_^1_%EAQ A_^1_%STA- ERRCOD,I_$SET UP FOR EXIT TO_^1_%LDA- HC000_^1_%EOR- ERRTAB,I_$HANDLER_^1_%STA- ERRTAB,I_^1_%CLR A_O*MSOS V4.0_^1_%LDQ- CALL,I_^1_%INP 1_^1_%NOP 0_^1_%STA- STATUS,I_^1_%ENA 1_^1_%OUT 1_^1_%NOP 0_^1_%LDQ- I_^1_%RTJ- (AMONI)_^1SCHALM NUM $520A_^1_%ADC *-*_L**MSOS 4.1**_^1_%€€JMP- (ADISP)_^1ALMLLV STQ- I_^1_%RTJ+ RLAQ_)RELEASE A/Q CHANNEL_.**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1NOGOT ENA UMAKQ-TOMAKQ_C**MSOS 4.1**_^1_%JMP* MAKQ_^1UMAKQ LDQ- ERRCOD,I_G**MSOS 4.1**_^1_%LDA- LU,I_)DO NOT LOG OR REPORT ERROR ON_#**MSOS 4.1**_^1_%SUB- DIAGLU,I_$DIAGNOSTIC LU_4**MSOS 4.1**_^1_%SAZ NORPT_J**MSOS 4.1**_^1_%RTJ+ LOG_*LOG FAILURE IN EF_0**MSOS 4.1**_^1_%JMP+€€ ALTDEV_^1NORPT JMP* TMAKQ_(COMPLETE REQUEST_1**MSOS 4.1**_^1MAKQ_!STA- RETURN,I_^1_%ENA -ORIDE_^1_%AND- SWITCH,I_^1_%STA- SWITCH,I_^1_%RTJ MAKEQ_^1_%LDQ- RETURN,I_^1_%JMP* TOMAKQ,Q_^1_%EJT_]_^1ASCII LDQ- BUFFAD,I_$GET A COLUMN_^1_%LDA- (ZERO),Q_^1_%ENQ 0_^1_%JMP* TNVRT_(CONVERT IT TO HOLLERITH_^1ASCII1 ALS 8_^1_%EOR- H00FF_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%SUB€€- LASTP1,I_^1_%SAN 1_^1_%JMP* ASCII4_^1_%RAO- BUFFAD,I_$GET THE NEXT COLUMN_^1_%LDQ- BUFFAD,I_^1_%LDA- (ZERO),Q_^1_%ENQ ASCII2-ASCII1_^1TNVRT JMP CONVRT_'CONVERT IT AND COMBINE_^1ASCII2 EOR- HFF00_^1_%LDQ- CORE,I_^1_%AND- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_'INCREMENT CORE_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$FINISHED_^1_%SAZ ASCII4-*-1_^1_%RAO- BUFFAD,I_$NO, FINISHED WIT€H THIS_^1_%LDA- BUFFAD,I_$CARD_^1_%SUB- BUFFER,I_^1_%INA -80_^1_%SAZ ASCII3-*-1_^1_%JMP* ASCII_(NO,DO THE REST OF CARD_^1ASCII3 ENA FORMTD_'YES,FORMATTED_^1_%AND- SWITCH,I_^1_%SAN ASCII4-*-1_^1_%JMP FEEDCD_'NO FEED ANOTHER CARD_^1ASCII4 JMP* DONE_%YES, FINISHED_^1_%END_]_^__PD17322 CSY/ B32 P€1_%NAM D17322_'DECK-ID B32 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1732-2/615, E32/PEC MAG TAPE DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1_%EQU LOWBTS($3)_"LOW ORDER BITS MASK_^1_%EQU HIHBTS($12)_!HIGH ORDER BITS MASK_^1_%EQU ZERO($22)_#LOCATION CON€€TAINING ZERO_^1_%EQU BITMSK($23)_!INDIVIDUAL BIT MASK_^1_%EQU ZROBIT($33)_!BIT EXCLUSION MASK_^1_%EQU FNR($B5)_$ADDRESS OF FIND NEXT REQUEST SUBROUTINE_^1_%EQU COMPRQ($B6)_!ADDRESS OF COMPLETE REQUEST SUBROUTINE_^1_%EQU DISP($EA)_#ADDRESS OF DISPATCHER_^1_%EJT_]_^1*_*PHYSICAL DEVICE TABLE LAYOUT_^1*_$REFER TO MASS STORAGE OPERATING SYSTEM 4.1 REF MAN_^1_%EQU EDCLK(4)_$DIAGNOS€€TIC CLOCK_^1_%EQU ELU(5)_'LOGICAL UNIT NUMBER ASSIGNED_^1_%EQU EPTR(6)_%LOCATION OF REQUEST PARAMETER LIST_^1_%EQU EWES(7)_%EQUIPMENT CODE FOR STATUS_^1_%EQU EREQST(8)_#REQUEST STATUS_^1_%EQU ESTAT1(9)_#DRIVER STATUS_^1_%EQU ECCOR(10)_#NEXT LOCATION TO STOR DATA_^1_%EQU ELSTWD(11)_"LAST WORD + 1 TO STORE DATA_^1_%EQU ESTAT2(12)_"LAST EQUIPMENT STATUS_^1_%EQU ETEMP1(15)_"TE€€MPORARY STORAGE_^1_%EQU UNTMOD(16)_"UNIT AND MODE SELECT CODE_^1_%EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_***MSOS 4.1**_^1_%EQU ETEMP2(18)_"TEMPORARY STORAGE_^1_%EQU RTRECV(19)_M0226_^1_%EQU ECKSUM(20)_F**MSOS4.0**_^1_%EQU ERDIRC(21)_^1_%EQU TCKSUM(22)_^1_%EQU ELINK(23)_#PHYSTAB THREAD_3**MSOS 4.1**_^1_%EQU PHSREC(24)_"MAXIMUM PHYSICAL RECORD SIZE (7 TRACK) 1732-2_^1_%EQU€€ ABUFF(25)_#PACK/UNPACK BUFFER ADDRESS_"(7 TRACK) 1732-2_^1_%SPC 2_O**MSOS4.0**_^1_%EQU NOISLN(2)_#MINIMUM ACCEPTABLE RECORD SIZE_^1_%EQU TERM($43)_N0309_^1_%EQU STOLSW($1F)_L0309_^1_%EQU WRITFM($30)_L0305_^1_%EQU TRYNBR(50)_"NUMBER OF RECOVERY RETRIES._'**MSOS4.0**_^1_%EQU MODCOD(15)_"SWITCH MODE ERROR CODE_^1_%EQU ABORTE(50)_"ID ABORT ERROR CODE_^1_%EQU ERRDEN(51)_"DENS€€ITY REQUEST ERROR CODE_^1_%EQU WRNGPA(58)_"WRONG POSTAMBLE ERROR CODE_^1_%SPC 2_^1_%EQU T61573(20)_"TYPE CODE FOR 615-73_^1_%EQU T61593(21)_"TYPE CODE FOR 615-9_^1_%SPC 2_^1_%EXT MAS300_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%EXT* PACK_^1_%EXT* UNPK_^1_%EXT* ASCBCD_^1_%EXT* BCDASC_^1_%EXT* PRUCMP_^1_%EXT LOG_^1_%ENT I17322,C17322,E17322_^1_%EXT COMPV4_J**MSOS4.0**_^1_%EXT REWC€€K_(REWIND CHECK_^1_%EJT_]_^1*_]_^1*_$ENTRY FROM MASDRV/DBLDRV_^1*_]_^1MASTAP STQ- I_,SAVE PHYSTB ADDRESS_^1*_]_^1*_$NOTE: THE NEXT INSTRUCTION IS CHANGED BY DRIVER TO JMP* ADRPLG_^1*_,BEFORE EXIT TO MAS300_^1*_]_^1_%STA* LOCN_)SAVE LOCATION OF DRIVER_^1*_86 CARDS DELETED_^1_%EJT_]_^1*_]_^1*_$ABSOLUTIZE PROGRAM RELOCATABLE ADDRESSES_^1*_]_^1_%TRA Q_,LOCATION OF DRIVER TO Q_^1_%ENA€€ TAPINI-MASTAP_^1_%AAQ A_^1_%STA* ADRINT_'STORE ADDRESS OF INITIATOR_^1_%LDA =XC17322-MASTAP_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA* ADRCON_'STORE ADDRESS OF CONTINUATOR_^1_%LDA =XE17322-MASTAP_^1_%AAQ A_,INCREMENT + BASE_^1_%STA* ADRHNG_'STORE ADDRESS OF HANGUP_^1_%LDA =XBUSYCK-MASTAP_^1_%AAQ A_^1_%STA BSYAD1_^1_%LDA =XNOBSY1-MASTAP_^1_%AAQ A_^1_%STA BSYAD2_^1_%LDA =XD€€UMBUF-MASTAP SET UP FWA-1_^1_%AAQ A_,OF ZERO LENGTH_^1_%STA ADVR+1_^1_%INA 1_,DUMMY BUFFER_^1_%STA DUMBUF_'FOR ADVANCE RECORD MOTION_^1_%LDQ- I_,PICK UP PHYSTB ADDRESS_^1_%SPC 3_^1I17322 STQ- I_^1_%LDA- (ZERO),Q_^1_%STA XXX+1_(REFLECT LEVEL_^1_%STA DVRLVL_'SET DRIVER LEVEL_^1ADRPLG LDA- 0_^1ADRINT ADC TAPINI_^1_%STA- 1,Q_*STORE ADDRESS OF INITIATOR IN PHYSTB_^1_%LDA- 0_^1AD€€RCON ADC C17322_^1_%STA- 2,Q_*STORE ADDRESS OF CONTINUATOR IN PHYSTB_^1_%LDA- 0_^1ADRHNG ADC E17322_^1_%STA- 3,Q_*STORE ADDRESS OF HANGUP IN PHYSTB_^1_%LDA- ELINK,Q_%PICK UP ADDRESS OF NEXT PHYSTB_^1_%TRA Q_,SAVE IN Q_^1_%SUB- I_,SUBTRACT ADDRESS OF START PHYSTB_^1_%SAZ TAPINI_'SKIP IF DONE_^1_%JMP* ADRPLG_'GO BACK AND SET UP NEXT PHYSTB_^1_%EJT_]_^1*_]_^1*_$DRIVER INITIATOR EN€€TRY FOR ALL EXCEPT FIRST REQUEST_^1*_]_^1TAPINI STQ- I_,SAVE ADDRESS OF PHYSTB_^1_%LDA- 0_^1LSTPT NUM 0_,ADDRESS OF CURRENT PHYSTB_^1_%SAZ NOTBSY_Q0308_^1_%JMP- (DISP)_Q0308_^1_%SPC 2_^1LOCN_!ADC MASTAP_'DRIVER LOCATION_^1ERRCNT NUM 0_^1_%SPC 2_^1NOTBSY STA* ERRCNT_'RESET COUNTER_^1_%LDA- I_^1_%STA* LSTPT_^1TSTRWD LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+6_$GET BIT 6 OF ESTAT1,I_€€40308_^1_%SAZ NORWD_(CHK 4 REWIND_=0308_^1_%JMP* NXTPT_K**MSOS4.0**_^1NORWD LDA- ESTAT1,I_$GET BIT 5_@0308_^1_%AND- BITMSK+5_O0308_^1_%SAZ FIND_S0308_^1_%LDA- I_^1_%STA* LSTPT_(UPDATE PDT POINTER_^1*_83-CARDS DELETED_^1_%LDA* RW_^1_%INA -1_^1_%STA* RW_^1_%JMP TAPC2_(GO EXECUTE REST OF MOTION_^1FIND_!RTJ- (FNR)_(FIND NEXT REQUEST_^1_%JMP* NXTPT_(NO REQUEST THIS PHYSTB_^1_%LDQ- €€I_,CURRENT PHYSTB_^1_%STQ* LSTPT_(UPDATE LAST POINT_^1_%LDQ- EPTR,I_'LIST LOCATION IN Q_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- LOWBTS+4_^1_%INA -14_*A = 0 IF MOTION_^1_%SAN NOMO_)SKIP IF NOT MOTION_70308_^1_%JMP MOTION_'REQUEST_B0308_^1NOMO_!JMP* XFER_^1_%EJT_]_^1NXTPT LDA- ELINK,I_%GET NEXT PHYSTB_^1_%STA- I_^1_%EOR* LSTPT_^1_%SAZ EXIT_)SKIP IF END OF THREAD_40308_^1_%LDA- ERE€€QST,I_$IS AN ERROR PENDING ON THIS UNIT_^1_%AND- BITMSK+14_^1_%SAN BACK_^1_%JMP* TSTRWD_^1BACK_!JMP* NXTPT_^1EXIT_!CLR A_^1_%STA* LSTPT_(SET DRIVER NOT BUSY_^1_%STA- RTRECV,I_$CLEAR RECOVERY RETURN_^1_%LDA- 0_^1_%ADC $1800+ADRPLG-MASTAP-1_*(JMP* ADRPLG-MASTAP-1)_^1_%STA* MASTAP+1_^1_%LDA* RW_^1_%SAN EXIT1_^1_%JMP MAS300_^1EXIT1 JMP- (DISP)_'EXIT TO DISPATCHER_^1_%SPC 3_^1ZER€€OWD ENA 31_+ZERO WORDS ERROR_668*1517_^1_%JMP FAILED_N68*1517_^1_%SPC 3_^1RW_#NUM 0_^1_%EJT_]_^1XFER_!LDA- ELSTWD,I_^1_%LDQ- ECCOR,I_^1_%RTJ COMPV4_'GET TRANSFER LENGTH_^1_%STA* NUMBR_(SAVE FOR 7 TRACK CHECK_^1_%INA -NOISLN_%CHECK IF RECORD LENGTH.GT.NOISLN_^1_%SAM TOSHRT_^1_%SAZ TOSHRT_^1_%LDA- EREQST,I_$REQUEST STATUS TO A_^1_%ARS 4_,TYPE CODE TO LOWER BITS_^1_%AND- LOWB€€TS+6_$SAVE TYPE CODE ONLY_^1_%INA -T61593_%CHECK FOR 9 TRACK_^1_%SAZ M609_S0308_^1_%JMP* M608_S0308_^1TOSHRT JMP* ZEROWD_^1_%SPC 3_^1M609_!LDQ- ECCOR,I_^1_%STQ FWA_*SET FWA TO USERS BUFFER_^1_%LDA- ELSTWD,I_^1_%STA* LWA_*SET LWA TO USERS LAST_^1_%ENA 4_^1_%STA* PRITYC_^1_%LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+0_$BIT 0_D0308_^1_%SAZ REED_S0329_^1_%JMP* WREC_S0329_^1REED_!JMP* WR€€EC1_R0329_^1_%SPC 3_^1M608_!LDA- ABUFF,I_%PACK/UNPACK BUFFER IN PHYSTB_*MSOS4.1_^1_%STA* FWA_*SET FWA TO FIRST ALLOC_^1*_87 CARDS DELETED_^1_%LDA- PHSREC,I_$MAX PHYSICAL RECORD SIZE_.MSOS4.1_^1_%SUB- 0_,2 WORD INSTRUCTION_^1NUMBR NUM 0_,NUMBER OF WORDS TO TRANSFER_^1_%SAP NUMOK_(NUMBER WORDS LESS THAN OR EQUAL PHYSICAL REC._^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+1_^1_%SAZ UNF608_'S€€KIP IF UNFORMATTED REQUEST_^1_%LDA- PHSREC,I_^1_%STA* NUMBR_(SET LENGTH TO PHYSICAL RECORD SIZE_^1_%JMP* NUMOK_^1UNF608 LDA* NUMBR_^1_%RTJ PRUCMP_'CHK IF LAST PRU.LT.NOISE RECORD_$*72*1609*_^1_%STA* NUMBR_^1NUMOK LDA- ESTAT1,I_O0311_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAN LWACAL_Q0308_^1_%LDA* NUMBR_^1_%MUI- BITMSK+2_$NUMBER * 4_^1_%DVI- LOWBTS+1_$/3_^1_%SQZ 1_,NO REMAINDER_^1_%€€INA 1_,SOME REMAINDER, TALLY QUOTIENT_^1_%STA* NUMBR_^1LWACAL LDA* FWA_^1_%ADD* NUMBR_^1_%STA* LWA_*LWA = FWA + NUMBER OF WORDS_^1_%LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+0_$BIT 0_D0308_^1_%SAN WRITEI_Q0308_^1_%ENA 4_^1_%STA* PRITYC_'PARITY ODD FOR BINARY_^1_%LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAZ RREC_S0308_^1_%ENA 2_^1_%STA* PRITYC_^1_%ENA 0_^1RREC_!JMP* WR€€EC1_^1_%SPC 3_^1WRITEI ENA 4_^1_%STA* PRITYC_'SET PARITY CODE FOR ODD_^1_%LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAN WASC_S0308_^1_%LDA* FWA_^1_%LDQ* LWA_^1_%RTJ UNPK_)CONVERT BINARY TO ASSY/DASSY_^1_%JMP* WREC_^1WASC_!LDA* FWA_^1_%LDQ* LWA_^1_%RTJ ASCBCD_'CONVERT ASCII TO BCD FOR WRITE_^1_%ENA 2_^1_%STA* PRITYC_'SET PARITY CODE FOR EVEN_^1WREC_!RTJ CHKSUM_'G€€O CHECK SUM RECORD 1ST 16_/0308_^1_%STA- TCKSUM,I_^1_%ENA 1_V0329_^1WREC1 STA* MOTIDX_Q0329_^1_%EJT_]_^1IOXFER LDA* PRITYC_'PARITY CODE 1, OR 2_^1*_81 CARD DELETED_^1_%RTJ* UNTSEL_^1_%ALS 15_^1_%SAM TAPRDY_^1_%JMP NORDY_^1TAPRDY LDA- ESTAT1,I_^1_%AND- BITMSK+0_$BIT 0_D0308_^1_%SAZ IOCONT_Q0308_^1_%RTJ RINGCK_^1IOCONT LDQ* MOTIDX_%MOTION CODE INDEX_^1_%LDA* RWMOTN,Q_^1_%STA* €€FUNCT1_'SET FUNCTION CODES_^1_%LDQ* FWA_^1_%INQ -1_^1_%STQ* FWADR_^1_%LDA- (ZERO),Q_^1_%STA* SAVFWA_^1_%LDA* LWA_^1_%IIN 0_,STORE_!LWA+1 IN FWA-1_^1_%STA- (ZERO),Q_^1_%TRQ A_S1732-2_^1_%LDQ- EWES,I_^1_%INQ 2_S1732-2_^1_%OUT BUFREJ-*_$LOAD FWA-1_<1732-2_^1NMARD INP BUFREJ-*_^1_%SUB* FWA_*DIFFERENCE NMA,FWA_^1_%SAP 1_Q70*1611_^1_%JMP* NMARD_^1_%LDA- 0_,2 WORD INSTRUCTION_^1SA€€VFWA NUM 0_,USERS FWA-1_^1_%LDQ- 0_,2 WORD INSTRUCTION_^1FWADR NUM 0_S1732-2_^1_%STA- (ZERO),Q_$RESTORE CONTENTS OF FWA-1_^1_%EIN 0_,ENABLE INTERRUPTS_^1*_81 CARD DELETED_^1_%LDA- 0_,2 WORD INSTRUCTION_^1FUNCT1 NUM 0_,READ/WRITE MOTION FUNCTION_^1_%ENQ 0_^1_%RTJ* OUT_*READ/WRITE MOTION_51732-2_^1_%ENA 10_^1_%STA- EDCLK,I_^1_%JMP- (DISP)_^1_%EJT_]_^1BUFREJ JMP* BB_+INTERNAL R€€EJECT_^1_%ENA 6_,EXTERNAL REJECT_^1BA_#STA- ETEMP2,I_$SAVE AS ERROR CODE_^1_%LDA* SAVFWA_^1_%LDQ* FWADR_^1_%STA- (ZERO),Q_$RESTORE FWA-1_^1_%JMP FAILED+1_^1BB_#ENA 5_^1_%JMP* BA_^1_%SPC 5_^1RWMOTN NUM $108_)READ,EOP,_^1_%NUM $98_*WRITE,EOP_^1MOTIDX NUM 0_,AN INDEX INTO RWMOTN_^1PRITYC NUM 1_,PARITY CODE_^1FWA_"NUM 0_^1LWA_"NUM 0_^1SAVLWA NUM 0_V0308_^1SAVEIT NUM 0_Q72*16€€58_^1_%SPC 5_^1IN_#NUM 0_,RETURN ADDRESS OF IN SUBROUTINE_^1_%ADQ- EWES,I_'ADD IN EQUIPMENT CODE_^1_%INP INRJT-*_^1_%JMP* (IN)_)RETURN_^1_%SPC 5_^1INRJT JMP* INCODE_^1_%ENA 6_,EXTERNAL REJECT CODE_^1FAILX JMP FAILED_'GO TO FAILED ROUTINE_^1INCODE ENA 5_^1_%JMP* FAILX_^1_%SPC 5_^1OUT_"NUM 0_,RETURN ADDRESS OF OUT SUBROUTINE_^1_%ADQ- EWES,I_'ADD IN EQUIPMENT CODE_^1_%OUT €€INRJT-*_^1_%JMP* (OUT)_(RETURN_^1_%EJT_]_^1UNTSEL NUM 0_^1_%ADD- UNTMOD,I_$ADD UNIT AND MODE SELECT BITS_^1_%STA* CONCOD_^1_%EOR* LSTCON_'CHECK AGAINST LAST CONNECT AND DIRECT_^1US1_"SAM US2_*SKIP IF DIRECTION CHANGE_^1_%LDA- BITMSK+12_^1_%STA- ETEMP1,I_$SET MASK TO CHECK CONTROLLER ACTIVE_^1_%JMP* US3_^1US2_"LDA- BITMSK+1_^1_%STA- ETEMP1,I_$SET MASK TO CHECK BUSY_^1US3_"ENQ 0_^€€1_%RTJ* IN_+GET STATUS 1_^1_%AND- ETEMP1,I_$CHECK SELECTED STATUS_^1_%SAZ SLTIT_(SKIP IF BIT NOT SET TO SELECT_^1_%JMP* CKBUSY_'WAIT FOR NOT BUSY AT LEVEL 3_^1SLTIT LDA* CONCOD_'CONNECT CODE TO A_^1_%STA* LSTCON_'UPDATE LAST CONNECT_^1_%AND- LOWBTS+14_#MASK OFF DIRECTION BIT_^1_%ENQ 1_^1_%RTJ* OUT_*CONNECT TO UNIT_^1_%RTJ* STATUS_'UPDATE STATUS_^1_%JMP* (UNTSEL)_$RETURN TO USER_€€^1_%SPC 3_^1*_83 CARDS DELETED_^1CONCOD NUM 0_^1LSTCON NUM 0_,PREVIOUS CONNECT AND DIRECTION_(NONSTOP_^1_%SPC 3_^1CKBUSY LDQ- I_,PASS PHYSTB ADDRESS_^1_%RTJ- ($F4)_(SCHDLE BUSYCK,3,,1_^1_%NUM $5203_^1BSYAD1 ADC BUSYCK_^1_%JMP- (DISP)_'EXIT TO DISPATCHER_^1BUSYCK STQ- I_,SAVE PHYSTB ADDRESS_^1_%ENQ 0_^1_%RTJ* IN_+GET STATUS_^1_%AND- ETEMP1,I_$CHECK SELECTED STATUS_^1_%SAZ N€€OBUSY_'SKIP IF BIT NOT SET_^1_%JMP* CKBUSY_'RESCHEDULE BUSYCK_^1NOBUSY LDQ- I_,PASS PHYSTB ADDRESS_^1_%RTJ- ($F4)_(SCHDLE NOBSY1,X,,1_^1DVRLVL NUM $520A_^1BSYAD2 ADC NOBSY1_^1_%JMP- (DISP)_^1NOBSY1 STQ- I_,SAVE PHYSTB ADDRESS_^1_%JMP* SLTIT_(GO SELECT UNIT_^1_%EJT_]_^1*_]_^1*_*STATUS BIT POSITIONS_^1*_]_^1*_$BIT_/MEANING_^1*_%0_*READY_^1*_%1_*BUSY_^1*_%2_*CORRECTED DROPOUT_^1*_%€€3_*WRONG POSTAMBLE_^1*_%4_*END OF OPERATION_^1*_%5_*ALARM_^1*_%6_*LOST DATA_^1*_%7_*CONNECTED TO PE TRANSPORT_^1*_%8_*PARITY ERROR_^1*_%9_*END OF TAPE_^1*_$10_*LOAD POINT_^1*_$11_*FILE MARK_^1*_$12_*556 BPI_^1*_$13_*800 BPI_^1*_$14_*SEVEN TRACK_^1*_$15_*WRITE ENABLE_^1*_]_^1_%SPC 5_^1STATUS NUM 0_,READ STATUS 1, 2 AND STORE IN ESTAT2_^1_%ENQ 1_^1_%RTJ* IN_+READ STATUS 2_^1_%CLR €€ Q_^1_%LLS 9_,BIT 7 TO Q_^1_%QLS 3_,ZERO 3 BITS_^1_%LLS 5_,BITS 2-6 TO Q_^1_%QRS 1_,WASTE BIT_^1_%LRS 2_,REPOSITION A BITS_^1_%QLS 2_,REPOSITION Q BITS_^1_%EAQ A_,COMBINE IN A_^1_%STA- ESTAT2,I_^1_%ENQ 0_^1_%RTJ* IN_+READ STSUS 1_^1_%AND =N$F73_'MASK OFF UNWANTED BITS_^1_%ADD- ESTAT2,I_$COMBINE WITH STATUS 2_^1_%STA- ESTAT2,I_^1*_81 CARD DELETED_^1_%JMP* (STATUS)_L73*1728_€€^1_%EJT_]_^1*_827 CARDS DELETED_^1C17322 STQ- I_^1*_85 CARDS DELETED_^1*_85 CARDS DELETED (FOR 101*3616)_^1_%LDQ LSTPT_(CHECK FOR GHOST INT AND SET LAST_^1_%SQN TAPC06_'PHYSTB ADDRESS. SKIP IF NO GI._^1_%LDQ- EWES,I_^1_%ENA 2_^1_%OUT 1_,CLEAR INTERRUPTS_^1_%NOP 0_^1_%JMP EXIT_)EXIT IF NOT EXPECTED_2ECL PSR_^1TAPC06 STQ- I_^1_%ENA 2_^1_%ENQ 0_^1_%RTJ* OUT_*CLEAR INTERRUPT_^1€€_%ENQ 2_^1_%RTJ* IN_^1_%STA* SAVEIT_'SAVE NMA-1 (LWA)_472*1658_^1_%LDA- ESTAT1,I_$DO NOT CHECK FWA AND LWA_,72*1658_^1_%ALS 10_+IF A MOTION REQUEST_172*1658_^1_%SAP UPDAT_(NO MOTION REQUEST_372*1658_^1_%JMP* TAPC2_(MOTION REQUEST_672*1658_^1UPDAT LDA* SAVEIT_L72*1658_^1_%LDQ* LWA_O72*1658_^1_%STQ* SAVLWA_L72*1658_^1_%STA* LWA_O72*1658_^1_%LDQ* FWA_*FWA OF BUFFER._4**MSOS4.0**_^€€1_%RTJ COMPV4_'CHECK IF CURRENT ADDRESS IS WITHIN **MSOS4.0**_^1_%SAZ TAPC1_(BUFFER BOUNDARY._2**MSOS4.0**_^1_%SAP TAPC1_K**MSOS4.0**_^1BUFERR ENA 37_^1_%JMP FAILED_J**MSOS4.0**_^1TAPC1 LDQ* LWA_*CURRENT ADDRESS._2**MSOS4.0**_^1_%LDA* SAVLWA_'BUFFER LWA._7**MSOS4.0**_^1_%RTJ COMPV4_J**MSOS4.0**_^1_%SAZ TAPC2_K**MSOS4.0**_^1_%INA 0_O**MSOS4.0**_^1_%SAN TAPC2_K**MSOS4.0**_^€€1_%JMP* BUFERR_'YES_^1TAPC2 ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%RTJ* STATUS_N73*1728_^1_%LDA- ESTAT2,I_^1_%ALS 15_^1_%SAM REDY_S0308_^1NORDY ENA 14_^1_%JMP FAILED_^1REDY_!LDQ- RTRECV,I_$CHECK FOR RECOVERY I/O_^1_%JMP* REDY3,Q_%CONTINUE OR EXIT TO RECOVERY_^1REDY3 LDA- ESTAT1,I_$CHECK FOR MOTION_^1_%ALS 10_+MOTION BIT IN A15_^1_%SAP NOMO1_R0308_^1_%JMP NXT€€MOT_'EXCUTE NEXT MOTION_70308_^1NOMO1 ALS 5_,CHECK FOR READ_^1_%SAP 1_,SKIP IF READING_^1_%JMP* NOEF_)BYPASS CHECK IF WRITING_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 4_,EOF STATUS TO BIT 15_^1_%SAP NOEF_)SKIP IF NOT FILE MARK/TAPE MARK_^1_%JMP* ATEOF_(GOT END OF FILE_^1NOEF_!LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 10_+ALARM TO BIT 15_^1_%SAM ALRMCK_'SKIP IF ALARM TO CHECK RE€€ASON_^1_%JMP* NOALRM_'NO ALARM, CONTINUE_^1ALRMCK LDA- ESTAT2,I_$PICK UP STATUS_^1_%AND =N$3000_%SAVE ONLY DENSITY BITS_^1_%SAN ALRMC2_'SKIP IF TRANSPORT AT 556 OR 855 BPI_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 12_+WRONG POSTAMBLE ERROR TO A15_^1_%SAP ALRMC1_'SKIP IF NO ALARM_^1_%ENA WRNGPA_'ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC1 ENQ 1_^1_%RTJ IN_+GET S€€TATUS 2_^1_%AND- BITMSK+8_$CHECK FOR ID ABORT_^1_%SAZ ALRMC2_'SKIP IF NO ALARM_^1_%ENA ABORTE_'ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC2 LDA- ESTAT2,I_$STATUS TO A_^1_%ALS 7_,BIT 8 (PARITY) TO BIT 15_^1_%SAP ALRMC3_'SKIP IF NO PARITY ERROR_^1_%ENA 3_,ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC3 ALS 2_,BIT 6 (LOST DATA)_^1_%SAP NOALRM_'SKIP IF NO €€ERROR_^1_%ENA 1_,ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1NOALRM LDQ FWA_^1_%LDA LWA_^1_%RTJ* NOISCK_'CHECK FOR SNR_772*1131_^1_%JMP* RECV2_(NOT SNR_=72*1131_^1IODO_!LDA SAVLWA_^1_%STA LWA_O72*1131_^1_%JMP IOXFER_L72*1131_^1RECV2 LDA- ESTAT1,I_J72*1131_^1_%AND- BITMSK+0_^1_%SAZ NOWRIT_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_^1NOWRIT LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK S€€TATUS IN A15_^1_%SAM RECCMP_Q0308_^1_%LDA LWA_T0311_^1_%SUB FWA_^1_%ADD- ECCOR,I_%UPDATE FIRST WORD ADDRESS_^1_%STA- ECCOR,I_^1RECCMP LDQ- ESTAT1,I_^1_%LRS 1_,READ/WRITE BIT IN A15_^1_%SAP READC_R0308_^1_%JMP* WRITEC_Q0308_^1READC LDA- ESTAT2,I_^1_%ALS 4_,FILE MARK STATUS IN A15_^1_%SAP NOFILE_Q0308_^1ATEOF LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_C0308_^1_%STA- EREQST,I_O€€0308_^1_%JMP* CMPRD_^1NOFILE LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK IN A15_^1_%SAM CKMOD_R0308_^1_%JMP* WRITEC_Q0308_^1CKMOD LDQ- ESTAT1,I_^1_%LRS 4_,ASC BIT IN A15_^1_%SAP CKMOD1_'SKIP IF BINARY MODE_^1_%JMP* BCDASK_^1CKMOD1 LDA- ECCOR,I_^1_%STA* SNRADR_^1_%LDA FWA_^1_%LDQ LWA_^1_%RTJ PACK_)CONVERT ASSY/DASSY TO BINARY_^1_%LDA- ECCOR,I_^1_%LDQ* SNRADR_^1_%RTJ* NOISCK_^1_%JMP* WR€€ITEC_^1_%LDA* SNRADR_^1_%STA- ECCOR,I_^1_%JMP* IODO_^1_%SPC 2_^1SNRADR NUM 0_S68*1558_^1_%SPC 2_^1BCDASK LDA FWA_^1_%LDQ LWA_^1_%RTJ BCDASC_^1_%SPC 2_^1WRITEC LDQ- ESTAT1,I_^1_%LRS 2_,FORMAT BIT IN A15_^1_%SAM COMPL_R0308_^1_%LDA- ELSTWD,I_^1_%SUB- ECCOR,I_%GET DIFFERENCE OF LAST AND FIRST_^1_%SAZ COMPL_R0308_^1_%JMP XFER_S0308_^1COMPL LDA- ESTAT1,I_^1_%AND- BITMSK+5_^1€€_%SAN COMPLT_Q0308_^1CMPRD RTJ MAKEQ_^1COMPLT RTJ- (COMPRQ)_$COMPLETE THE REQUEST_^1_%JMP FIND_^1_%SPC 2_^1NOISCK NOP 0_V0311_^1_%RTJ COMPV4_'GET TRANSFER LENGTH_^1_%INA -NOISLN_P0226_^1_%SAZ NOISE_R0226_^1_%SAP NONOIS_Q0308_^1NOISE RAO* NOISCK_Q0308_^1NONOIS JMP* (NOISCK)_O0308_^1_%SPC 2_^1RECVR STA ERRNO_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+11_#BIT 11_C0308_^1_%S€€AZ RECV_S0308_^1_%LDA- EREQST,I_O0308_^1_%ADD- BITMSK+14_#BIT 14_C0308_^1_%STA- EREQST,I_O0308_^1_%JMP* COMPL_^1_%SPC 3_^1TIMES NUM 0_V0311_^1TRIES NUM 0_^1_%SPC 3_^1RECV_!LDQ- ELU,I_^1_%TRQ A_,LOGICAL UNIT TO A_^1_%EOR- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SAN T00001_'IT''S NOT, CONTINUE_^1_%JMP* LPRTN_^1T00001 QLS 6_^1_%ADQ ERRNO_^1_%ENA 15_^1_%RTJ LOG_^1_%LDA FWA_€€*ORIGINAL FWA_^1_%STA* TEMFWA_^1_%LDA MOTIDX_'MOTION INDEX_^1_%STA* TEMIDX_^1_%LDA SAVLWA_'ORIGINAL LWA_^1_%STA* TEMLWA_^1_%LDA- ESTAT1,I_$CHK 4 READ OR WRITE_60304_^1_%AND- BITMSK+0_O0304_^1_%SAN WRCVRO_'SKIP IF WRITE_<0304_^1_%JMP RRCVR_R0311_^1_%SPC 2_^1BKSPCT BSS BKSPCT(1)_N0305_^1NBRBSP BSS NBRBSP(1)_^1TEMIDX NUM 0_^1TEMFWA NUM 0_^1TEMLWA NUM 0_^1_%SPC 2_^1WRCVRO CL€€R A_^1_%STA* NBRBSP_^1_%STA* TRIES_^1_%ENA 5_^1_%STA* TIMES_R0304_^1WRCVR LDA* TIMES_R0304_^1_%SAN DEBUMP_Q0309_^1*_81 CARD DELETED_^1LPRTN ENA 0_^1_%STA- RTRECV,I_^1_%LDA ERRNO_^1_%JMP FAILED_Q0311_^1DEBUMP INA -1_U0309_^1_%STA* TIMES_R0304_^1CLRBKP CLR A_,CLEAR BKSP CNTR_:0304_^1_%STA* BKSPCT_Q0304_^1WRCVR1 LDA- ESTAT2,I_$CHK 4 LP_A0304_^1_%ALS 5_V0323_^1_%SAP NOLP_)S€€KIP IF NO LP_<0304_^1_%JMP* CKBKSP_'CHK BKSPCT_^1NOLP_!RTJ BKSSP_(BACKSPACE_@0311_^1_%RAO* NBRBSP_^1_%RAO* BKSPCT_Q0304_^1_%LDA- ERDIRC,I_$FD FROM PHYSTB_^1_%SAP REREAD_'TRY READ NEXT_^1_%ALS 1_,UPDATE DIRECTORY_^1_%STA- ERDIRC,I_$RESTORE FD_^1_%JMP* WRCVR1_'CONTINUE DASHING_90304_^1*_88 CARDS DELETED_^1REREAD ENQ 0_,PICK UP MOTION INDEX_50304_^1_%RTJ* SWAP_*SET UP READ._^1_%RT€€J* CALAD_^1DUMRD ENQ 0_V0304_^1_%RTJ* SWAP_*SET UP READ._^1_%RTJ* CALAD_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP READOK_'SKIP IF NO ERROR_90304_^1CORRFD LDA- ERDIRC,I_$FD Z A_C0304_^1_%ALS 1_V0304_^1_%SAP SHFT_)MID-RECV CORR NEEDED_50304_^1_%STA- ERDIRC,I_O0325_^1_%JMP* CLRBKP_Q0311_^1SHFT_!ALS 1_V0304_^1_%STA- ERDIRC,I_O0325_^1_%JMP* WRCVR_R0311_^1READOK RTJ* CHKSUM_^1_%EOR- ECK€€SUM,I_$CHKSUMS EQUAL_<0304_^1_%SAZ CKSMOK_'YES_F0304_^1_%JMP* CORRFD_'NO_G0304_^1CKSMOK LDA =N$DCDC_%RESET_D0304_^1_%STA- ERDIRC,I_$FD_G0304_^1RTYSNR ENQ 1_^1_%RTJ* SWAP_^1_%RTJ* CALAD_(WRITE SNR_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP WRTEOF_'SKIP IF NO PARITY_^1_%RTJ* BKSSP_^1_%CLR A_,SET EOF FLAG_^1_%RTJ* BKSSP_(WRITE EOF OVER BAD SPOT_^1_%RTJ* BKSSP_(BKSSP EOF_^1_%JMP* RTYSNR€€_'RETRY WRITING THE SNR._,**MSOS4.0**_^1WRTEOF LDA* TRIES_^1_%INA -TRYNBR_^1_%SAN CONEOF_^1_%JMP* LPRTN_^1CONEOF RAO* TRIES_^1_%ENA 0_^1_%RTJ* BKSSP_^1_%RTJ* BKSSP_^1_%ENQ 1_V0309_^1_%RTJ* SWAP_S0304_^1_%RTJ* CHKSUM_(CHECK SUM SNR._^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP ADVRCV_Q0310_^1_%RTJ* BKSSP_^1_%JMP* WRTEOF_^1ADVRCV LDA* TEMIDX_'ORIGINAL MO€€TIDX_^1_%STA MOTIDX_^1_%LDA* TEMFWA_'ORIGINAL FWA_^1_%STA FWA_^1_%LDA* TEMLWA_'ORIGINAL LWA_^1_%STA LWA_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_O0330_^1_%RTJ* CHKSUM_^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_R0330_^1_%RTJ STUSCK_^1_%JMP* ADVRV_R0330_^1_%LDA* ERRNO_^1_%JMP RECVR_^1ADVRV CLR A_^1_%STA- RTRECV,I_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE RECOVERY._^1_%INA -MODCOD_^1_%SAZ YESMOD€€_'SKIP IF MODE RECOVERY,_^1_%JMP NOALRM_^1YESMOD LDA- ESTAT2,I_$SET PSEUDO PE BIT._^1_%EOR- BITMSK+8_^1_%STA- ESTAT2,I_^1_%LDA- EREQST,I_$SET V BIT 14._^1_%EOR- BITMSK+14_^1_%STA- EREQST,I_^1_%JMP CMPRD_^1_%SPC 3_^1CKBKSP LDA* BKSPCT_^1_%INA -3_^1_%SAM CKBK1_^1_%JMP* DUMRD_^1CKBK1 LDA* NBRBSP_^1_%INA -2_^1_%SAZ CKBK2_^1_%JMP* LPRTN_^1CKBK2 JMP* CKSMOK_^1_%SPC 3_^1SWAP_!NO€€P 0_V0308_^1_%STQ MOTIDX_Q0308_^1_%RTJ* CALCUT_^1CALCUT NOP 0_^1_%SQN USNR_^1_%ENA READBF-CALCUT RELATIVE ADDRESS OF BUFFER_^1_%JMP* SWAP1_^1USNR_!ENA SNR-CALCUT_"RELATIVE ADDRESS OF SNR_^1SWAP1 ADD* CALCUT_Q0312_^1_%STA FWA_^1_%ADD* LWATAB,Q_O0308_^1_%STA LWA_T0308_^1_%JMP* (SWAP)_Q0308_^1_%SPC 3_^1ERRNO NUM 0_,ERROR NUMBER_^1LWATAB NUM 8_V0304_^1_%NUM 2_V0304_^1READ€€BF BSS READBF(8)_N0311_^1SNR_"NUM $2D2E_R0226_^1_%NUM $2D2E_R0226_^1*_813 CARDS DELETED_^1_%SPC 3_^1CALAD NOP 0_V0330_^1_%LDA =XALLRTN-REDY3_I0330_^1_%STA- RTRECV,I_O0330_^1_%JMP IOXFER_^1ALLRTN JMP* (CALAD)_P0330_^1_%SPC 3_^1CHKSUM NOP 0_V0308_^1_%LDA LWA_T0304_^1_%INA -1_+LWA+1 TO LWA_^1_%SUB FWA_*CALCULATE NBR OF WORDS_30304_^1_%TRA Q_,Q=INDEX_B0304_^1_%INA -8_^1_€€%SAM BEGNCK_Q0308_^1_%ENQ 7_^1BEGNCK CLR A_,ZERO COUNTERS_;0308_^1GTBITS ADD (FWA),Q_^1_%SQZ DONBIT_^1_%INQ -1_^1_%JMP* GTBITS_^1DONBIT JMP* (CHKSUM)_^1_%SPC 3_^1BKSSP NOP 0_V0305_^1_%SAZ ERRMOT_^1_%LDA- BITMSK+12_N0305_^1_%JMP* WIGGLE_^1ERRMOT LDA- WRITFM_^1WIGGLE LDQ =XBKSPRN-REDY3_^1_%STQ- RTRECV,I_^1_%RTJ XCTMOT_Q0312_^1BKSPRN LDA- ZROBIT+5_%CLEAR MOTION FLAG_^1_%A€€ND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* (BKSSP)_^1_%SPC 3_^1SWMOD NOP 0_V0309_^1_%LDA PRITYC_Q0311_^1_%INA -2_+SWITCH_C0309_^1_%SAN BCDING_'MODE_E0309_^1_%ENA 4_V0309_^1BCDING STA PRITYC_Q0309_^1_%JMP* (SWMOD)_P0309_^1*_89 CARDS DELETED_^1_%SPC 3_^1TOTLSW NUM 0_V0311_^1_%SPC 3_^1ADVREV JMP* ADVRV_^1_%SPC 3_^1RRCVR LDA SAVLWA_Q0309_^1_%STA LWA_T0309_^1_%LDA- STOLSW_Q0€€310_^1_%STA* TOTLSW_Q0311_^1LOPAGN CLR A_,SET SWS_B0305_^1_%STA* PINTCT_^1_%ENA -0_^1RRCVR1 RTJ* BKSSP_(BKSP_E0305_^1_%RTJ* CALAD_R0330_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* ADVREV_^1_%LDA- 0_,THIS LOOP COMPLETE_^1PINTCT NUM 0_^1_%EOR- TERM_S0309_^1_%SAZ STEP2_R0305_^1_%RAO* PINTCT_^1_%JMP* RRCVR1_'CONTINUE_A0305_^1STEP2 STA* PINTCT_^1_%LDA- ESTAT2,I_^1_%ALS 1_^1_%SAM SWCHMD_€€^1_%JMP* NONEED_^1SWCHMD RTJ* SWMOD_^1_%RTJ* BKSSP_(BKSP_E0305_^1_%RTJ* CALAD_R0330_^1_%RTJ* STUSCK_^1_%JMP* MODERR_Q0305_^1_%RTJ* BKSSP_R0305_^1_%RTJ* CALAD_R0330_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* MODERR_'ADVISE OF MODE ERR_70305_^1_%RTJ* SWMOD_R0305_^1NONEED RTJ* BKSSP_^1_%ENA -0_^1_%RTJ* BKSSP_(BKSP_E0305_^1_%RTJ* CKPINT_^1_%RAO* PINTCT_'ADD ONE LOAD POINT_^1_%RTJ* BKSSP_(BK€€SP_E0305_^1_%RTJ* CKPINT_^1_%RTJ* CALAD_R0330_^1RELRD2 RTJ* CALAD_^1RELRD1 RTJ* CALAD_^1_%RTJ* STUSCK_^1_%JMP* ADVREV_^1_%LDA* TOTLSW_Q0330_^1_%SAP DONOW_(SKIP IF DONE_=0305_^1_%ALS 1_V0305_^1_%STA* TOTLSW_Q0330_^1_%JMP* LOPAGN_'GO LOOP AGAIN_<0305_^1DONOW LDA* ERRNO_^1_%ENQ 0_^1_%STQ- RTRECV,I_^1_%JMP* FAILED_Q0305_^1_%SPC 3_^1MODERR ENA MODCOD_'SET SWITCH MODE CODE._^1_%STA€€* ERRNO_^1_%JMP* ADVREV_^1_%SPC 3_^1STUSCK NOP 0_V0305_^1_%LDA- ESTAT2,I_O0330_^1_%ALS 7_V0309_^1_%SAP GODST_(SKIP ID GOOD_=0305_^1_%RAO* STUSCK_Q0330_^1GODST JMP* (STUSCK)_O0305_^1_%SPC 3_^1CKPINT NOP 0_^1_%LDA- ESTAT2,I_^1_%ALS 5_^1_%SAM PINT_^1_%JMP* (CKPINT)_^1PINT_!LDA* PINTCT_^1_%SAN NOT1_^1_%STA* TOTLSW_^1_%JMP* RELRD1_^1NOT1_!JMP* RELRD2_^1_%EJT_]_^1E17322 LDA LS€€TPT_^1_%STA- I_^1*_84 CARDS DELETED_^1_%CLR A_,HANGUP CODE IN A_^1_%SPC 5_^1FAILED STA- ETEMP2,I_$ENTRY FOR FAILURES_^1_%ENA 0_Q72*1658_^1_%STA MOTITR_'CLR A15 WRD4 IF SET_172*1658_^1_%EIN 0_^1_%LDA- EREQST,I_O0308_^1_%ADD- BITMSK+14_N0308_^1_%STA- EREQST,I_O0308_^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+5_$CHECK MOTION_870*1610_^1_%SAZ NOTRW_^1_%EOR- ESTAT1,I_$CLEAR THE MOTION BIT_^€€1_%STA- ESTAT1,I_^1_%AND- BITMSK+6_$CHECK REWIND BIT_^1_%SAZ NOTRW_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_$CLEAR REWIND BIT_665*1395_^1_%LDA RW_^1_%INA -1_^1_%STA RW_^1NOTRW LDQ- EWES,I_^1_%ENA 1_^1_%OUT 1_,CLEAR CONTROLLER AFTER FAILURE_^1_%NOP 0_^1_%RTJ MAKEQ_^1_%LDQ- ETEMP2,I_^1_%QLS 10_^1_%ADQ- ELU,I_(COMBINE LU NUMBER WITH ERROR CODE_^1_%QLS 6_,POSITION_^1_%RTJ LOG_*G€€O LOG ERROR_^1_%LDA- ELU,I_(CURRENT LOGICAL UNIT_^1_%EOR- DIAGLU,I_$CHECK IF DIAGNOSTIC LOGICAL UNIT_^1_%SAZ CMPLIT_'IT IS, COMPLETE REQUEST_^1XXX_"SCHDLE ALTDEV,0,,1_^1_%JMP NXTPT_(CONTINUE SEARCH FOR WAITING REQUEST_^1_%EJT_]_^1MOTION LDQ- EPTR,I_^1_%LDA- 4,Q_*GET USER-S CONTROL WORD_^1_%RTJ* XCTMOT_^1CMPLIT JMP COMPLT_^1_%SPC 3_^1XCTMOT NUM 0_,USED BY MOTION AND RECOVERY_^€€1_%STA- ETEMP2,I_$SAVE MOTION CONTROL IN A_^1_%LDA- ESTAT1,I_L68*1509_^1_%ADD- BITMSK+5_$SET MOTION REQ. BIT_368*1509_^1_%STA- ESTAT1,I_L68*1509_^1_%LDA- ETEMP2,I_^1_%SAM NODENS_'SKIP IF ITERATIVE REQUEST_^1*_81 CARD DELETED_^1_%AND- LOWBTS+3_"SAVE DENSITY (0-3) ONLY_^1_%STA* DENCOD_'SAVE DENSITY_^1_%LDA- ETEMP2,I_^1_%AND- HIHBTS+4_$REMOVE DENSITY_^1_%STA- ETEMP2,I_^1_%JMP* DOMOT_€€^1NODENS AND- LOWBTS+11 MASK OUT INTERATIONS_^1_%STA MOTITR_'SAVE ITERATIONS_^1_%LDA- ETEMP2,I_^1_%AND- HIHBTS+12_#MASK MOTION INDEX TO TERMINATE_^1_%STA- ETEMP2,I_^1DOMOT LDA- ETEMP2,I_O0308_^1_%ARS 12_U0308_^1_%AND- LOWBTS+14-12_K0308_^1_%STA* MOTCOD_'SAVE MOTION CODE_^1_%INA -4_+OFFSET TO GET COMPLEMENT OF DIRECTION_^1_%TCA A_^1_%AND- BITMSK+0_$SAVE BIT 0 (DIRECTION) ONLY_€€^1_%ALS 15_+DIRECTION TO BIT 15_^1_%INA 4_,SET BINARY MODE_^1_%RTJ UNTSEL_'SELECT UNIT_^1_%LDQ* MOTCOD_'PICK UP MOTION CODE_^1_%SQN TABDEX_Q0323_^1_%ENA 0_^1_%STA* MOTITR_'ZERO COUNT IF DO NOTHING_^1TABDEX JMP* SUBMOT,Q_$INDEX ON MOTION CODE_50323_^1_%SPC 2_^1DENCOD NUM 0_^1MOTCOD NUM 0_^1_%EJT_]_^1SUBMOT JMP* DONEM_(DONE OR DENSITY_)0_^1_%JMP* BKSP_)BACKSPACE RECORD_(1_^1_€€%JMP* WRFM_)WRITE FILE MARK_)2_^1_%JMP* REW_*REWIND_23_^1_%JMP* REWUN_(REWIND UNLOAD_+4_^1_%JMP* MOTSTR_'SEARCH FILE FORWARD_$5_^1_%JMP* FLBK_)SEARCH FILE BACKWARD_#6_^1_%JMP* ADVR_)ADVANCE RECORD_*7_,PECTAPE_^1_%SPC 5_^1MCODS NUM $189_)BACKSPACE RECORD_61732-2_^1_%NUM $289_)WRITE FILE MARK_71732-2_^1_%NUM $401_)REWIND_@1732-2_^1_%NUM $601_)UNLOAD_^1_%NUM $319_)ADVANCE FILE_€€:1732-2_^1_%NUM $389_)BACKSPACE FILE_81732-2_^1_%NUM $109_)ADVANCE RECORD_81732-2_^1_%SPC 5_^1MOTSTR LDA* MCODS-1,Q_#GET MOTION CODE, INDEXED BY Q_^1_%ENQ 0_^1_%RTJ OUT_*GO OUTPUT_^1_%ALS 12_+EOP REQUEST IN A15_^1_%SAP EOPNOT_Q0308_^1_%LDA- $B_+H01FF_A69*1588_^1_%STA- EDCLK,I_M69*1588_^1_%JMP- (DISP)_Q0308_^1EOPNOT ALS 10_+CHK 4 REW/UNLOAD_^1_%SAM DONEM_R0308_^1_%ENQ 0_,C€€LEAR CONTROLLER_^1_%ENA 1_.TO ALLOW OTHER UNITS_^1_%RTJ OUT_.ACCESS TO CONTROLLER_^1_%LDQ- I_,SCHEDULE REWIND CHECK_165*1395_^1_%SCHDLE REWCK,3,,1_^1_%JMP NXTPT_O65*1395_^1_%EJT_]_^1DONEM LDA* DENCOD_'PICK UP DENSITY_^1_%SAN 1_,SKIP IF DENSITY REQUEST_^1_%JMP* NODEN_^1_%LDQ- ESTAT2,I_$PICK UP STATUS_^1*_$QLS 5_,LOAD POINT TO BIT15_^1_%SQM DEN1_)AT LOAD POINT, OK FOR DENSITY€€ SELECT_^1_%JMP* DENERR_'ERROR, NOT AT LOAD POINT_^1DEN1_!LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK STATUS TO BIT 15_^1_%SAP CK800_(SKIP IF 9 TRACK,OK_^1_%LDA* DENCOD_^1_%INA -2_+TEST FOR 556 BPI_^1_%SAN DEN1A_(SKIP IF NOT 556 TO CHECK 800_^1_%ENA $10_*SELECT 556 BPI_^1_%JMP* DENSEL_^1DEN1A INA 1_,CHECK FOR 800 BPI_^1_%SAZ CK800_^1_%JMP* DENERR_'ERROR IF SETTING DENSITY ON 7 TRACK_^€€1CK800 LDA* DENCOD_^1_%INA -1_+CHECK FOR 800 BPI REQUEST_^1_%SAN CK1600_^1_%ENA 8_^1_%JMP* DENSEL_^1CK1600 INA -3_+CHECK FOR 1600 BPI REQUEST_^1_%SAZ 1_^1_%JMP* DENERR_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 8_^1_%SAP DENERR_'SKIP IF NOT PE CAPABLE TRANSPORT_^1_%ENA $20_^1DENSEL TRA Q_,SAVE DENSITY SELECT IN Q_^1_%ENA -$38_)MASK TO A_^1_%AND- UNTMOD,I_$MASK OFF OLD DEN€€SITY_^1_%AAQ A_,ADD IN NEW DENSITY_^1_%STA- UNTMOD,I_$SET BACK IN PHYSTB_^1NODEN LDA- ZROBIT+5_O0308_^1_%AND- ESTAT1,I_O0308_^1_%STA- ESTAT1,I_O0308_^1_%JMP* (XCTMOT)_$RETURN TO CALLER_^1_%SPC 5_^1DENERR ENA ERRDEN_'DENSITY ERROR CODE_^1_%JMP FAILED_^1_%EJT_]_^1WRFM_!RTJ* RINGCK_^1_%JMP* MOTSTR_^1_%SPC 3_^1REW_"RTJ* LPCHK_(CHECK FOR LOAD POINT, RETURN IF NOT L.P._^1_%LDA- EST€€AT1,I_O0308_^1_%AND- ZROBIT+6_^1_%ADD- BITMSK+6_O0308_^1_%STA- ESTAT1,I_O0308_^1_%RAO RW_^1_%JMP* MOTSTR_'START MOTION_^1_%SPC 3_^1BKSP_!RTJ* LPCHK_^1_%ENQ 1_,NOT LP SO BACKSPACE RECORD_^1_%JMP* MOTSTR_'START BACKSPACE RECORD_^1_%SPC 3_^1REWUN ENA 0_^1_%STA* MOTITR_'0 INTO ITERATIONS_^1_%STA- ETEMP2,I_$CONTROL TO 0 TO TERMINATE_^1_%STA* DENCOD_'CLEAR DENSITY CODE_^1_%LDA- EST€€AT2,I_^1_%AND- ZROBIT_'SET EQUIPMENT STATUS TO NOT READY_^1_%STA- ESTAT2,I_^1*_82 CARDS DELETED_^1_%JMP* MOTSTR_^1_%SPC 3_^1FLBK_!RTJ* LPCHK_(CHECK LOAD POINT_^1_%JMP* MOTSTR_'START FILE BACKWARD SEARCH_^1_%SPC 3_^1ADVR_!LDA =XDUMBUF_$FWA-1 OF DUMMY, ZERO LENGTH BUFFER_#PECTAPE_^1_%ENQ 2_^1_%RTJ OUT_*LOAD FWA-1_72*1609_^1_%SQZ LEAVE_(NO REMAINDER,LOGIC €€REC#PRU SIZE_$*72*1609*_^1_%INQ -NOISLN-1_#REMAINDER.GT.NOISE LIMIT_,*72*1609*_^1_%SQP LEAVE_(YES, EXIT_;*72*1609*_^1_%LDA* PRUSZ_(NO, LOAD PRU SIZE_3*72*1609*_^1_%INA -NOISLN-1_#DECR PRUSZ BY NOISE-1_/*72*1609*_^1_%STA* PRUSZ_M*72*1609*_^1_%JMP* TRYAGN_'TRY REMAINDERING AGAIN_.*72*1609*_^1LEAVE LDA* PRUSZ_M*72*1609*_^1_%STA* NUMBR_(SIZE OF SEGMENT RECORDS_-*72*1609*_^1_%JMP* (€€PRUCMP)_J*72*1609*_^1_%SPC 2_^1NUMBR NUM 0_^1PRUSZ NUM 0_Q*72*1609*_^1_%EJT_]_^1ASCBCD NUM 0_,ASC TO BCD PREP_^1_%RTJ* SETUP_^1ASCLOP LDQ- ECCOR,I_%GET USER ADDRESS_^1_%LDA- (ZERO),Q_$GET DATA_^1_%STA* (CURR)_^1_%RAO- ECCOR,I_%TALLY USER ADDRESS_^1_%RAO* CURR_)TALLY CURR_^1_%LDA* CURR_^1_%EOR* LWA_*CHECK FOR DONE_^1_%SAZ 1_,YES_^1_%JMP* ASCLOP_'NOT DONE_^1_%RTJ* AQGET_(PREP €€AQ FOR ASC TO BCD_^1_%RTJ A2BCD_(CONVERT_^1_%JMP* (ASCBCD)_$RETURN_^1_%SPC 5_^1AQGET NUM 0_^1_%LDQ* FWA_^1_%TRQ A_,INTO A_^1_%TCQ Q_,COMPLEMENT_^1_%ADQ* LWA_^1_%JMP* (AQGET)_^1_%EJT_]_^1UNPK_!NUM 0_,ENTRY FOR BINARY TO ASSEM/DISASSEM_^1_%RTJ* SETUP_^1_%CLR Q_,0 INTO Q_^1NXTCYC RTJ* GETFST_^1_%LLS 6_,6 BITS_^1_%QLS 2_,2 BITS =0_^1_%LLS 6_,6 BITS_^1_%RTJ* STRDAT_'GO STORE €€Q WHICH IS UNPACKED FOR 1732_^1_%LLS 4_,4 BITS_^1_%RTJ* GETFST_'GET ANOTHER 16 BINARY BITS_^1_%LLS 2_,2 BITS MORE FOR 6_^1_%QLS 2_,2 BITS =0_^1_%LLS 6_,6 BITS_^1_%RTJ* STRDAT_'STORE Q_^1_%LLS 6_,6 BITS_^1_%QLS 2_,2 BITS =0_^1_%LLS 2_,2 BITS_^1_%RTJ* GETFST_'GET MORE DATA_^1_%LLS 4_,4 BITS_^1_%RTJ* STRDAT_'STORE Q_^1_%LLS 6_,6 BITS_^1_%QLS 2_,2 BITS =0_^1_%LLS 6_,6 BITS_^€€1_%RTJ* STRDAT_'STORE Q_^1_%JMP* NXTCYC_'GO THRU ANOTHER CYCLE_^1_%SPC 5_^1GETFST NUM 0_^1_%STQ* QSAV_)SAVE Q_^1_%LDA- ELSTWD,I_^1_%SUB- ECCOR,I_%CHECK END OF BUFFER_^1_%SAN 2_^1_%ENA 0_^1_%JMP* (GETFST)_^1_%LDQ- ECCOR,I_%GET CURRENT LOCATION OF DATA_^1_%LDA- (ZERO),Q_$GET NEW DATA_^1_%LDQ- 0_^1QSAV_!NUM 0_^1_%RAO- ECCOR,I_%TALLY CURRENT ADDRESS_^1_%JMP* (GETFST)_^1_%EJT_]_^1S€€TRDAT NUM 0_^1_%STQ* (CURR)_'STORE UNPACKED DATA_^1_%TRA Q_,SAVE A_^1_%RAO* CURR_)TALLY INTERMEDIATE STORAGE LOCATION_^1_%LDA* CURR_^1_%EOR* LWA_^1_%SAN CURNOT_'CURR NOT EQUAL LWA_^1_%JMP* (UNPK)_'EXIT FROM UNPACK ROUTINE THIS SEGMENT DONE_^1CURNOT TRQ A_,RESTORE A_^1_%CLR Q_^1_%JMP* (STRDAT)_$EXIT STORE DATA SUBROUTINE_^1_%SPC 5_^1SETUP NUM 0_^1_%STA* CURR_^1_%STA* FWA_^1_€€%STQ* LWA_^1_%JMP* (SETUP)_^1_%SPC 2_^1CURR_!NUM 0_^1FWA_"NUM 0_^1LWA_"NUM 0_^1_%EJT_]_^1PACK_!NUM 0_,ENTRY FOR ASSEM/DISASSEM TO BINARY_^1_%RTJ* SETUP_^1NXTGET RTJ* GETFWA_'GO GET FROM FWA BUFFER_^1_%CLR Q_^1_%LLS 8_,6 BITS_^1_%ALS 2_,PASS 2 0 BITS_^1_%LLS 6_,6 BITS_^1_%RTJ* GETFWA_'GET 12 BITS_^1_%ALS 2_,PASS 2 0 BITS_^1_%LLS 4_,4 BITS_^1_%RTJ* STRFST_'GO STORE IN RE€€QUESTOR-S BUFFER_^1_%LLS 2_,2 BITS_^1_%ALS 2_,PASS 2 0 BITS_^1_%LLS 6_,6 BITS_^1_%RTJ* GETFWA_'GET 12 BITS_^1_%ALS 2_,PASS 2 0 BITS_^1_%LLS 6_,6 BITS_^1_%ALS 2_,PASS 2_^1_%LLS 2_,2 BITS_^1_%RTJ* STRFST_'GO STORE_^1_%LLS 4_,4 BITS_^1_%RTJ* GETFWA_'GET 12_^1_%ALS 2_,PASS 2_^1_%LLS 6_,6 BITS_^1_%ALS 2_,PASS 2_^1_%LLS 6_,6 BITS_^1_%RTJ* STRFST_'STORE_^1_%JMP* NXTGET_'NEXT€€ CYCLE_^1_%SPC 5_^1GETFWA NUM 0_,ENTRY TO GET NEXT DATA FROM FWA_^1_%LDA* CURR_^1_%EOR* LWA_^1_%SAN NOTCUR_Q0308_^1_%JMP* (PACK)_'EXIT FROM PACK_^1NOTCUR LDA* (CURR)_^1_%RAO* CURR_^1_%JMP* (GETFWA)_$RETURN_^1_%SPC 5_^1STRFST NUM 0_,STORE DATA IN Q INTO USER-S BUFFER_^1_%STA* QSAV1_^1_%TRQ A_,DATA INTO A_^1_%LDQ- ECCOR,I_%GET CORE LOCATION OF USER-S BUFFER_^1_%STA- (ZERO),Q_$S€€TORE DATA_^1_%LDA- 0_,2 WORD INSTRUCTION_^1QSAV1 NUM 0_^1_%CLR Q_^1_%RAO- ECCOR,I_%TALLY STORAGE LOCATION_^1_%JMP* (STRFST)_^1_%EJT_]_^1BCDASC NUM 0_^1_%RTJ* SETUP_^1_%RTJ* AQGET_^1_%RTJ BCD2A_(CONVERT_^1BCDLOP LDQ- ECCOR,I_%GET USER-S LOCATION_^1_%LDA* (CURR)_'GET DATA_^1_%STA- (ZERO),Q_$STORE IN USER_^1_%RAO- ECCOR,I_%TALLY USER_^1_%RAO* CURR_^1_%LDA* CURR_^1_%EOR* LWA_*CHEC€lK FOR BUFFER COMPLETE_^1_%SAZ BCDAEX_^1_%JMP* BCDLOP_'MORE TO TRANSFER_^1BCDAEX JMP* (BCDASC)_^1_%END_]_^__lPD42312 CSY/ B37 P€1_%NAM D42312_'DECK-ID B37 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1742-30 AND 1742-120 LINE PRINTER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*P42312 ADC $520A_(00 SCHEDULER CALL_^1*_%ADC I42312_'01 INITIATOR ADDRESS_^1*_%ADC C42312_'02 CONTINUATOR ADDRESS_^1*_%ADC E42312_€€'03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $0201_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $2804+T4230_!08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L42312_'13 DRIVER€€ LENGTH IF MASS MEMORY_^1*_%ADC S42312_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 BLANK DETECTION INDICATOR_^1*_%NUM 0_,16 LINE COUNT_^1*_%NUM 0_,17 TEMPORARY STORAGE FOR CONTROL FUNC._^1*_%NUM 0_,18 CHARACTER COUNT_^1*_%ADC FPLU_)19 DIAGNOSTIC/FTN LOGICAL UNITS_^1*_%NUM 0_,20 NUMBER OF BLANKS TO BE SENT_^1*_%NUM 60_+21 MAXIMUM NUMBER OF LINES PER PAGE_^€€1*_%NUM 136_*22 NUMBER OF CHARACTERS PER LINE_^1*_%ADC U42312_'23 DIAGNOSTIC LU_^1_%SPC 2_^1*_$NOTE - - IF THE 1742-120 LINE PRINTER IS USED, THE TABLE_^1*_$T5954 IS REQUIRED TO LOAD THE PRINTER TRAIN IMAGINE._%--_^1_%SPC 3_^1*_$D R I V E R_!D E S C R I P T I O N_^1_%SPC 3_^1*_$THIS DRIVER HAS 3 MODES OPERATION:FORTRAN,NORMAL AND_^1*_$DIAGNOSTIC._^1*_]_^1*_$THE FORTRAN MODE€€ IS USED WHEN THE CURRENT LOGICAL UNIT_^1*_$NUMBER IS EQUAL TO THE LOWER 8 BITS OF WORD 19 OF THE_^1*_$PHYSTAB.IN THIS MODE THE FIRST CHARACTER OF EACH LINE_^1*_$IS USED FOR PRINT CONTROL AND IS NOT PRINTED._^1*_]_^1*_$FIRST CHARACTER IS USED AS FOLLOWS:_^1*_]_^1*_10_$UP SPACE 2 LINES_^1*_11_$TOP OF FORM_^1*_1+_$SUPPRESS SPACE (PRINT ON SAME LINE)_^1*_$ALL OTHERS_(UP SPACE 1 LINE€€_^1*_]_^1*_$PRINT CONTROL APPLIES ONLY TO FORMATTED (FWRITE) REQUESTS._^1*_$ALSO NO LINE COUNTING IS DONE,THIS IS LEFT UP TO THE_^1*_$FORTRAN PROGRAM.IF AN UNFORMATTED (WRITE) REQUEST IS MADE_^1*_$TO THE FORTRAN LOGICAL UNIT,IT IS HANLED IN THE SAME WAY_^1*_$AS AN UNFORMATTED REQUEST TO THE NORMAL LOGICAL UNIT._^1*_$HARDWARE ERROR REPORTING IS AS DESCRIBED FOR THE NORMAL_^1*_$MODE.€€_^1*_]_^1*_$THE DIAGNOSTIC MODE IS USED WHEN THE CURRENT LOGICAL UNIT_^1*_$NUMBER IS EQUAL TO WORD 23 OF THE_^1*_$PHYSTAB.IN THIS MODE, THE DRIVER DOES NOT GO TO THE ALTERNATE_^1*_$DEVICE HANDLER,IN CASE OF AN ERROR,RATHER THE REQUEST IS_^1*_$COMPLETED IN THE NORMAL MANNER WITH Q ERROR BITS SET.THIS_^1*_$MODE WILL BE USED BY SCMM. SCMM WILL ALSO RETRIEVE THE_^1*_$ERROR CODE STOR€€ED IN WORD 17 OF THE PHYSTAB FOR ANALYSIS_^1*_$TO DETERMINE REJECTS AND TIMEOUT ERRORS._^1*_]_^1*_$THE NORMAL MODE IS USED FOR ALL OTHER LOGICAL UNIT NUMBERS._^1*_$IN THIS MODE,THE DRIVER GOES TO THE ALTERNATE DEVICE HANDLER_^1*_$IN CASE OF AN ERROR,WITH THE ERROR CODES AS LISTED BELOW._^1*_]_^1*_$DRIVER ERROR CODES:_^1*_]_^1*_10_$FAILURE TO INTERRUPT(REQUIRES TIMER)_^1*_12_$ALARM €€CONDITION_^1*_13_$PARITY ERROR_^1*_15_$INTERNAL REJECT_^1*_16_$EXTERNAL REJECT_^1*_]_^1*_$IN ALL MODES OF OPERATIN NO LINE COUNTING WILL BE DONE IF_^1*_$BIT 15 OF WORD 21 OF THE PHYSTAB (MAXIMUM LINES PER PAGE)_^1*_$WILL BE SET._^1*_]_^1*_$REQUESTS DESCRIPTION_^1*_]_^1*_$FORMATTED REQUESTS- EACH REQUEST IS PRECEEDED BY AN UPSPACE_^1*_$AND FOLLOWED BY A PRINT COMMAND._^1*_]_^1*_$UNF€€ORMATTED REQUESTS- THERE IS NO PRECEEDING UPSPACE_^1*_$THE BUFFER IS PRINTED ONLY WHEN A CONTROL CHARACTER WHICH_^1*_$CAUSE A PRINT OR A CONTROL CHARACTER WHICH CAUSE PAPER_^1*_$MOTION IS ENCOUNTERED_^1*_]_^1*_'CHARACTER EDITING:_^1*_]_^1*_$$20-$5F_+SEND TO BUFFER_^1*_]_^1*_$$60-$7F_#(LOWERCASE).CHANGE TO $20-$5F (MADE BY HARDWARE)_^1*_]_^1*_$$03_(END OF TEXT.PRINT BUFFER,UPSPACE€€ 1 LINE,_^1*_=TERMINATE REQUEST_^1*_$$04_(END OF XMSION.SAME AS $03_^1*_]_^1*_$$09_/HORZ. TAB._!SEND BLANKS TO BUFFER_^1*_]_^1*_$$0A_(LINE FEED.IGNORE_^1*_]_^1*_$$0B_(VERT. TAB_#PRINT BUFFER,FORMAT LEVEL 2,_^1*_?SPACE TO THE NEXT PRINTING POSITION_^1*_?AND CONTINUE_^1*_]_^1*_$$0C_/FORM FEED_^1*_]_^1*_$$0D_(CARRIAGE RETURN.PRINT BUFFER,UPSPACE 1 LINE,_^1*_ACONTINUE._^1*_]_^1*_$$1B_€€(ESCAPE._%USED FOR DIRECT FUNCTION CONTROL_^1*_?OF LINE PRINTER.THE NEXT CHARACTER_^1*_?IS INTERPRETED AS FOLLOWS:_^1*_]_^1*_1$00-$2F IGNORED_^1*_1$30-_#PRINT BUFFER.NO UPSPACE.NEXT LINE STARTS_^1*_9FROM THE BEGINNING_^1*_1$31-_"PRINT BUFFER.SINGLE SPACE NEXT LINE STARTS_^1*_9FROM THE BEGINNING_^1*_1$32-_"PRINT.DOUBLE SPACE.NEXT LINE STARTS FROM_^1*_9THE BEGINNING._^1*_1$33-$3E P€€RINT BUFFER.SELECT FORMAT TAPE LEVEL_^1*_9(01-12).CONTINUE PRINTING FROM THE_^1*_9NEXT PRINTING POSITION_^1*_1$3F-_"IGNORED.NO POSSIBILITY TO SELECT 8 LINES_^1*_9PER INCH_^1*_1$40_#CLEAR CONTROLLER.CONTINUE_^1*_1$41-$7F IGNORED_^1*_]_^1_%EJT_]_^1_%EXT MAS300_^1_%ENT I42312,C42312,E42312_;**MSOS 4.1**_^1_%EXT ALTDEV_^1_%EXT MAKEQ_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^€€1_%EXT* TRAIN_(TRAIN IMAGE_6**MSOS 4.1**_^1_%SPC 3_^1*_$E Q U I V A L E N C E S_^1_%SPC 3_^1_%EQU TIME(4)_%WD 4 (DIAG CLOCK)_^1_%EQU LU(5)_(WD 5 (LOGICAL UNIT)_^1_%EQU REQADR(6)_#WD 6 (REQUEST ADDRESS)_^1_%EQU CALL(7)_%WD 7 (EQUIPMENT STATUS)_^1_%EQU ERRTAB(8)_#WD 8 (STATUS REQUEST)_^1_%EQU SWITCH(9)_#WD 9 (CHECK VARIOUS ASPECTS)_^1_%EQU CORE(10)_$WD 10 (NEXT LOCATIO€€N)_^1_%EQU LASTP1(11)_"WD 11 (LAST LOCATION +1)_^1_%EQU STATUS(12)_"WD 12 (STATUS)_^1_%EQU BLNKDT(15)_"WD 15 (BLANK DETECT.WHEN 0 NO PRINTABLE CHAR)_^1_%EQU COUNT(16)_#WD 16 (LINE COUNT)_^1_%EQU SAVE(17)_$WD 17 (SAVE AND USE AS CONTROL CHAR)_^1_%EQU NUMCHR(18)_"WD 18 (CHARACTER COUNT)_^1_%EQU FTNSW(19)_#WD 19 (FORTRAN LU)_/**MSOS 4.1**_^1_%EQU BLANKS(20)_"WD 20 (NUMBER OF B€€LANKS TO SEND TO BUFFER)_^1_%EQU MAXLIN(21)_"WD 21 (MAX NUMBER OF LINES PER PAGE)_^1_%EQU LINLEN(22)_"WD 22 (NUMBER OF CHARACTERS PER LINE)_^1_%EQU DIAGLU(23)_"WD 23 (DIAGNOSTIC LU)_,**MSOS 4.1**_^1_%SPC 3_^1*_'E R R O R C O D E S_^1_%SPC 3_^1_%EQU TIMERR(0)_#TIME OUT ERROR_^1_%EQU ALARM(2)_$ALARM_^1_%EQU INTREJ(5)_#INTERNAL REJECT_^1_%EQU EXTREJ(6)_#EXTERNAL REJECT_^1_%S€€PC 3_^1_%EQU ACOMPC($B6)_!ADR OF FNR SUBROUTINE BY ROUTINE_^1_%EQU AFNR($B5)_#LOCATION OF FNR_^1_%EQU ADISP($EA)_"LOCATION OF DISPATCHER_^1_%SPC 3_^1*_'M A S K S_^1_%SPC 3_^1_%EQU INTVAL(30)_"TIME OUT VALUE_^1_%EQU FIRST($20)_"CHECK IF FIRST ENTRY TO CONTINUATOR_^1_%EQU FORMTD($2)_"CHECK IF FORMATTED_^1_%EQU FINISH($4)_"CHECK IF FINISH WITH THE REQUEST_^1_%EQU ZERO($22)_€€#LOC $22 IN SYSDAT=0_^1_%EQU BIT1($24)_^1_%EQU BIT4($27)_^1_%EQU BIT8($2B)_^1_%EQU BIT14($20)_^1_%EQU BIT15($21)_^1_%EQU H001F(7)_$$001F_^1_%EQU H007F(9)_^1_%EQU H00FF($A)_^1_%EQU HFFF0($16)_"$FFF0_^1_%EQU UPPER($10)_"TAKE UPPER CHAR OF WORD IF EQ 1 WHEN_^1*_8ENTERING TO NXTCHR_^1_%EQU TBSTOP(20)_"NUMBER OF BLANKS FOR EACH TAB_^1_%SPC 3_^1*_$ENTRY FROM MASDRV/DBLDRV_^1_€€%SPC 3_^1START STQ- I_^1_%LDQ =XE42312-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC42312-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ 2,I_^1_%LDQ =XI42312-START_A**MSOS 4.1**_^1_%AAQ A_^1_%STA- 1,I_^1_%JMP* I42312+1_G**MSOS 4.1**_^1MS300 ADC MAS300_^1_%EJT_]_^1***_$P R O C E S S M O T I O N R E Q U E S T S_^1_%SPC 3_^1NXTMCR EOR- BIT15_(CLEAR BIT 15 FROM_^1_%STA- S€€WITCH,I_$PREVIOUS PEJT PARA_^1_%SPC 3_^1MOTREQ LDA- SAVE,I_'GET PARAMETER STRING_^1_%CLR Q_^1_%LLS 4_,GET ONE PARAMETER_^1_%SQZ M1_+SKIP IF ZERO PARAMETER_^1_%STA- SAVE,I_'SAVE REMAINDER OF STRING_^1_%INQ -2_+WEOF=2_^1_%SQZ PE1_^1_%INQ -2_^1_%SQZ RWUNLD_'SKIP IF PARA.=4_^1_%JMP* MOTREQ_'CHECK NEXT PARAMETER_^1RWUNLD STQ- COUNT,I_%SET LINE COUNT TO ZERO_^1M1_#JMP* DONE_^1_%S€€PC 2_^1PE1_"STQ- COUNT,I_%SET LINE COUNT TO ZERO_^1_%LDA- SWITCH,I_^1_%EOR- BIT15_(SET BIT 15 TO INDICATE_^1_%STA- SWITCH,I_$PAGE EJECT REQUEST_^1_%ENA $40_*PAGE EJECT CONTROL CHARACTER9_^1_%RTJ SEND_)SEND THIS CONTROL CHAR TO BUFFER_^1_%JMP LAB2_)GO ISSUE A PRINT_^1_%EJT_]_^1***_$D R I V E R I N I T I A T O R E N T R Y_^1_%SPC 3_^1I42312 STQ- I_N**MSOS 4.1**_^1_%RTJ- (AFNR)€€_'ANY REQUEST_^1_%JMP* (MS300)_^1_%LDQ- CALL,I_^1_%ENA 1_,CLEAR CONTROLLER_^1_%OUT REJECT-*_^1_%RTJ* STAT_)GET CURRENT STATUS_^1_%AND- BIT8_)CHECK FOR LOAD IMAGE REQUEST_^1_%SAZ IMAGOK_'SKIP IF NO REQUEST_^1_%RTJ* LODIMG_'GO LOAD TRAIN IMAGE_.**MSOS 4.1**_^1IMAGOK ENA 0_,INITIALIZE PHYSTB_^1_%STA- SAVE,I_^1_%STA- BLNKDT,I_^1_%STA- BLANKS,I_^1_%LDQ- REQADR,I_^1_%LDA- (ZERO),Q_$€€GET REQUEST CODE_^1_%ARS 9_^1_%AND- H001F_^1_%INA -14_^1_%SAN NOTMRQ_'SKIP IF NOT MOTION REQUEST_^1_%STA- CORE,I_'ZERO CORE AND LASTP1 FOR_^1_%STA- LASTP1,I_$LATER USE BY MAKEQ_^1_%LDA- 4,Q_*GET PARAMETERS_^1_%SAP P3_+SKIP IF NOT ITER. TYPE PARAM_^1_%AND =N$7000_%GET ONLY PARAM._^1P3_#AND- HFFF0_(GET ALL PARAMS._^1_%STA- SAVE,I_'SAVE PARAMETERS_^1_%JMP* MOTREQ_^1_%SPC 3_^1NO€€TMRQ JMP* AFALAR_'JUMP TO CONTINUATOR_^1_%SPC 3_^1LODIMG NUM 0_^1_%RTJ* STATCK_^1_%CLR Q_N**MSOS 4.1**_^1LOOP_!LDA TRAIN,Q_%PICK UP CHARACTER PAIR_+**MSOS 4.1**_^1_%ALS 8_,EXCHANGE UPPER AND LOWER CHARACTERS_^1_%RTJ* SENDIT_^1_%ALS 8_,EXCHANGE UPPER AND LOWER CHARACTERS_^1_%RTJ* SENDIT_^1_%INQ 1_^1_%LDA =N-144_'CHECK IF_9**MSOS 4.1**_^1_%AAQ A_,ALL CHARACTERS_3**MSOS 4.1€€**_^1_%SAZ EXITLI_'OUT FOR IMAGE_4**MSOS 4.1**_^1_%JMP* LOOP_)GO BACK FOR NEXT CHARACTER PAIR_^1EXITLI JMP* (LODIMG)_$RETURN TO SENDER_1**MSOS 4.1**_^1SENDIT NUM 0_^1_%RTJ SEND_^1_%STA* SAV_L**MSOS 4.1**_^1_%RTJ* STATCK_^1_%LDA* SAV_L**MSOS 4.1**_^1_%JMP* (SENDIT)_^1SAV_"NUM 0_N**MSOS 4.1**_^1STATCK NUM 0_^1_%RTJ* STAT_K**MSOS 4.1**_^1_%ALS 10_^1_%SAM EREXIT_^1_%ALS 2_^1_%S€€AM 1_^1_%JMP* STATCK+1_^1_%JMP* (STATCK)_^1EREXIT ALS 15_^1_%SAM PARITY_^1_%ENA 2_^1_%JMP* ERROR_J**MSOS 4.1**_^1PARITY ENA 3_^1_%JMP* ERROR_J**MSOS 4.1**_^1DONE_!RTJ* STAT_^1_%LDQ- CALL,I_^1_%ENA 1_,CLEAR CONTROLLER_^1_%OUT REJECT-*_^1_%RTJ MAKEQ_^1DONE1 RTJ- (ACOMPC)_^1_%JMP* I42312+1_$GO FIND ANOTHER REQUEST_***MSOS 4.1**_^1_%SPC 3_^1*_'THIS ROUTINE STORES HARDWARE S€€TATUS IN PHYSTAB_^1*_'AND EXITS WITH A EQUAL TO THE STATUS_^1_%SPC 3_^1STAT_!NOP 0_^1_%STQ* SAVEQ_^1_%LDQ- CALL,I_^1_%INP REJECT-*_^1_%STA- STATUS,I_^1_%LDQ* SAVEQ_^1_%JMP* (STAT)_^1SAVEQ NUM 0_^1_%SPC 3_^1REJECT JMP* ER5_*INTERNAL REJECT_^1_%ENA EXTREJ_'EXTERNAL REJECT_^1_%JMP* ERROR_^1ER5_"ENA INTREJ_^1ERROR LDQ- LU,I_)PICK UP LU NUMBER_^1_%QLS 6_,SHIFT LU NUMBER_^1_%E€€AQ A_,COMBINE LU NUM WITH ERROR_^1_%STA- SAVE,I_'ERROR CODE_^1_%LDA- BIT14_(SET ERROR INDICATOR_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_^1_%LDQ- CALL,I_^1_%INP 1_,GET STATUS_^1_%NOP 0_^1_%STA- STATUS,I_^1_%ENA 1_,CLEAR PRINTER_^1_%OUT 1_^1_%NOP 0_^1_%RTJ MAKEQ_^1_%ENA -1_+SET DIAGNOSTIC CLOCK NEGATIVE_^1_%STA- TIME,I_^1_%LDQ- SAVE,I_'TAKE ERROR CODE_^1_%LDA- DIAGLU,I_$CHECK IF €€DIAGNOSTIC LU_+**MSOS 4.1**_^1_%SUB- LU,I_^1_%SAZ NOALT_(DO NOT GO TO ALTDEV_^1_%RTJ+ LOG_*LOG ERROR_8**MSOS 4.1**_^1_%JMP ALTDEV_^1NOALT JMP* DONE1_^1_%SPC 3_^1E42312 STQ- I_,TIME OUT ERROR_3**MSOS 4.1**_^1_%ENA TIMERR_'TIME OUT ERROR_^1_%JMP* ERROR_^1_%EJT_]_^1***_$D R I V E R C O N T I N U A T O R E N T R Y_^1_%SPC 3_^1C42312 STQ- I_N**MSOS 4.1**_^1_%LDA- TIME,I_^1_%SAM €€ GHOST_(GHOST INTERRUPT IF TIME IS NEGATIVE_^1_%LDA- LU,I_^1_%SAN NGHOST_'GHOST INTERRUPT IF LOGICAL UNIT ZERO_^1GHOST LDQ- CALL,I_^1_%ENA 1_,CLEAR INTERRUPTS_^1_%OUT 1_^1_%NOP 0_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER_^1NGHOST ENA -1_^1_%STA- TIME,I_'SET DIAG. CLOCK NEGATIVE_^1_%RTJ* STAT_^1_%LDQ- CALL,I_^1_%ENA 2_,CLEAR INTERRUPTS_^1_%OUT REJECT-*_^1_%ENA $20_*CHECK FOR ALA€€RM_^1_%AND- STATUS,I_^1_%SAZ AFALAR_'SKIP IF NOT ALARM_^1_%ENA ALARM_(SET ALARM CODE_^1_%JMP* ERROR_^1_%SPC 3_^1AFALAR LDA- SWITCH,I_^1_%SAP AFA_*SKIP IF NOT MOTION REQUEST_^1_%JMP NXTMCR_'CHECK NEXT MOTION REQ. PARA._$**MSOS 4.1**_^1AFA_"CLR A_^1_%STA- NUMCHR,I_^1_%ENA FIRST_(IS IT FIRST ENTRY TO CONTINUATOR_^1_%AND- SWITCH,I_^1_%SAZ SET1ST_'YES,SET THE FIRST SWITCH_^1_%JM€€P* NOT1ST_'NO,_^1SET1ST ENA FIRST_^1_%EOR- SWITCH,I_$SET FIRST SWITCH TO 1_^1_%STA- SWITCH,I_^1_%AND- BIT1_)CHECK IF FORMATTED REQUEST_^1_%SAN FORMAT_'FORMATTED_^1LAB_"STA- SAVE,I_'NO.STORE SUPPRESS SPACE CODE IN SAVE (A=0)_^1_%JMP* INIT_^1FORMAT LDA- FTNSW,I_^1_%AND- H00FF_(GET FORTRAN LOGICAL UNIT NUMBER_^1_%SUB- LU,I_)CHECK IF FORTRAN LU_^1_%SAZ FTN_*YES,_^1SINGLE ENA 1_,N€€O,STORE SINGLE SPACE CODE IN SAVE(A=1)_^1_%JMP* LAB_^1FTN_"RTJ* NXTCHR_'GET FIRST CHARACTER_^1_%INA -$C_*IS IT A STD. PAGE EJECT ($0C)_^1_%SAN TAGX_)NO_^1_%ENA $31_*YES_^1_%JMP* TAGZ_^1TAGX_!INA -1_+IS IT A CARRIAGE RETURN ($0D)_^1_%SAN TAGY_)NO_^1_%ENA $30_*YES_^1_%JMP* TAGZ_^1TAGY_!INA $D_+RESTORE ORIGINAL VALUE_^1TAGZ_!INA -$2B_)CHECK FOR A PLUS_^1_%SAN NOTPLS_^1_%JMP* €€LAB_*SUPRESS SPACE_^1NOTPLS INA -5_+CHECK FOR 0_^1_%SAN NOTZRO_^1_%ENA 2_^1_%JMP* LAB_*DOUBLE SPACE_^1NOTZRO INA -1_+CHECK FOR 1_^1_%SAZ ONE_^1_%JMP* SINGLE_^1ONE_"ENA $40_*TOP OF FORM._^1_%JMP* LAB_^1REJEC1 JMP* REJECT_^1_%JMP* REJECT+1_^1_%SPC 3_^1NOT1ST ENA FINISH_'CHECK IF FINISH SWITCH SET_^1_%AND- SWITCH,I_^1_%SAZ INIT_)NO_^1_%JMP* DONE_)YES_^1_%SPC 3_^1INIT_!LDA-€€ MAXLIN,I_$UPDATE LINE COUNTER_^1_%SAM GO1_*DO NOTHING_^1*_84 CARDS DELETED_^1_%LDA- SAVE,I_^1BACK_!INA -$40_)CHECK FOR PAGE EJECT._^1_%SAN CONT_)NOT PAGE EJECT FUNCTION_^1_%STA- COUNT,I_%CLEAR LINE COUNTER_^1GO1_"JMP* GO_^1CONT_!INA $3F_*CHECK IF SINGLE PACE._^1_%SAZ SEC_^1_%INA -1_+CHECK IF DOUBLE SPACE_^1_%SAN GO_^1_%RAO- COUNT,I_%INCREASE LINE COUNTER TWICE_^1SEC_"RA€€O- COUNT,I_^1_%LDA- COUNT,I_%CHECK IF BOTTOM OF FORM REACHED_^1_%SUB- MAXLIN,I_^1_%SAM GO_^1_%ENA 0_^1_%STA- COUNT,I_%CLEAR LINE COUNTER_^1_%LDA- LU,I_^1_%SUB- FTNSW,I_%CHECK FORTRAN PRINTER_^1_%SAZ GO_+IS FTN, NO TOP OF FORM NOW_^1_%ENA $40_*TOP OF FORM._^1_%STA- SAVE,I_^1_%JMP* BACK_^1_%SPC 3_^1TOREJ JMP* REJEC1_^1_%JMP* REJEC1+1_^1GO_#LDA- SAVE,I_^1_%RTJ* SEND_^1_%ENA 1_€€^1_%STA- SAVE,I_'RESET SAVE WITH LINE FEED CODE_^1LAB7_!LDA- BLANKS,I_$CHECK IF ANY BLANKS TO BE SENT TO BUFFER_^1_%SAZ LAB1_)NO_^1_%ENA $20_*$20 IS THE CODE OF BLANK_^1_%RTJ FILL_^1_%RAO- BLANKS,I_^1_%JMP* LAB7_^1_%SPC 3_^1LAB1_!RTJ* NXTCHR_^1_%INA -$20_)IS IT A SPECIAL CHARACTER_^1_%SAM EDIT_)YES,GO DO SOME EDITING BEFORE SENDING TO BUF_^1_%INQ -$7F_)IF EQUALS_!$7F IGNORE€€_^1_%SQZ EDIT-1_^1_%INA $20_*NO,SEND THE CHAR.IF IT IS UPPER CASE_^1_%RTJ* FILL_)THE HARDWARE WILL TAKE CARE OF IT._^1_%JMP* LAB1_^1EDIT_!INA 5_,IS IT $1B (ESCAPE)_^1_%SAN TRYCR_(NO, TRY CARRAIAGE RETURN_^1_%JMP* ESCAPE_^1TRYCR INA 14_+IS IT $D (CARRIAGE RETURN)_^1_%SAN TRYFF_(NO,TRY FORM FEED_^1_%JMP* LAB9_^1TRYFF INA 1_,IS IT $C (FORM FEED)_^1_%SAN TRYVT_(NO,TRY VERT€€ICAL TAB_^1_%ENA $40_*TOP OF FORM._^1BACK1 STA- SAVE,I_^1_%LDA- NUMCHR,I_^1_%TCA A_,SAVE IN BLANKS THE COMPLEMENT. OF NUMBER_^1_%INA 0_,TAKE CARE WHEN IT IS $FFFF_^1_%STA- BLANKS,I_$OF BLANKS THAT SHOULD BE SENT TO BUFFER_^1_%JMP* LAB2_^1TRYVT INA 1_,IS IT A VERTICAL TAB_^1_%SAN TRYTB_(TRY TAB_^1_%ENA $41_*CODE FOR FORMAT LEVEL 2_^1_%JMP* BACK1_^1TRYTB INA 2_,IS IT A T€€AB_^1_%SAN TRY04_(NO, TRY EOT (04)_^1_%CLR Q_^1_%LDA- NUMCHR,I_^1_%DVI =XTBSTOP_%FIND HOW MANY BLANKS_^1_%INQ -TBSTOP+1_^1_%SQN OUTOK_(IF MODULO FUNCTION AT A TAB STOP_^1_%ENQ -TBSTOP_%ALREADY,INCREMENT TO THE NEXT TAB STOP_^1OUTOK STQ- BLANKS,I_^1_%JMP* LAB7_^1TRY04 INA 5_^1_%SAN TRY03_^1SETEND LDA- LASTP1,I_$SET POINTERS_^1_%STA- CORE,I_^1LAB9_!ENA 1_,SINGLE SPACE_^1€€_%STA- SAVE,I_^1_%JMP* LAB2_^1TRY03 INA 1_^1_%SAN IGNORE_^1_%JMP* SETEND_^1IGNORE JMP* LAB1_^1***_$THIS ROUTINE IS ENTERED WITH A EQUALS TO THE CHARACTER_^1***_$TO BE OUTPUT TO THE BUFFER_^1_%SPC 3_^1SEND_!NOP 0_^1_%STQ* QSAVE_(SAVE USERS Q-REG_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT TOREJ-*_^1_%LDQ* QSAVE_(RESTORE USERS Q-REG_^1_%JMP* (SEND)_^1QSAVE NUM 0_^1_%SPC 3_^1_%SPC 3€€_^1***_$THIS ROUTINE BRINGS NEXT CHAR.IF END OF BUFFER A JUMP_^1***_$IS MADE TO FIN_".OTHERWISE IT EXIT WITH THE CHARACTER_^1***_$IN 7 LOWER BITS OF A._^1_%SPC 3_^1NXTCHR NOP 0_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$CHECK IF END OF BUFFER_^1_%SAM OK_+NO,BRING NEXT CHAR_^1_%JMP* FIN_*USER BUFFER COMPLETE_^1OK_#ENA UPPER_(BIT 4_^1_%EOR- SWITCH,I_$INVERT THE UPPER/LOWER SWITCH_^1_%ST€€A- SWITCH,I_^1_%AND- BIT4_)CHECK IF UPPER_^1_%LDQ- CORE,I_^1_%LDQ- (ZERO),Q_$BRING WORD FROM USERS BUFFER_^1_%SAZ UP_+YES,UPPER_^1_%CLR A_^1_%LLS 8_,UPPER 8 BITS OF Q TO LOWER 8 BITS OF A_^1LOW_"AND- H007F_^1_%TRA Q_^1_%JMP* (NXTCHR)_$EXIT_^1UP_#TRQ A_,TRANSFER WORD TO A_^1_%RAO- CORE,I_'ADVANCE POINTER_^1_%JMP* LOW_^1REJCTX JMP* TOREJ_^1_%JMP* TOREJ+1_^1_%SPC 3_^1ESCAPE RT€€J* NXTCHR_^1_%INA -$30_)IS IT A $30_^1_%SAP 1_,GREATER THAN $2F_^1_%JMP* LAB1_)IGNORE_^1_%SAN 1_,NO_^1_%JMP* LAB9+1_'YES,GO PRINT (SUPPRESS SPACE)_^1_%INA -1_+IS IT A $31 (SINGLE)_^1_%SAN 1_,NO_^1_%JMP* LAB9_)YES_^1_%INA -1_+IS IT A $32 (DOUBLE)_^1_%SAN 2_,NO_^1_%ENA 2_,YES_^1_%JMP* LAB9+1_^1_%INA -14_*IS IT A $40 (CLEAR PRINTER)_^1_%SAN LSTTRY_^1_%STA- SAVE,I_^1_€€%STA- BLNKDT,I_^1_%JMP* CLRCON_^1LSTTRY INA 1_^1_%SAM 1_^1_%JMP* LAB1_)IGNORE THE CHARACTER_^1_%LDQ- NUMCHR,I_$PREPARE NUMBER OF BLANKS_^1_%TCQ Q_^1_%INQ 0_^1_%STQ- BLANKS,I_^1_%INA $4C_*CHANGE TO FORMAT TAPE COMMAND_^1_%JMP* LAB9+1_^1_%SPC 3_^1FIN_"ENA FORMTD_'IS IT FORMATTED_^1_%AND- SWITCH,I_^1_%SAN SETFIN_'YES_^1_%JMP DONE_)NO,DO NOT PRINT_^1SETFIN ENA FINISH_^1_%EOR-€€ SWITCH,I_$SET FINISH SWITCH_^1_%STA- SWITCH,I_^1LAB2_!ENA $3A_*CLEAR INT,SELECT EOP,ALARM,PRINT_^1_%LDQ- BLNKDT,I_$IS IT A BLANK LINE_^1_%SQN PRINT_(NO,_^1CLRCON ENA $19_*YES,CLEAR PRINTER,SELECT EOP,ALARM_^1PRINT LDQ- CALL,I_^1_%OUT REJCTX-*_^1_%RTJ STAT_)GET STATUS_^1_%AND- BIT1_)IS PRINTER BUSY_^1_%SAZ NOTBSY_'NO,IT IS NOT BUSY_^1SETCLK ENA INTVAL_'SET DIAGNOSTIC CLOCK_€€^1_%STA- TIME,I_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER.WAIT FOR EOP INT_^1NOTBSY LDQ- BLNKDT,I_$IS IT A BLANK LINE_^1_%SQZ CONT1_(YES_^1_%JMP* SETCLK_'NO, HANDLE THIS LINE NORMALLY_^1CONT1 JMP NGHOST_'GO TO CONTINUATOR_^1*_8THE DRIVER THINK THAT IT GOT EOP INT._^1_%SPC 3_^1***_!- THIS ROUTINE FILLS THE BUFFER,INCREMENT CHARACTER COUNT_^1***_$AND DETECT END OF BUFFER FOR FORMATT€€ED REQUESTS_^1_%SPC 3_^1FILL_!NOP 0_^1_%JMP* FILL2_^1FILL0 EQU FILL0(*)_^1_%LDA- SWITCH,I_^1_%AND- BIT1_)CHECK IF FORMATTED_^1_%SAZ FILL1_(SKIP IF NOT FORMATTED_^1_%LDA- NUMCHR,I_$CHECK IF NUMBER OF CHARS IS ALREADY_^1_%SUB- LINLEN,I_$EQUAL TO LINLEN (WD 22 OF PHYSTAB)_^1_%SAN FILL1_(NO,_^1*_83 CARDS DELETED_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$CHECK IF END OF BUFFER_^1_%SAM €DFILL01_'SKIP IF NOT_^1_%JMP* SETFIN_'SET FINISH SWITCH AND PRINT BUFFER_^1FILL01 JMP* LAB2_)GO PRINT BUFFER_^1FILL1 JMP* (FILL)_^1FILL2 TRA Q_,CHARACTER TO Q_^1_%RTJ* SEND_)SEND CHAR TO BUFFER_^1_%RAO- NUMCHR,I_$INCREASE CHARACTER COUNT_^1_%INA -$20_^1_%SAZ 1_^1_%RAO- BLNKDT,I_^1_%JMP* FILL0_^1_%SPC 3_^1_%END_]_^__DPD7323L CSY/ B38 P€1_%NAM D7323L_'DECK-ID B38 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1732-3/616-72/92/95 MAGNETIC TAPE SUBSYSTEM DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1***** THIS VERSION HANDLES LONG RECORDS ON 7-TRACK DRIVES_^1_%SPC 3_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1_%EQU LOWBTS($3)€€_"LOW ORDER BITS MASK_^1_%EQU HIHBTS($12)_!HIGH ORDER BITS MASK_^1_%EQU ZERO($22)_#LOCATION CONTAINING ZERO_^1_%EQU BITMSK($23)_!INDIVIDUAL BIT MASK_^1_%EQU ZROBIT($33)_!BIT EXCLUSION MASK_^1_%EQU FNR($B5)_$ADDRESS OF FIND NEXT REQUEST SUBROUTIN_^1_%EQU COMPRQ($B6)_!ADDRESS OF COMPLETE REQUEST SUBROUTINE_^1_%EQU DISP($EA)_#ADDRESS OF DISPATCHER_^1_%EJT_]_^1*_*PHYSICAL DEVICE€€ TABLE LAYOUT_^1*_$REFER TO MASS STORAGE OPERATING SYSTEM 4.1 REFERENCE MANU_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_'LOGICAL UNIT NUMBER ASSIGNED_^1_%EQU EPTR(6)_%LOCATION OF REQUEST PARAMETER LIST_^1_%EQU EWES(7)_%EQUIPMENT CODE FOR STATUS_^1_%EQU EREQST(8)_#REQUEST STATUS_^1_%EQU ESTAT1(9)_#DRIVER STATUS_^1_%EQU ECCOR(10)_#NEXT LOCATION TO STOR DATA_^1_%EQU ELS€€TWD(11)_"LAST WORD + 1 TO STORE DATA_^1_%EQU ESTAT2(12)_"LAST EQUIPMENT STATUS_^1_%EQU ETEMP1(15)_"TEMPORARY STORAGE_^1_%EQU UNTMOD(16)_"UNIT AND MODE SELECT CODE_^1_%EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_***MS_^1_%EQU ETEMP2(18)_"TEMPORARY STORAGE_^1_%EQU RTRECV(19)_^1_%EQU ECKSUM(20)_F**M_^1_%EQU ERDIRC(21)_^1_%EQU TCKSUM(22)_^1_%EQU ELINK(23)_#PHYSTAB THREAD_3**MS_^1€€_%EQU PHSREC(24)_"MAXIMUM PHYSICAL RECORD SIZE (7 TRACK_^1_%EQU ABUFF(25)_#PACK/UNPACK BUFFER ADDRESS_"(7 TRACK_^1_%SPC 2_O**M_^1_%EQU NOISLN(2)_#MINIMUM ACCEPTABLE RECORD SIZE_^1_%EQU TERM($43)_^1_%EQU STOLSW($1F)_^1_%EQU WRITFM($30)_^1_%EQU TRYNBR(50)_"NUMBER OF RECOVERY RETRIES._'**M_^1_%EQU MODCOD(15)_"SWITCH MODE ERROR CODE_^1_%EQU ABORTE(50)_"ID ABORT ERROR CODE_^1€€_%EQU ERRDEN(51)_"DENSITY REQUEST ERROR CODE_^1_%EQU PELOSD(59)_"PE LOST DATA ERROR CODE_^1_%SPC 2_^1_%EQU T61672(53)_"TYPE CODE FOR 616-72_293*3233_^1_%EQU T6169X(54)_"TYPE CODE FOR 616-92/95_/93*3233_^1_%SPC 2_^1_%EXT MAS300_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%EXT LOG_^1_%ENT I7323L,C7323L,E7323L_^1_%EXT COMPV4_J**M_^1_%EXT REWCK_(REWIND CHECK_^1_%EXT RQAQ,RLAQ_^1_%EJT€€_]_^1*_]_^1*_$ENTRY FROM MMEXEC_^1*_]_^1MASTAP STQ- I_,SAVE PHYSTB ADDRESS_^1*_]_^1*_$NOTE: THE NEXT INSTRUCTION IS CHANGED BY DRIVER TO JMP*_^1*_,BEFORE EXIT TO MAS300_^1*_]_^1_%STA* LOCN_)SAVE LOCATION OF DRIVER_^1_%EJT_]_^1*_]_^1*_$ABSOLUTIZE PROGRAM RELOCATABLE ADDRESSES_^1*_]_^1_%TRA Q_,LOCATION OF DRIVER TO Q_^1_%ENA TAPINI-MASTAP_^1_%AAQ A_^1_%STA* ADRINT_'STORE ADDRESS €€OF INITIATOR_^1_%LDA =XC17323-MASTAP_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA* ADRCON_'STORE ADDRESS OF CONTINUATOR_^1_%LDA =XE17323-MASTAP_^1_%AAQ A_,INCREMENT + BASE_^1_%STA* ADRHNG_'STORE ADDRESS OF HANGUP_^1_%LDA =XBUSYCK-MASTAP_^1_%AAQ A_^1_%STA BSYAD1_^1_%LDA =XNOBSY1-MASTAP_^1_%AAQ A_^1_%STA BSYAD2_^1_%LDA =XDUMBUF-MASTAP SET UP FWA-1_^1_%AAQ A_,OF ZERO LENGTH_^1_%S€€TA ADVR+1_^1_%INA 1_,DUMMY BUFFER_^1_%STA DUMBUF_'FOR ADVANCE RECORD MOTION_^1_%LDQ- I_,PICK UP PHYSTB ADDRESS_^1_%SPC 3_^1I17323 STQ- I_^1I7323L EQU I7323L(I17323)_^1_%LDA- (ZERO),Q_^1_%STA XXX+1_(REFLECT LEVEL_^1_%STA DVRLVL_'SET DRIVER LEVEL_^1ADRPLG LDA- 0_^1ADRINT ADC TAPINI_^1_%STA- 1,Q_*STORE ADDRESS OF INITIATOR IN PHYSTB_^1_%LDA- 0_^1ADRCON ADC C17323_^1_%STA- 2,Q€€_*STORE ADDRESS OF CONTINUATOR IN PHYSTB_^1_%LDA- 0_^1ADRHNG ADC E17323_^1_%STA- 3,Q_*STORE ADDRESS OF HANGUP IN PHYSTB_^1_%LDA- ELINK,Q_%PICK UP ADDRESS OF NEXT PHYSTB_^1_%TRA Q_,SAVE IN Q_^1_%SUB- I_,SUBTRACT ADDRESS OF START PHYSTB_^1_%SAZ TAPINI_'SKIP IF DONE_^1_%JMP* ADRPLG_'GO BACK AND SET UP NEXT PHYSTB_^1_%EJT_]_^1*_]_^1*_$DRIVER INITIATOR ENTRY FOR ALL EXCEPT FIRST REQU€€EST_^1*_]_^1TAPINI STQ- I_,SAVE ADDRESS OF PHYSTB_^1_%LDA- 0_^1LSTPT NUM 0_,ADDRESS OF CURRENT PHYSTB_^1_%SAZ NOTBSY_^1_%JMP- (DISP)_^1_%SPC 2_^1LOCN_!ADC MASTAP_'DRIVER LOCATION_^1ERRCNT NUM 0_^1_%SPC 2_^1NOTBSY STA* ERRCNT_'RESET COUNTER_^1_%LDA- I_^1_%STA* LSTPT_^1TSTRWD LDA- ESTAT1,I_^1_%AND- BITMSK+6_$GET BIT 6 OF ESTAT1,I_^1_%SAZ NORWD_(CHK 4 REWIND_^1_%JMP* NXTPT_K**€€M_^1NORWD LDA- ESTAT1,I_$GET BIT 5_^1_%AND- BITMSK+5_^1_%SAZ FIND_^1_%LDA* RW_^1_%INA -1_^1_%STA* RW_^1_%LDA- I_S96*3487_^1_%STA* LSTPT_(UPDATE PDT POINTER_496*3487_^1_%JMP TAPC2_(GO EXECUTE REST OF MOTION_-96*3462_^1FIND_!RTJ- (FNR)_(FIND NEXT REQUEST_^1_%JMP* NXTPT_(NO REQUEST THIS PHYSTB_^1_%LDQ- I_,CURRENT PHYSTB_^1_%STQ* LSTPT_(UPDATE LAST POINT_^1_%ENQ 0_^1_%ENA 1_^1_%R€€TJ OUT_*CLEAR CONTROLLER_^1_%LDQ- EPTR,I_'LIST LOCATION IN Q_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- LOWBTS+4_^1_%INA -14_*A = 0 IF MOTION_^1_%SAN NOMO_)SKIP IF NOT MOTION_^1_%JMP MOTION_'REQUEST_^1NOMO_!JMP* XFER_^1_%EJT_]_^1NXTPT LDA- ELINK,I_%GET NEXT PHYSTB_^1_%STA- I_^1_%EOR* LSTPT_^1_%SAZ EXIT_)SKIP IF END OF THREAD_^1_%LDA- EREQST,I_$IS AN ERROR PENDING ON THIS UNIT_^1_%€€AND- BITMSK+14_^1_%SAN BACK_^1_%JMP* TSTRWD_^1BACK_!JMP* NXTPT_^1EXIT_!CLR A_^1_%STA* LSTPT_(SET DRIVER NOT BUSY_^1_%LDA- 0_^1_%ADC $1800+ADRPLG-MASTAP-1_*(JMP* ADRPLG-MASTAP-_^1_%STA* MASTAP+1_^1_%LDA* RW_^1_%SAN EXIT1_^1_%JMP MAS300_^1EXIT1 JMP- (DISP)_'EXIT TO DISPATCHER_^1_%SPC 3_^1ZEROWD ENA 31_+ZERO WORDS ERROR_^1_%JMP FAILED_^1_%SPC 3_^1RW_#NUM 0_^1_%EJT_]_^1XFER_€€!LDA- ELSTWD,I_^1_%LDQ- ECCOR,I_^1_%STA* LWA_*SET UP INTERNAL POINTS_^1_%STQ* FWA_^1_%RTJ COMPV4_'GET TRANSFER LENGTH_^1_%INA -NOISLN_%CHECK IF RECORD LENGTH.GT.NOISLN_^1_%SAM TOSHRT_^1_%SAZ TOSHRT_^1_%ENA 4_,ODD PARITY ASSUMED_^1_%STA* PRITYC_^1_%ENA 1_,ASSUME BUFF MODE FOR 609_^1_%STA* BUFMOD_^1_%ENA 0_,ASSUME READ INDEX_^1_%STA* MOTIDX_^1_%LDA- EREQST,I_$REQUEST STATUS TO€€ A_^1_%ARS 4_,TYPE CODE TO LOWER BITS_^1_%AND- LOWBTS+6_$SAVE TYPE CODE ONLY_^1_%INA -T6169X_%CHECK FOR 9 TRACK TRANSPORT_^1_%SAZ M609_^1_%JMP* M608_^1TOSHRT JMP* ZEROWD_^1_%SPC 3_^1M609_!LDA- ESTAT1,I_^1_%AND- BITMSK+0_$BIT 0_^1_%SAZ REED_^1_%JMP* WREC_^1REED_!JMP* WREC1_^1_%SPC 3_^1M608_!ENA 1_^1_%AND- ESTAT1,I_$MASK READ/WRITE_^1_%TRA Q_,SAVE IN Q_^1_%ENA 8_^1_%AND- EST€€AT1,I_$MASK MODE_^1_%SAZ SETUB_(SET UNBUF MODE GOR BINARY_^1_%ENA 2_^1_%STA* PRITYC_'SET ASCII MODE_^1_%SQZ IOXFER_'EVEN READ - DO BUFFERED_^1SETUB ENA 0_^1_%STA* BUFMOD_'SET UNBUFFERED MODE_^1_%SQZ IOXFER_'READ_^1WREC_!RTJ CHKSUM_'GO CHECK SUM RECORD 1ST 16_^1_%STA- TCKSUM,I_^1_%ENA 1_^1WREC1 STA* MOTIDX_^1_%EJT_]_^1IOXFER LDA* PRITYC_'PARITY CODE 1, OR 2_^1_%RTJ* UNTSEL_€€^1_%ALS 15_^1_%SAM TAPRDY_^1_%JMP NORDY_^1TAPRDY LDA- ESTAT1,I_^1_%AND- BITMSK+0_$BIT 0_^1_%SAZ IOCONT_^1_%RTJ RINGCK_^1IOCONT LDQ* MOTIDX_%MOTION CODE INDEX_^1_%LDA* RWMOTN,Q_^1_%STA* FUNCT1_'SET FUNCTION CODES_^1_%LDA* BUFMOD_^1_%SAN ISBUF_(IS BUFFERED_^1_%RTJ+ RQAQ_)GET AQ CHANNEL_^1_%STQ- I_,RESTORE I REGISTER_^1_%LDA* FWA_*PASS BUFFER BOUNDARIES_^1_%LDQ* LWA_*TO THE 7-TR€€ACK MODULE_^1_%JMP IS7TRK_^1ISBUF EQU ISBUF(*)_^1_%LDQ* FWA_^1_%INQ -1_^1_%STQ* FWADR_^1_%LDA- (ZERO),Q_^1_%STA* SAVFWA_^1_%LDA* LWA_^1_%IIN 0_,STORE_!LWA+1 IN FWA-1_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%LDQ- EWES,I_^1_%INQ 2_^1_%OUT BUFREJ-*_$LOAD FWA-1_^1NMARD INP BUFREJ-*_^1_%SUB* FWA_*DIFFERENCE NMA,FWA_^1_%SAP 1_Q7_^1_%JMP* NMARD_^1_%LDA- 0_,2 WORD INSTRUCTION_^1SAVFWA NU€€M 0_,USERS FWA-1_^1_%LDQ- 0_,2 WORD INSTRUCTION_^1FWADR NUM 0_^1_%STA- (ZERO),Q_$RESTORE CONTENTS OF FWA-1_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%LDA- 0_,2 WORD INSTRUCTION_^1FUNCT1 NUM 0_,READ/WRITE MOTION FUNCTION_^1_%ENQ 0_^1_%RTJ* OUT_*READ/WRITE MOTION_^1_%ENA 5_^1_%STA- EDCLK,I_^1_%JMP- (DISP)_^1_%EJT_]_^1BUFREJ JMP* BB_+INTERNAL REJECT_^1_%ENA 6_,EXTERNAL REJECT_^1BA_#STA-€€ ETEMP2,I_$SAVE AS ERROR CODE_^1_%LDA* SAVFWA_^1_%LDQ* FWADR_^1_%STA- (ZERO),Q_$RESTORE FWA-1_^1_%JMP FAILED+1_^1BB_#ENA 5_^1_%JMP* BA_^1_%SPC 5_^1RWMOTN NUM $108_)READ,EOP,_^1_%NUM $98_*WRITE,EOP_^1MOTIDX NUM 0_,AN INDEX INTO RWMOTN_^1PRITYC NUM 1_,PARITY CODE_^1FWA_"NUM 0_^1LWA_"NUM 0_^1SAVLWA NUM 0_^1SAVEIT NUM 0_Q7_^1BUFMOD NUM 0_,NON ZERO FOR BUFFERED XFER_^1_%SPC €€5_^1IN_#NUM 0_,RETURN ADDRESS OF IN SUBROUTINE_^1_%ADQ- EWES,I_'ADD IN EQUIPMENT CODE_^1_%INP INRJT-*_^1_%JMP* (IN)_)RETURN_^1_%SPC 5_^1INRJT JMP* INCODE_^1_%ENA 6_,EXTERNAL REJECT CODE_^1FAILX JMP FAILED_'GO TO FAILED ROUTINE_^1INCODE ENA 5_^1_%JMP* FAILX_^1_%SPC 5_^1OUT_"NUM 0_,RETURN ADDRESS OF OUT SUBROUTINE_^1_%ADQ- EWES,I_'ADD IN EQUIPMENT CODE_^1_%OUT INRJT-*_^1_%€€JMP* (OUT)_(RETURN_^1_%EJT_]_^1UNTSEL NUM 0_^1_%ADD- UNTMOD,I_$ADD UNIT AND MODE SELECT BITS_^1_%STA* CONCOD_^1_%EOR* LSTCON_'CHECK AGAINST LAST CONNECT AND DIRECTI_^1US1_"SAM US2_*SKIP IF DIRECTION CHANGE_^1_%LDA- BITMSK+12_^1_%STA- ETEMP1,I_$SET MASK TO CHECK CONTROLLER ACTIVE_^1_%JMP* US3_^1US2_"LDA- BITMSK+1_^1_%STA- ETEMP1,I_$SET MASK TO CHECK BUSY_^1US3_"ENQ 0_^1_%RTJ* IN_€€+GET STATUS 1_^1_%AND- ETEMP1,I_$CHECK SELECTED STATUS_^1_%SAZ SLTIT_(SKIP IF BIT NOT SET TO SELECT_^1_%JMP* CKBUSY_'WAIT FOR NOT BUSY AT LEVEL 3_^1SLTIT LDA* CONCOD_'CONNECT CODE TO A_^1_%STA* LSTCON_'UPDATE LAST CONNECT_^1_%AND- LOWBTS+14_#MASK OFF DIRECTION BIT_^1_%ENQ 1_^1_%RTJ* OUT_*CONNECT TO UNIT_^1_%RTJ* STATUS_'UPDATE STATUS_^1_%JMP* (UNTSEL)_$RETURN TO USER_^1_%SPC 3_€€^1CONCOD NUM 0_^1LSTCON NUM 0_,PREVIOUS CONNECT AND DIRECTION_^1_%SPC 3_^1CKBUSY LDQ- I_,PASS PHYSTB ADDRESS_^1_%RTJ- ($F4)_(SCHDLE BUSYCK,3,,1_^1_%NUM $5203_^1BSYAD1 ADC BUSYCK_^1_%JMP- (DISP)_'EXIT TO DISPATCHER_^1BUSYCK STQ- I_,SAVE PHYSTB ADDRESS_^1_%ENQ 0_^1_%RTJ* IN_+GET STATUS_^1_%AND- ETEMP1,I_$CHECK SELECTED STATUS_^1_%SAZ NOBUSY_'SKIP IF BIT NOT SET_^1_%JMP* CKBUS€€Y_'RESCHEDULE BUSYCK_^1NOBUSY LDQ- I_,PASS PHYSTB ADDRESS_^1_%RTJ- ($F4)_(SCHDLE NOBSY1,X,,1_^1DVRLVL NUM $520A_^1BSYAD2 ADC NOBSY1_^1_%JMP- (DISP)_^1NOBSY1 STQ- I_,SAVE PHYSTB ADDRESS_^1_%JMP* SLTIT_(GO SELECT UNIT_^1_%EJT_]_^1*_]_^1*_*STATUS BIT POSITIONS_^1*_]_^1*_$BIT_/MEANING_^1*_%0_*READY_^1*_%1_*BUSY_^1*_%2_*PE WARNING_^1*_%3_*PE LOST DATA_^1*_%4_*END OF OPERATION_^1*_%5_€€*ALARM_^1*_%6_*LOST DATA_^1*_%7_*CONNECTED TO PE TRANSPORT_^1*_%8_*PARITY ERROR_^1*_%9_*END OF TAPE_^1*_$10_*LOAD POINT_^1*_$11_*FILE MARK_^1*_$12_*556 BPI_^1*_$13_*800 BPI_^1*_$14_*SEVEN TRACK_^1*_$15_*WRITE ENABLE_^1*_]_^1_%SPC 5_^1STATUS NUM 0_,READ STATUS 1, 2 AND STORE IN ESTAT2_^1_%ENQ 1_^1_%RTJ* IN_+READ STATUS 2_^1_%AND- LOWBTS+7_$($00FF) SAVE BITS 7-0 ONLY_^1_%CLR Q_^1€€_%LLS 9_,BIT 7 TO Q_^1_%QLS 3_,ZERO 3 BITS_^1_%LLS 5_,BITS 2-6 TO Q_^1_%QRS 1_,WASTE BIT_^1_%LRS 2_,REPOSITION A BITS_^1_%QLS 2_,REPOSITION Q BITS_^1_%EAQ A_,COMBINE IN A_^1_%STA- ESTAT2,I_^1_%ENQ 0_^1_%RTJ* IN_+READ STSUS 1_^1_%AND =N$F73_'MASK OFF UNWANTED BITS_^1_%ADD- ESTAT2,I_$COMBINE WITH STATUS 2_^1_%STA- ESTAT2,I_^1_%JMP* (STATUS)_^1_%EJT_]_^1C17323 STQ- I_^1C7323L€€ EQU C7323L(C17323)_^1_%ENA 2_^1_%ENQ 0_^1_%RTJ* OUT_*CLEAR INTERRUPTS_^1_%ENQ 2_^1_%RTJ* IN_^1_%LDQ LSTPT_(CHECK FOR GHOST INT AND SET LAST_^1_%SQN TAPC06_'PHYSTB ADDRESS. SKIP IF NO GI._^1_%JMP EXIT_)EXIT IF NOT EXPECTED_^1TAPC06 STQ- I_^1_%STA* SAVEIT_'SAVE NMA-1 (LWA)_47_^1_%ENA -0_^1_%STA- EDCLK,I_%CLEAR DIAGNOSTIC CLOCK_^1_%LDA- ESTAT1,I_$DO NOT CHECK FWA AND LWA_,7_^€€1_%ALS 10_+IF A MOTION REQUEST_17_^1_%SAP UPDAT_(NO MOTION REQUEST_37_^1_%JMP* TAPC2_(MOTION REQUEST_67_^1UPDAT LDA* BUFMOD_^1_%SAN UPDAT1_'IS BUFF MODE_^1_%LDA CURR_)CURR BECOMES_^1_%STA* SAVEIT_'NMA_^1UPDAT1 LDA* SAVEIT_^1_%LDQ* LWA_O7_^1_%STQ* SAVLWA_L7_^1_%STA* LWA_O7_^1_%LDQ* FWA_*FWA OF BUFFER._4**M_^1_%RTJ COMPV4_'CHECK IF CURRENT ADDRESS IS WITHIN **M_^1_%SAZ TAPC1_(€€BUFFER BOUNDARY._2**M_^1_%SAP TAPC1_K**M_^1BUFERR ENA 37_^1_%JMP FAILED_J**M_^1TAPC1 LDQ* LWA_*CURRENT ADDRESS._2**M_^1_%LDA* SAVLWA_'BUFFER LWA._7**M_^1_%RTJ COMPV4_J**M_^1_%SAZ TAPC2_K**M_^1_%INA 0_O**M_^1_%SAN TAPC2_K**M_^1_%JMP* BUFERR_'YES_^1TAPC2 RTJ* STATUS_'GET FRESH STATUS_^1_%LDA- ESTAT2,I_^1_%ALS 15_^1_%SAM REDY_^1NORDY ENA 14_^1_%EQU FAILD(*)_L96*3465_^1_%€€JMP FAILED_^1REDY_!LDQ- RTRECV,I_$CHECK FOR RECOVERY I/O_^1_%JMP* REDY3,Q_%CONTINUE OR EXIT TO RECOVERY_^1REDY3 LDA- ESTAT1,I_$CHECK MOTION REQUEST_^1_%ALS 10_+MOTION BIT IN A15_^1_%SAP NOMO1_^1_%JMP NXTMOT_'EXCUTE NEXT MOTION_^1NOMO1 ALS 5_,CHECK FOR READ_^1_%SAP 1_,SKIP IF READING_^1_%JMP* NOEF_)BYPASS CHECK IF WRITING_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 4_,EOF STA€€TUS TO BIT 15_^1_%SAP NOEF_)SKIP IF NOT FILE MARK/TAPE MARK_^1_%JMP* ATEOF_(GOT END OF FILE_^1NOEF_!LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 10_+ALARM TO BIT 15_^1_%SAM ALRMCK_'SKIP IF ALARM TO CHECK REASON_^1_%JMP* NOALRM_'NO ALARM, CONTINUE_^1ALRMCK LDA- ESTAT2,I_$PICK UP STATUS_^1_%AND =N$3000_%SAVE ONLY DENSITY BITS_^1_%SAN ALRMC2_'SKIP IF TRANSPORT AT 556 OR 800 BPI_^1_%LDA-€€ ESTAT2,I_$PICK UP STATUS_^1_%ALS 12_+PE LOST DATA ERROR TO A15_^1_%SAP ALRMC1_'SKIP IF NO ALARM_^1_%ENA PELOSD_'ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC1 ENQ 1_^1_%RTJ IN_+GET STATUS 2_^1_%AND- BITMSK+8_$CHECK FOR ID ABORT_^1_%SAZ ALRMC2_'SKIP IF NO ALARM_^1_%ENA ABORTE_'ERROR CODE TO A_^1_%JMP* FAILD_(EXIT TO REPORT ERROR_296*3465_^1ALRMC2 LDA- ESTAT2,I_$ST€€ATUS TO A_^1_%ALS 7_,BIT 8 (PARITY) TO BIT 15_^1_%SAP ALRMC3_'SKIP IF NO PARITY ERROR_^1_%ENA 3_,ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC3 ALS 2_,BIT 6 (LOST DATA)_^1_%SAP NOALRM_'SKIP IF NO ERROR_^1_%ENA 1_,ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1NOALRM LDQ FWA_^1_%LDA LWA_^1_%RTJ* NOISCK_'CHECK FOR SNR_77_^1_%JMP* RECV2_(NOT SNR_=7_^1IODO_!LDA €€SAVLWA_^1_%STA LWA_O7_^1_%JMP IOXFER_L7_^1RECV2 LDA- ESTAT1,I_J7_^1_%AND- BITMSK+0_^1_%SAZ NOWRIT_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_^1NOWRIT EQU NOWRIT(*)_^1RECCMP LDQ- ESTAT1,I_^1_%LRS 1_,READ/WRITE BIT IN A15_^1_%SAP READC_^1_%JMP* WRITEC_^1READC LDA- ESTAT2,I_^1_%ALS 4_,FILE MARK STATUS IN A15_^1_%SAP NOFILE_^1ATEOF LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_^1_%STA- €€EREQST,I_^1_%JMP* CMPRD_^1NOFILE LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK IN A15_^1_%SAM CKMOD_^1_%JMP* WRITEC_^1CKMOD LDQ- ESTAT1,I_^1_%LRS 4_,ASC BIT IN A15_^1_%SAP CKMOD1_'SKIP IF BINARY MODE_^1_%JMP* BCDASK_^1CKMOD1 LDA- ECCOR,I_^1_%STA* SNRADR_^1_%LDA SAVEIT_'GET CURRENT BUFFER LOCATION_^1_%LDQ* SNRADR_^1_%RTJ* NOISCK_^1_%JMP* WRITEC_^1_%LDA* SNRADR_^1_%STA- ECCOR,I_^1_%JMP* IOD€€O_^1_%SPC 2_^1SNRADR NUM 0_^1_%SPC 2_^1BCDASK LDA FWA_^1_%TCA Q_^1_%ADQ LWA_*CALCULATE NO WORDS_^1_%RTJ BCD2A_(BCD-TO-ASCII_^1_%SPC 2_^1WRITEC LDA LWA_^1_%STA- ECCOR,I_%UPDATE CURRENT DATA POINTER_^1COMPL LDA- ESTAT1,I_^1_%AND- BITMSK+5_^1_%SAN COMPLT_^1CMPRD RTJ MAKEQ_^1COMPLT RTJ- (COMPRQ)_$COMPLETE THE REQUEST_^1_%JMP FIND_^1_%SPC 2_^1NOISCK NOP 0_^1_%RTJ COMPV4€€_'GET TRANSFER LENGTH_^1_%INA -NOISLN_^1_%SAZ NOISE_^1_%SAP NONOIS_^1NOISE RAO* NOISCK_^1NONOIS JMP* (NOISCK)_^1_%SPC 2_^1RECVR STA ERRNO_^1_%LDA- ESTAT2,I_^1_%AND- BITMSK+11_#BIT 11_^1_%SAZ RECV_^1_%LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_^1_%STA- EREQST,I_^1_%JMP* COMPL_^1_%SPC 3_^1TIMES NUM 0_^1TRIES NUM 0_^1_%SPC 3_^1RECV_!LDQ- ELU,I_^1_%TRQ A_,LOGICAL UNIT TO A€€_^1_%EOR- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SAN T00001_'IT''S NOT, CONTINUE_^1_%JMP* LPRTN_^1T00001 QLS 6_^1_%ADQ ERRNO_^1_%ENA 15_^1_%RTJ LOG_^1_%LDA FWA_*ORIGINAL FWA_^1_%STA* TEMFWA_^1_%LDA MOTIDX_'MOTION INDEX_^1_%STA* TEMIDX_^1_%LDA SAVLWA_'ORIGINAL LWA_^1_%STA* TEMLWA_^1_%LDA- ESTAT1,I_$CHK 4 READ OR WRITE_^1_%AND- BITMSK+0_^1_%SAN WRCVRO_'SKIP IF WRITE_^1_%JMP €€RRCVR_^1_%SPC 2_^1BKSPCT BSS BKSPCT(1)_^1NBRBSP BSS NBRBSP(1)_^1TEMIDX NUM 0_^1TEMFWA NUM 0_^1TEMLWA NUM 0_^1_%SPC 2_^1WRCVRO CLR A_^1_%STA* NBRBSP_^1_%STA* TRIES_^1_%ENA 5_^1_%STA* TIMES_^1WRCVR LDA* TIMES_^1_%SAN DEBUMP_^1LPRTN ENA 0_^1_%STA- RTRECV,I_^1_%LDA ERRNO_^1_%JMP FAILED_^1DEBUMP INA -1_^1_%STA* TIMES_^1CLRBKP CLR A_,CLEAR BKSP CNTR_^1_%STA* BKSPCT_^1WRC€€VR1 LDA- ESTAT2,I_$CHK 4 LP_^1_%ALS 5_^1_%SAP NOLP_)SKIP IF NO LP_^1_%JMP* CKBKSP_'CHK BKSPCT_^1NOLP_!RTJ BKSSP_(BACKSPACE_^1_%RAO* NBRBSP_^1_%RAO* BKSPCT_^1_%LDA- ERDIRC,I_$FD FROM PHYSTB_^1_%SAP REREAD_'TRY READ NEXT_^1_%ALS 1_,UPDATE DIRECTORY_^1_%STA- ERDIRC,I_$RESTORE FD_^1_%JMP* WRCVR1_'CONTINUE DASHING_^1REREAD ENQ 0_,PICK UP MOTION INDEX_^1_%RTJ* SWAP_*SET UP READ._^1€€_%RTJ* CALAD_^1DUMRD ENQ 0_^1_%RTJ* SWAP_*SET UP READ._^1_%RTJ* CALAD_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP READOK_'SKIP IF NO ERROR_^1CORRFD LDA- ERDIRC,I_$FD Z A_^1_%ALS 1_^1_%SAP SHFT_)MID-RECV CORR NEEDED_^1_%STA- ERDIRC,I_^1_%JMP* CLRBKP_^1SHFT_!ALS 1_^1_%STA- ERDIRC,I_^1_%JMP* WRCVR_^1READOK RTJ* CHKSUM_^1_%EOR- ECKSUM,I_$CHKSUMS EQUAL_^1_%SAZ CKSMOK_'YES_^1_%JMP* CORRF€€D_'NO_^1CKSMOK LDA =N$DCDC_%RESET_^1_%STA- ERDIRC,I_$FD_^1RTYSNR ENQ 1_^1_%RTJ* SWAP_^1_%RTJ* CALAD_(WRITE SNR_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP WRTEOF_'SKIP IF NO PARITY_^1_%RTJ* BKSSP_^1_%CLR A_,SET EOF FLAG_^1_%RTJ* BKSSP_(WRITE EOF OVER BAD SPOT_^1_%RTJ* BKSSP_(BKSSP EOF_^1_%JMP* RTYSNR_'RETRY WRITING THE SNR._,**M_^1WRTEOF LDA* TRIES_^1_%INA -TRYNBR_^1_%SAN CONEOF_^1_€€%JMP* LPRTN_^1CONEOF RAO* TRIES_^1_%ENA 0_^1_%RTJ* BKSSP_^1_%RTJ* BKSSP_^1_%ENQ 1_^1_%RTJ* SWAP_^1_%RTJ* CHKSUM_(CHECK SUM SNR._^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP ADVRCV_^1_%RTJ* BKSSP_^1_%JMP* WRTEOF_^1ADVRCV LDA* TEMIDX_'ORIGINAL MOTIDX_^1_%STA MOTIDX_^1_%LDA* TEMFWA_'ORIGINAL FWA_^1_%STA FWA_^1_%LDA* TEMLWA_'ORIGINAL LWA_^1_%STA LWA_^1_%L€€DA- TCKSUM,I_^1_%STA- ECKSUM,I_^1_%RTJ* CHKSUM_^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_^1_%RTJ STUSCK_^1_%JMP* ADVRV_^1_%LDA* ERRNO_^1_%JMP RECVR_^1ADVRV CLR A_^1_%STA- RTRECV,I_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE RECOVERY._^1_%INA -MODCOD_^1_%SAZ YESMOD_'SKIP IF MODE RECOVERY,_^1_%JMP NOALRM_^1YESMOD LDA- ESTAT2,I_$SET PSEUDO PE BIT._^1_%EOR- BITMSK+8_^1_%STA- ESTAT2,I_^1_%LDA- E€€REQST,I_$SET V BIT 14._^1_%EOR- BITMSK+14_^1_%STA- EREQST,I_^1_%JMP CMPRD_^1_%SPC 3_^1CKBKSP LDA* BKSPCT_^1_%INA -3_^1_%SAM CKBK1_^1_%JMP* DUMRD_^1CKBK1 LDA* NBRBSP_^1_%INA -2_^1_%SAZ CKBK2_^1_%JMP* LPRTN_^1CKBK2 JMP* CKSMOK_^1_%SPC 3_^1SWAP_!NOP 0_^1_%STQ MOTIDX_^1_%RTJ* CALCUT_^1CALCUT NOP 0_^1_%SQN USNR_^1_%ENA READBF-CALCUT RELATIVE ADDRESS OF BUFFER_^1_%JMP* SWAP€€1_^1USNR_!ENA SNR-CALCUT_"RELATIVE ADDRESS OF SNR_^1SWAP1 ADD* CALCUT_^1_%STA FWA_^1_%ADD* LWATAB,Q_^1_%STA LWA_^1_%JMP* (SWAP)_^1_%SPC 3_^1ERRNO NUM 0_,ERROR NUMBER_^1LWATAB NUM 8_^1_%NUM 2_^1READBF BSS READBF(8)_^1SNR_"NUM $2D2E_^1_%NUM $2D2E_^1_%SPC 3_^1CALAD NOP 0_^1_%LDA =XALLRTN-REDY3_^1_%STA- RTRECV,I_^1_%JMP IOXFER_^1ALLRTN JMP* (CALAD)_^1_%SPC 3_^1CHKSUM €€NOP 0_^1_%LDA LWA_^1_%INA -1_+LWA+1 TO LWA_^1_%SUB FWA_*CALCULATE NBR OF WORDS_^1_%TRA Q_,Q=INDEX_^1_%INA -8_^1_%SAM BEGNCK_^1_%ENQ 7_^1BEGNCK CLR A_,ZERO COUNTERS_^1GTBITS ADD (FWA),Q_^1_%SQZ DONBIT_^1_%INQ -1_^1_%JMP* GTBITS_^1DONBIT JMP* (CHKSUM)_^1_%SPC 3_^1BKSSP NOP 0_^1_%SAZ ERRMOT_^1_%LDA- BITMSK+12_^1_%JMP* WIGGLE_^1ERRMOT LDA- WRITFM_^1WIGGLE LDQ =XBKSPRN€€-REDY3_^1_%STQ- RTRECV,I_^1_%RTJ XCTMOT_^1BKSPRN LDA- ZROBIT+5_%CLEAR MOTION FLAG_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%SET A_^1_%JMP* (BKSSP)_^1_%SPC 3_^1SWMOD NOP 0_^1_%ENQ 1_,ASSUME BCD BUFFERED MODE_^1_%LDA PRITYC_^1_%INA -2_+SWITCH_^1_%SAN BCDING_'MODE_^1_%ENA 4_^1_%ENQ 0_,BINARY UNBUFFERED MODE_^1BCDING STA PRITYC_^1_%STQ BUFMOD_'CHANGE XFER MODE_^1_%JMP* (SWMO€€D)_^1_%SPC 3_^1TOTLSW NUM 0_^1_%SPC 3_^1ADVREV JMP* ADVRV_^1_%SPC 3_^1RRCVR LDA SAVLWA_^1_%STA LWA_^1_%LDA- STOLSW_^1_%STA* TOTLSW_^1LOPAGN CLR A_,SET SWS_^1_%STA* PINTCT_^1_%ENA -0_^1RRCVR1 RTJ* BKSSP_(BKSP_^1_%RTJ* CALAD_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* ADVREV_^1_%LDA- 0_,THIS LOOP COMPLETE_^1PINTCT NUM 0_^1_%EOR- TERM_^1_%SAZ STEP2_^1_%RAO* PINTCT_^1_%JMP* RRCVR1_€€'CONTINUE_^1STEP2 STA* PINTCT_^1_%LDA- ESTAT2,I_^1_%ALS 1_^1_%SAM SWCHMD_^1_%JMP* NONEED_^1SWCHMD RTJ* SWMOD_^1_%RTJ* BKSSP_(BKSP_^1_%RTJ* CALAD_^1_%RTJ* STUSCK_^1_%JMP* MODERR_^1_%RTJ* BKSSP_^1_%RTJ* CALAD_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* MODERR_'ADVISE OF MODE ERR_^1_%RTJ* SWMOD_^1NONEED RTJ* BKSSP_^1_%ENA -0_R96*3198_^1_%RTJ* BKSSP_(BKSP_^1_%RTJ* CKPINT_^1_%RAO* PINTCT_'€€ADD ONE LOAD POINT_^1_%RTJ* BKSSP_(BKSP_^1_%RTJ* CKPINT_^1_%RTJ* CALAD_^1RELRD2 RTJ* CALAD_^1RELRD1 RTJ* CALAD_^1_%RTJ* STUSCK_^1_%JMP* ADVREV_^1_%LDA* TOTLSW_^1_%SAP DONOW_(SKIP IF DONE_^1_%ALS 1_^1_%STA* TOTLSW_^1_%JMP* LOPAGN_'GO LOOP AGAIN_^1DONOW LDA* ERRNO_^1_%ENQ 0_^1_%STQ- RTRECV,I_^1_%JMP* FAILED_^1_%SPC 3_^1MODERR ENA MODCOD_'SET SWITCH MODE CODE._^1_%STA* ERRNO_^1_€€%JMP* ADVREV_^1_%SPC 3_^1STUSCK NOP 0_^1_%LDA- ESTAT2,I_^1_%ALS 7_^1_%SAP GODST_(SKIP ID GOOD_^1_%RAO* STUSCK_^1GODST JMP* (STUSCK)_^1_%SPC 3_^1CKPINT NOP 0_^1_%LDA- ESTAT2,I_^1_%ALS 5_^1_%SAM PINT_^1_%JMP* (CKPINT)_^1PINT_!LDA* PINTCT_^1_%SAN NOT1_^1_%STA* TOTLSW_^1_%JMP* RELRD1_^1NOT1_!JMP* RELRD2_^1_%EJT_]_^1E17323 LDA LSTPT_^1E7323L EQU E7323L(E17323)_^1_%STA- I_^1_€€%CLR A_,HANGUP CODE IN A_^1_%SPC 5_^1FAILED STA- ETEMP2,I_$ENTRY FOR FAILURES_^1_%ENA 0_Q7_^1_%STA MOTITR_'CLR A15 WRD4 IF SET_17_^1_%EIN 0_^1_%LDA- EREQST,I_^1_%ADD- BITMSK+14_^1_%STA- EREQST,I_^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+5_$CHECK MOTION_87_^1_%SAZ NOTRW_^1_%EOR- ESTAT1,I_$CLEAR THE MOTION BIT_^1_%STA- ESTAT1,I_^1_%AND- BITMSK+6_$CHECK REWIND BIT_^1_%SAZ NOTRW_^1_%EOR€€- ESTAT1,I_^1_%STA- ESTAT1,I_$CLEAR REWIND BIT_^1_%LDA RW_^1_%INA -1_^1_%STA RW_^1NOTRW LDQ- EWES,I_^1_%ENA 1_^1_%OUT 1_,CLEAR CONTROLLER AFTER FAILURE_^1_%NOP 0_^1_%RTJ MAKEQ_^1_%LDQ- ETEMP2,I_^1_%QLS 10_^1_%ADQ- ELU,I_(COMBINE LU NUMBER WITH ERROR CODE_^1_%QLS 6_,POSITION_^1_%RTJ LOG_*GO LOG ERROR_^1_%LDA- ELU,I_(CURRENT LOGICAL UNIT_^1_%EOR- DIAGLU,I_$CHECK IF DIAGNOS€€TIC LOGICAL UNIT_^1_%SAZ CMPLIT_'IT IS, COMPLETE REQUEST_^1XXX_"SCHDLE ALTDEV,0,,1_^1_%JMP NXTPT_(CONTINUE SEARCH FOR WAITING REQUEST_^1_%EJT_]_^1MOTION LDQ- EPTR,I_^1_%LDA- 4,Q_*GET USER-S CONTROL WORD_^1_%RTJ* XCTMOT_^1CMPLIT JMP COMPLT_^1_%SPC 3_^1XCTMOT NUM 0_,USED BY MOTION AND RECOVERY_^1_%STA- ETEMP2,I_$SAVE MOTION CONTROL IN A_^1_%LDA- ESTAT1,I_^1_%ADD- BITMSK+5_$SET €€MOTION REQ. BIT_^1_%STA- ESTAT1,I_^1_%LDA- ETEMP2,I_^1_%SAM NODENS_'SKIP IF ITERATIVE REQUEST_^1_%AND- LOWBTS+3_"SAVE DENSITY (0-3) ONLY_^1_%STA* DENCOD_'SAVE DENSITY_^1_%LDA- ETEMP2,I_^1_%AND- HIHBTS+4_$REMOVE DENSITY_^1_%STA- ETEMP2,I_^1_%JMP* DOMOT_^1NODENS AND- LOWBTS+11 MASK OUT INTERATIONS_^1_%STA MOTITR_'SAVE ITERATIONS_^1_%LDA- ETEMP2,I_^1_%AND- HIHBTS+12_#MASK MOTION IN€€DEX TO TERMINATE_^1_%STA- ETEMP2,I_^1DOMOT LDA- ETEMP2,I_^1_%ARS 12_^1_%AND- LOWBTS+14-12_^1_%STA* MOTCOD_'SAVE MOTION CODE_^1_%INA -4_+OFFSET TO GET COMPLEMENT OF DIRECTION_^1_%TCA A_^1_%AND- BITMSK+0_$SAVE BIT 0 (DIRECTION) ONLY_^1_%ALS 15_+DIRECTION TO BIT 15_^1_%INA 4_,SET BINARY MODE_^1_%RTJ UNTSEL_'SELECT UNIT_^1_%LDQ* MOTCOD_'PICK UP MOTION CODE_^1TABDEX JMP* SUBMOT,Q€€_$INDEX ON MOTION CODE_^1_%SPC 2_^1DENCOD NUM 0_^1MOTCOD NUM 0_^1_%EJT_]_^1SUBMOT JMP* DONEM_(DONE OR DENSITY_)0_^1_%JMP* BKSP_)BACKSPACE RECORD_(1_^1_%JMP* WRFM_)WRITE FILE MARK_)2_^1_%JMP* REW_*REWIND_23_^1_%JMP* REWUN_(REWIND UNLOAD_+4_^1_%JMP* MOTSTR_'SEARCH FILE FORWARD_$5_^1_%JMP* FLBK_)SEARCH FILE BACKWARD_#6_^1_%JMP* ADVR_)ADVANCE RECORD_*7_^1_%SPC 5_^1MCODS NUM $189_€€)BACKSPACE RECORD_^1_%NUM $289_)WRITE FILE MARK_^1_%NUM $401_)REWIND_^1_%NUM $401_)REWIND UNLOAD_^1_%NUM $309_)ADVANCE FILE_^1_%NUM $389_)BACKSPACE FILE_^1_%NUM $109_)ADVANCE RECORD_^1_%SPC 5_^1MOTSTR LDA* MCODS-1,Q_#GET MOTION CODE, INDEXED BY Q_^1_%ENQ 0_^1_%RTJ OUT_*GO OUTPUT_^1_%ALS 12_+EOP REQUEST IN A15_^1_%SAP EOPNOT_^1_%LDA- $B_+H01FF_^1_%STA- EDCLK,I_^1_%JMP- (D€€ISP)_^1EOPNOT LDA* MOTCOD_^1_%INA -4_+CHECK FOR 'REWIND UNLOAD' REQUEST_^1_%SAZ DONEM_(SKIP IF IT IS TO COMPLETE THE REQUEST_^1_%LDQ- I_,SCHEDULE REWIND CHECK_^1_%SCHDLE REWCK,3,,1_^1_%JMP NXTPT_^1_%EJT_]_^1DONEM LDA* DENCOD_'PICK UP DENSITY_^1_%SAN 1_,SKIP IF DENSITY REQUEST_^1_%JMP* NODEN_^1_%LDQ- ESTAT2,I_$PICK UP STATUS_^1_%QLS 5_,LOAD POINT TO BIT 15_^1_%SQM DEN1_)AT L€€OAD POINT, OK FOR DENSITY SELECT_^1_%JMP* DENERR_'ERROR, NOT AT LOAD POINT_^1DEN1_!LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK STATUS TO BIT 15_^1_%SAP CK800_(SKIP IF 9 TRACK,OK_^1_%LDA* DENCOD_^1_%INA -3_^1_%SAM DEN1A_(SKIP IF 556 OR 800 BPI REQUEST_^1_%JMP* DENERR_'ERROR, 200 OR 1600 BPI ON 7 TRACK_^1DEN1A INA 1_^1_%SAN CK800A_'SKIP IF 800 BPI REQUEST_^1_%ENA $10_^1_%JMP* DENSEL_^1C€€K800 LDA* DENCOD_^1_%INA -1_+CHECK FOR 800 BPI REQUEST_^1_%SAN CK1600_^1CK800A ENA 8_^1_%JMP* DENSEL_^1CK1600 INA -3_+CHECK FOR 1600 BPI REQUEST_^1_%SAZ 1_^1_%JMP* DENERR_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 8_^1_%SAP DENERR_'SKIP IF NOT PE CAPABLE TRANSPORT_^1_%ENA $20_^1DENSEL TRA Q_,SAVE DENSITY SELECT IN Q_^1_%ENA -$38_)MASK TO A_^1_%AND- UNTMOD,I_$MASK OFF OLD €€DENSITY_^1_%AAQ A_,ADD IN NEW DENSITY_^1_%STA- UNTMOD,I_$SET BACK IN PHYSTB_^1NODEN LDA- ZROBIT+5_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* (XCTMOT)_$RETURN TO CALLER_^1_%SPC 5_^1DENERR ENA ERRDEN_'DENSITY ERROR CODE_^1_%JMP FAILED_^1_%EJT_]_^1WRFM_!RTJ* RINGCK_^1_%JMP* MOTSTR_^1_%SPC 3_^1REW_"RTJ* LPCHK_(CHECK FOR LOAD POINT, RETURN IF NOT L._^1_%LDA- ESTAT1,I_^1_%AND- ZR€€OBIT+6_^1_%ADD- BITMSK+6_^1_%STA- ESTAT1,I_^1_%RAO RW_^1_%JMP* MOTSTR_'START MOTION_^1_%SPC 3_^1BKSP_!RTJ* LPCHK_^1_%ENQ 1_,NOT LP SO BACKSPACE RECORD_^1_%JMP* MOTSTR_'START BACKSPACE RECORD_^1_%SPC 3_^1REWUN ENA 0_^1_%STA* MOTITR_'0 INTO ITERATIONS_^1_%STA- ETEMP2,I_$CONTROL TO 0 TO TERMINATE_^1_%STA* DENCOD_'CLEAR POSSIBLE DENSITY SELECTION_^1_%LDA- ESTAT2,I_^1_%AND- ZROBIT€€_'CLEAR READY_^1_%STA- ESTAT2,I_^1_%JMP* MOTSTR_^1_%SPC 3_^1FLBK_!RTJ* LPCHK_(CHECK LOAD POINT_^1_%JMP* MOTSTR_'START FILE BACKWARD SEARCH_^1_%SPC 3_^1ADVR_!LDA =XDUMBUF_$FWA-1 OF DUMMY, ZERO LENGTH BUFFER_^1_%ENQ 2_^1_%RTJ OUT_*LOAD FWA-1_^1_%ENQ 7_^1_%JMP* MOTSTR_^1_%SPC 2_^1DUMBUF ADC *+1_^1_%EJT_]_^1MOTITR NUM 0_,NUMBER OF ITERATIONS ON MOTION REQUEST_^1NXTMOT LDA- ETE€€MP2,I_$PICK UP MOTION REQUEST CODE_^1_%SAM NZITR_(SKIP IF REQUEST ITERATIVE_^1_%ALS 4_^1_%AND- HIHBTS+4_^1_%STA- ETEMP2,I_^1_%AND- HIHBTS+12_#($F000)_^1_%SAN MOTNXT_'SKIP IF NOT END OF COMMANDS_^1_%STA* MOTITR_'ZERO TO ITERATIONS_^1_%JMP* DONEM_^1MOTNXT JMP DOMOT_(EXECUTE NEXT MOTION_^1NZITR LDA* MOTITR_'PICK UP ITERATIONS_^1_%SAZ MOTEXT_'SKIP IF DONE_^1_%INA -1_^1_%STA* MOT€€ITR_^1_%SAZ MOTEXT_'SKIP IF DONE_^1_%JMP DOMOT_(MORE ITERATIONS THIS MOTION_^1MOTEXT JMP* NODEN_(DONE ALL ITERATIONS THIS MOTION_^1_%EJT_]_^1RINGCK NUM 0_^1_%LDA- ESTAT2,I_^1_%SAP NORING_^1_%JMP* (RINGCK)_^1NORING ENA 13_^1_%JMP FAILED_^1_%SPC 3_^1LPCHK NUM 0_^1_%LDA- ESTAT2,I_^1_%AND- BITMSK+10_^1_%SAN LODYES_^1_%JMP* (LPCHK)_^1LODYES ENA 0_,YES ON LOAD POINT_^1_%STA* M€€OTITR_'ZERO ITERATIONS_^1_%JMP* NXTMOT_'NEXT MOTION_^1_%EJT_]_^1*_]_^1*_*THIS SECTION OF CODE PROVIDES FOR SPECIAL_^1*_*HANDLING OF 7-TRACK TAPES. ALL BINARY I/O_^1*_*AND ASCII WRITES ARE PEFORMED IN AN_^1*_*UNBUFFERED MODE. THIS ALLOWS LONG RECORD_^1*_*I/O ON 7-TRACK DRIVES_^1*_]_^1_%SPC 2_^1IS7TRK STQ* LWA1_^1_%STA* FWA1_^1_%STA* CURR_^1_%LDA- EWES,I_^1_%INA -1_^1_%STA* QIODR€€T_'EQUIP FOR I/O_^1_%CLR Q_^1_%LDA FUNCT1_^1_%IIN 0_^1_%RTJ OUT_^1_%LDA PRITYC_^1_%INA -2_^1_%SAZ ASCWRT_^1_%LDQ MOTIDX_^1_%JMP* GOBIN,Q_^1GOBIN JMP* BINR01_^1_%JMP* BINW01_^1_%EJT_]_^1*_]_^1*_$WITE ASCII DATA IN UNBUFFERED MODE_^1*_]_^1_%SPC 1_^1ASCWRT RTJ* GETWRD_'GET NEXT DATA_^1_%SAZ STLBFR_'GOT DATA_^1_%JMP* BADSAT_'END OF DATA_^1STLBFR RTJ A2BCD_(CONVERT TO BCD_^1€€_%STA* ASCDAT_^1_%LDQ* QIODRT_'Q FOR DATA OUT_^1DOOUT LDA* ASCDAT_'GET DATA_^1_%OUT RJTCHK-*_$OUTPUT DATA_^1_%JMP* ASCWRT_'LOOP IT_^1RJTCHK JMP* INTRJT_'INT REJECT_^1_%INQ 1_,EXTERNAL REJECT, Q FOR STATUS_^1_%NOP 0_^1_%INP -1_+READ STATUS_^1_%INQ -1_+RESTORE I/O CODE FOR DATA XFER_^1_%AND =N$20_(MASK ALARM_^1_%SAN WRTALM_^1_%JMP* DOOUT_(OUTPUT AGAIN_^1WRTALM JMP* BADSAT_^1A€€SCDAT NUM 0_,ASCII / BCD DATA_^1*_]_^1*_*BINARY WRITE ROUTINE_^1*_]_^1_%SPC 2_^1BINW01 RTJ* GETWRD_^1_%SAZ BINW02_'MORE DATA_^1_%JMP* BINW05_^1BINW02 LLS 6_,FIRST BYTE_.6_^1_%ALS 2_,SPACE 2 BITS_^1_%LLS 6_,NEXT BYTE_/6_^1_%QRS 2_^1_%STQ* LEFOVR_'4 BITS LEFT_-4_^1_%RTJ* BINWRT_'WRITE BINARY - 2 BYTES_^1_%RTJ* GETWRD_^1_%SAZ BINW03_^1_%JMP* BINW05_^1BINW03 LLS 2_,2 BITS_22_^€€1_%ALS 2_,SPACE 2 BITS_^1_%LLS 6_E6_^1_%EOR* LEFOVR_'COMBINE WITH 4 BITS_^1_%STQ* LEFOVR_'SAVE 8 BITS_^1_%RTJ* BINWRT_'WRITE BINARY - 2 BYTES_^1_%CLR A_^1_%LDQ* LEFOVR_^1_%LLS 6_E6_^1_%ALS 2_,SPACE 2 BIT_^1_%LLS 6_,2 BIT_32_^1_%STA* LEFOVR_^1_%RTJ* GETWRD_'GET NEXT DATA_^1_%SAZ BINW04_'MORE_^1_%JMP* BINW05_^1BINW04 LLS 4_E4_^1_%EOR* LEFOVR_'COMBINE_^1_%STQ* LEFOVR_^1_%RTJ* €€BINWRT_'WRITE 2 BYTES_^1_%CLR A_^1_%LDQ* LEFOVR_'GET 12 REMAINING BITS_^1_%LLS 6_E6_^1_%ALS 2_,SPACE 2 BITS_^1_%LLS 6_E6_^1_%RTJ* BINWRT_'WRITE 2 BYTES_^1_%JMP* BINW01_'CONTINUE LOOP TIL DONE_^1_%SPC 1_^1BINW05 LDA* LEFOVR_'LAST BINARY DATA_^1_%RTJ* BINWRT_'OUTPUT_^1_%JMP* BADSAT_'EOP NOW, WAIT INTERRUPT_^1_%SPC 2_^1*_]_^1*_*CHECK FINI - GET NEXT DATA_^1*_]_^1_%SPC 1_^1GETW€€RD NUM 0_,ENTRY/LINK_^1_%LDA* LWA1_^1_%EOR* CURR_)CHECK CURR = LWA_^1_%LDQ* (CURR)_'GET DATA_^1_%SAZ NOMORD_'CURR = LWA, END DATA_^1_%RAO* CURR_)BUMP CURRENT POINTER_^1_%CLR A_,SET MORE DATA CONDITION_^1_%JMP* (GETWRD)_$RETURN_^1NOMORD SET A_,SET NO DATA CONDITION_^1_%JMP* (GETWRD)_$RETURN_^1_%SPC 1_^1*_]_^1*_*WORKING PARAMETERS_^1*_]_^1LEFOVR NUM 0_,PARTIAL LEFTOVER, BINARY_€€^1LEF2_!NUM 0_,TEMPY STORAGE_^1SAVEDA NUM 0_,SAVED A WHEN REJECT OCCURS_^1QIODRT NUM 0_,WILL CONTAIN EQUIP CODE, I/O DIRECT_^1CURR_!NUM 0_^1FWA1_!NUM 0_^1LWA1_!NUM 0_^1_%SPC 1_^1*_]_^1*_*WRITE DATA IN - A - REGISTER_^1*_]_^1BINWRT NUM 0_,ENTRY / LINK_^1_%LDQ* QIODRT_'DIRECT I/O Q CODE_^1OUTAGN OUT WRTRJT-*_^1_%JMP* (BINWRT)_$NO REJECT, DATA OUT, RETURN_^1INTRJT JMP INRJT_€€(GO INTERNAL REJECT_^1WRTRJT JMP* INTRJT_'INTERNAL REJECT_^1_%STA* SAVEDA_^1_%INQ 1_^1_%NOP 0_^1_%INP -1_+SHOULD BE NO REJECTS_^1_%INQ -1_^1_%AND =N$30_^1_%SAN BADSAT_^1_%LDA* SAVEDA_'RE_^1_%JMP* OUTAGN_^1BADSAT RTJ+ RLAQ_)RELEASE AQ CHANNEL_^1_%STQ- I_,RESTORE I REGISTER_^1_%ENA 1_^1_%STA- EDCLK,I_^1_%JMP- (DISP)_^1_%SPC 2_^1*_]_^1*_*BINARY READ ROUTINE_^1*_]_^1_%SPC 1_^1€€BINR01 RTJ* INPDAT_'READ NEXT FRAME, DATA IN Q_^1BINR02 LRS 6_,DATA PRESENT, BEGIN WORD 1 CYCLE_^1_%QRS 2_^1_%LRS 6_^1_%STA* LEFOVR_'STORE 12 BITS OF WORD 1_^1_%RTJ* INPDAT_'GET NEXT FRAME_^1BINR03 LRS 6_,DATA PRESENT_^1_%QRS 2_^1_%LRS 2_^1_%STA* LEF2_)SAVE WORD PARTIAL WORD 2 - IF ANY._^1_%TRQ A_^1_%EOR* LEFOVR_'COMBINE WITH PARTIAL WORD 1_^1_%RTJ* STRDAT_'STORE DATA - NO R€€ETURN IF DONE_^1_%RTJ* INPDAT_'READ NEXT FRAME_^1BINR04 LLS 8_^1_%QLS 2_^1_%LLS 2_^1_%STQ* LEFOVR_'SAVE PARTIAL WORD 3 - IF ANY_^1_%EOR* LEF2_)COMBINE WORD 2_^1_%RTJ* STRDAT_'STORE WORD 2_^1_%RTJ* INPDAT_'READ NEXT FRAME_^1BINR05 LLS 8_^1_%QLS 2_^1_%LLS 6_^1_%EOR* LEFOVR_'COMBINE WORD 3_^1_%RTJ* STRDAT_'STORE WORD 3_^1_%JMP* BINR01_'CONTINUE LOOP TIL DONE_^1_%SPC 1_^1*_]_^1*€€_*INPUT DATA, RETURN WITH DATA IN -Q-_^1*_*IF PRESENT. OTHERWISE DONE_^1*_]_^1_%SPC 1_^1INPDAT NUM 0_,ENTRY TO READ A FRAME_^1_%LDQ* QIODRT_'GET EQUIP CODE_^1INAGAN INP READRJ-*_^1_%TRA Q_^1_%CLR A_^1_%JMP* (INPDAT)_^1READRJ JMP* INTRJT_'INTERNAL REJECT, FATAL_^1_%INQ 1_,EXT. REJECT_^1_%NOP 0_^1_%INP -1_+SHOULD NEVER HANG_^1_%AND =N$30_(MASK ALARM EOP_^1_%INQ -1_+RESTORE€€ I/O EQUIP CODE_^1_%SAN BADS1_(BAD STATUS_^1_%JMP* INAGAN_^1BADS1 JMP* BADSAT_'ALL DONE THIS BLOCK_^1_%SPC 1_^1*_]_^1*_*STORE BINARY DATA_^1*_*CHECK POINTERS FOR DONE_^1*_*NO RETURN IF DONE_^1*_]_^1_%SPC 1_^1STRDAT NUM 0_,ENTRY_^1_%STA* (CURR)_^1_%RAO* CURR_)BUMP CURRENT LOC_^1_%LDA* CURR_^1_%EOR* LWA1_^1_%SAZ DONEIN_^1_%JMP* (STRDAT)_^1DONEIN JMP* BADSAT_'BUFFER FULL_^1_%EJT€€_]_^1_%EQU H00FF($A),HFF00($1A)_^1*_$BCD-ASCII BUFFER CODE CONVERSION ROUTINES_^1************************************************************************_^1*_]_'*_^1*_*ASCII TO BCD CONVERSION SUBROUTINE_8*_^1*_]_'*_^1*_]_^1*_$SPECIAL VERSION FOR SPEED CONVERSION OF (1) WORD_^1*_]_^1*_*THE FOLLOWING SUBROUTINE CONVERTS A BUFFER OF ASCII CODES *_^1*_*(TWO ASCII CHARACTERS PER WORD €€- BITS 0-6, 8-14) TO BCD_"*_^1*_*CODES (TWO BCD CHARACTERS PER WORD - BITS 0-5, 8-13). THE *_^1*_*ORIGINAL CODES ARE REPLACED BY THE CONVERTED CODES SO THAT *_^1*_*THE ORIGINAL ASCII BUFFER IS MODIFIED TO BE A BCD BUFFER. *_^1*_]_'*_^1*_*CALL_)RTJ A2BCD_B*_^1*_]_'*_^1*_*WITH_!(Q) = ASCII DATA TO BE CONVERTED TO BCD_^1*_]_'*_^1*_1(I)_!NOT AFFECTED BY SUBROUTINE_3*_^1*_$ON EXIT --€€ (A) = BCD DATA_^1************************************************************************_^1_%SPC 1_^1A2BCD 0_"0000_"ENTRY POINT TO ASCII TO BCD CONVERTION SUBROUTINE_^1_%STQ* BUFFER_'SAVE DATA_^1_%ENA $7F_^1_%LAQ Q_,MASK TO GET LOWER CHARACTER_^1_%INQ -$60_^1_%SQP SETSP1_'CHECK GREATER THAN $5F_^1_%INQ $40_*CHECK LESS THAN $20_^1_%SQP OKLIM1_^1SETSP1 ENQ 0_,OUT OF $20 €€- $5F, SET SPACE_^1OKLIM1 LDQ* TABLE,Q_%GET BCD CODE - ASCII CHAR IS INDEX_^1_%LAQ Q_,MASK TO GET BCD CODE (LOWER HALF OF WORD)_^1_%STQ* TEMP_)SAVE FIRT CODE_^1_%LDQ* BUFFER_'GET WORD_^1_%QLS 8_,SHIFT UPPER CHARACTER INTO POSITION_^1_%LAQ Q_,MASK TO GET CHARACTER_^1_%INQ -$60_)TEST GREATER THAN $5F_^1_%SQP SETSP2_^1_%INQ $40_*CHECK LESS THAN $20_^1_%SQP OKLIM2_^1SETSP2 ENQ €€0_^1OKLIM2 LDQ* TABLE,Q_%GET BCD CODE - ASCII CHAR IS INDEX_^1_%LAQ A_,CHAR TO A_^1_%ALS 8_,POSITION_^1_%ADD* TEMP_^1_%SPC 1_^1_%JMP* (A2BCD) EXIT FROM SUBROUTINE WITH BUFFER CONVERTED_^1_%SPC 5_^1BUFFER NUM 0_,ADDRESS OF BUFFER_^1SAVEI NUM 0_,TEMPORARY STORAGE OF I_^1TEMP_!NUM 0_,TEMPORARY STORAGE OF PARTIAL CONVERSION_^1_%EJT_]_^1******************************************€€******************************_^1*_]_'*_^1*_*BCD TO ASCII CONVERSION SUBROUTINE_8*_^1*_]_'*_^1*_*THE FOLLOWING SUBROUTINE CONVERTS A BUFFER OF BCD CODES_"*_^1*_*(TWO BCD CODES PER WORD - BITS 0-5, 8-13) TO ASCII CODES_!*_^1*_*(TWO ASCII CODES PER WORD - BITS 0-6, 8-14). THE ORIGINAL *_^1*_*CODES ARE REPLACED BY THE CONVERTED CODES SO THAT THE_$*_^1*_*ORIGINAL BCD BUFFER IS MODIFIE€€D TO BE AN ASCII BUFFER._#*_^1*_]_'*_^1*_*CALL_)RTJ BCD2A_B*_^1*_]_'*_^1*_*WITH_!(A) = ADDRESS OF FIRST WORD OF BUFFER_.*_^1*_1(Q) = NUMBER OF WORDS IN BUFFER_4*_^1*_]_'*_^1*_1(I)_!NOT AFFECTED_A*_^1************************************************************************_^1_%SPC 1_^1BCD2A 0_"0000_"ENTRY TO BCD TO ASCII CONVERSION SUBROUTINE_^1_%STA* BUFFER_'SAVE STARTING ADDRESS€€ OF BUFFER_^1_%LDA- I_^1_%STA* SAVEI_(SAVE CONTENTS OF I REGISTER_^1LOOPB LDA- H00FF_(GET MASK INTO A_^1_%INQ -1_+DECREMENT Q BY ONE_^1_%SQP CONVB-*-1_#CONTINUE IF Q IS POSITIVE_^1_%SPC 1_^1_%LDA* SAVEI_(DONE IF Q IS NEGATIVE - GET ORIGINAL I_^1_%STA- I_,RESTORE I_^1_%JMP* (BCD2A) EXIT FROM SUBROUTINE - BUFFER CONVERTED_^1_%SPC 1_^1CONVB STQ- I_,SET UP I AS INDEX TO BUFFER_^1€€_%LDQ* (BUFFER),Q_"GET WORD FROM BUFFER_^1_%LAQ Q_,MASK TO GET LOWER CHARACTER_^1_%LDQ* TABLE,Q_%GET ASCII CODE - USE BCD CODE AS INDEX_^1_%QLS 8_,SHIFT ASCII CODE TO LOWER HALF OF WORD_^1_%LAQ Q_,MASK TO GET LOWER CODE_^1_%STQ* TEMP_)SAVE FIRST CODE_^1_%LDQ* (BUFFER),I_"GET WORD FROM BUFFER_^1_%QLS 8_,SHIFT UPPER CHARACTER INTO POSITION_^1_%LAQ Q_,MASK TO GET CHARACTER_^1_%LD€€A* TABLE,Q_%GET ASCII CODE - USE BCD CODE AS INDEX_^1_%AND- HFF00_(MASK TO GET UPPER CODE_^1_%ADD* TEMP_)ADD LOWER CODE_^1_%STA* (BUFFER),I_"STORE CONVERTED CODES BACK INTO BUFFER_^1_%SPC 1_^1_%LDQ- I_,GET I_^1_%JMP* LOOPB_(LOOP BACK FOR NEXT WORD IN BUFFER_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1* THE FOLLOWING TABLE IS USED€€ TO CONVERT CODES FROM_3*_^1*_#1. TELETYPE ASCII TO EXTERNAL BCD_=*_^1*_#2. EXTERNAL BCD TO TELETYPE ASCII_=*_^1_%SPC 2_^1*_8BCD TO ASCII_"**_"ASCII TO BCD_^1TABLE NUM $2610_(00_!%_!26_%**_"20_!SPACE 10_^1_%NUM $312A_(01_!1_!31_%**_"21_#!_!2A_^1_%NUM $320F_(02_!2_!32_%**_"22_#"_!0F_^1_%NUM $333F_(03_!3_!33_%**_"23_##_!3F_^1_%NUM $342B_(04_!4_!34_%**_"24_#$_!2B_^1_%NU€€M $351D_(05_!5_!35_%**_"25_#%_!1D_^1_%NUM $361D_(06_!6_!36_%**_"26_#%_!1D_^1_%NUM $370C_(07_!7_!37_%**_"27_#'_!0C_^1_%NUM $381C_(08_!8_!38_%**_"28_#(_!1C_^1_%NUM $393C_(09_!9_!39_%**_"29_#)_!3C_^1_%NUM $302C_(0A_!0_!30_%**_"2A_#*_!2C_^1_%NUM $3D30_(0B_!=_!30_%**_"2B_#+_!30_^1_%NUM $271B_(0C_!'_!27_%**_"2C_#,_!1B_^1_%NUM $3A20_(0D_!:_!3A_%**_"2D_#-_!20_^1_%NUM $3E3B_(0E_!>€€_!3E_%**_"2E_#._!3B_^1_%NUM $2211_(0F_!?_!22_%**_"2F_#/_!11_^1_%NUM $200A_(10 SPACE 20_%**_"30_#0_!0A_^1_%NUM $2F01_(11_!/_!2F_%**_"31_#1_!01_^1_%NUM $5302_(12_!S_!53_%**_"32_#2_!02_^1_%NUM $5403_(13_!T_!54_%**_"33_#3_!03_^1_%NUM $5504_(14_!U_!55_%**_"34_#4_!04_^1_%NUM $5605_(15_!V_!56_%**_"35_#5_!05_^1_%NUM $5706_(16_!W_!57_%**_"36_#6_!06_^1_%NUM $5807_(17_!X_!58_%**_"37_€€#7_!07_^1_%NUM $5908_(18_!Y_!59_%**_"38_#8_!08_^1_%NUM $5A09_(19_!Z_!5A_%**_"39_#9_!09_^1_%NUM $5F0D_(1A_!-_!5F_%**_"3A_#:_!0D_^1_%NUM $2C2E_(1B_!,_!2C_%**_"3B_#;_!2E_^1_%NUM $283E_(1C_!(_!28_%**_"3C_#<_!3E_^1_%NUM $250B_(1D_!%_!25_%**_"3D_#=_!0B_^1_%NUM $5C0E_(1E_!/_!5C_%**_"3E_#>_!0E_^1_%NUM $403A_(1F_!@_!40_%**_"3F_#?_!3A_^1_%NUM $2D1F_(20_!-_!2D_%**_"40_#@_!1F_^1_%NUM €€ $4A31_(21_!J_!4A_%**_"41_#A_!31_^1_%NUM $4B32_(22_!K_!4B_%**_"42_#B_!32_^1_%NUM $4C33_(23_!L_!4C_%**_"43_#C_!33_^1_%NUM $4D34_(24_!M_!4D_%**_"44_#D_!34_^1_%NUM $4E35_(25_!N_!4E_%**_"45_#E_!35_^1_%NUM $4F36_(26_!O_!4F_%**_"46_#F_!36_^1_%NUM $5037_(27_!P_!50_%**_"47_#G_!37_^1_%NUM $5138_(28_!Q_!51_%**_"48_#H_!38_^1_%NUM $5239_(29_!R_!52_%**_"49_#I_!39_^1_%NUM $2121_(2A_!!_!€€21_%**_"4A_#J_!21_^1_%NUM $2422_(2B_!$_!24_%**_"4B_#K_!22_^1_%NUM $2A23_(2C_!*_!2A_%**_"4C_#L_!23_^1_%NUM $5D24_(2D_!]_!5D_%**_"4D_#M_!24_^1_%NUM $3B25_(2E_!;_!3B_%**_"4E_#N_!25_^1_%NUM $5E26_(2F_%5E_%**_"4F_#O_!26_^1_%NUM $2B27_(30_!+_!2B_%**_"50_#P_!27_^1_%NUM $4128_(31_!A_!41_%**_"51_#Q_!28_^1_%NUM $4229_(32_!B_!42_%**_"52_#R_!29_^1_%NUM $4312_(33_!C_!43_%**_"53_#S_!12_€€^1_%NUM $4413_(34_!D_!44_%**_"54_#T_!13_^1_%NUM $4514_(35_!E_!45_%**_"55_#U_!14_^1_%NUM $4615_(36_!F_!46_%**_"56_#V_!15_^1_%NUM $4716_(37_!G_!47_%**_"57_#W_!16_^1_%NUM $4817_(38_!H_!48_%**_"58_#X_!17_^1_%NUM $4918_(39_!I_!49_%**_"59_#Y_!18_^1_%NUM $3F19_(3A_!?_!3F_%**_"5A_#Z_!19_^1_%NUM $2E3D_(3B_%2E_%**_"5B_#[_!3D_^1_%NUM $291E_(3C_!)_!29_%**_"5C_#/_!1E_^1_%NUM $5B2D_(3D€z_![_!5B_%**_"5D_#]_!2D_^1_%NUM $3C2F_(3E_!<_!3C_%**_"5E_(2F_^1_%NUM $231A_(3F_!#_!23_%**_"5F_(1A_^1_%EJT_]_^1_%END_]_^__zPDSKCDR CSY/ B39 P€1_%NAM DSKCDR_'DECK-ID B39 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_(ENT_%NUMWDS_^1**_)COSY DECK NAME ** DSKCDR **_^1_(ENT_%CDRIVE_^1_%SPC 1_^1_%SPC 1_^1CDRIVE_!NUM_%$FFFF_^1_%NOP 0_)SELECTIVE STOP DEBUG CELL_^1_%STA FSTWRD_'SAVE 1ST WORD ADDRESS_€€^1_%STQ NUMWDS_'SAVE NO. OF WORDS_^1_%LDA WRSET_(IF TYPEWRITER OUTPUT-_^1_%STA* IOSW+1_^1_%LDA WRMODE_^1_%STA MODSET_)2. SET MODSET TO $100_^1_%SQN SETWR-*-1 SKIP IF WRITE OPERATION_^1_%LDA RDMODE_^1_%STA MODSET_)1. SET MODSET TO $200_^1_%LDA* RDSET_^1_%STA* IOSW+1_^1_%JMP LIGHT_(TURN ON BREAKSWITH LIGHT_^1SETWR LDQ* QCI_^1_%LDA* WRMODE_^1_%OUT -1_(SET TYPEWRITER TO WRIT€€E MODE_^1RUNCHK LDQ* QCI_^1_%INP -1_(TAKE INITIAL STATUS_^1_%ALS 14_+CHECK BUSY BIT_^1_%SAP START-*-1_#SKIP IF NOT BUSY_^1_%JMP* RUNCHK_^1START LDQ* QCD_^1_%ENA $D_(SEND CARRIAGE RETURN AND_^1_%OUT -1_+DELAY FOR HARD COPY PRINTER_^1_%OUT -1_^1_%OUT -1_*AND LINE FEED_^1_%ENA $A_^1_%OUT -1_^1_%LDA* MODSET_^1_%LDQ* QCI_^1CSTART OUT -2_(INSTRUCT DEVICE TO BEGIN OPTN._^1RESTR€€T LDA* PROSET_#SET ERROR SWITCH_^1_%STA* ERSW+1_^1_%LDA* FSTWRD_#SET ADDRESS COUNTER TO_^1_(STA*_$WRDCNT_^1_%LDA* NUMWDS_#SET CHARACTER COUNTER TO_^1_%ALS 1_+-(NUMWDS)*2_^1_%TCA A_^1_(STA*_$COUNT1_^1_%CLR_!A_^1_%STA* FLAG_^1IOSW_!NUM $1800,$FFFF_^1FLAG_!NUM_!0_^1WRITE ENQ 0_^1_%LDA* FLAG_^1_%SAN_!CLRFLG_^1_%RAO* FLAG_^1_%LDQ* WRDCNT_^1_%LDA* (ZERO),Q_J72*1701_^1_%ARS_!8_^1€€_%JMP* OUTPUT_^1CLRFLG CLR_!A_^1_%STA* FLAG_^1_%LDQ* WRDCNT_^1_%LDA* (ZERO),Q_J72*1701_^1_%AND* MASK3_M72*1701_^1_%RAO* WRDCNT_^1OUTPUT TRA Q_^1_%AND =N$7F_(MASK CHARACTER_^1_%LLS 16_^1_%INQ -$D_*TEST FOR CARRIAGE RETURN_^1_%SQN OUT1_^1_%LDQ* QCD_^1_%OUT -1_+DELAY FOR CARRIAGE RETURN_^1_%OUT -1_^1OUT1_!LDQ* QCD_^1OUTCOM OUT -1_(XFER CHARACTER OF OUTPUT_^1_(RAO*_$COUNT1_€€^1_(LDA*_$COUNT1_^1_%SAZ 1_)TEST FOR AND LOOP IF FEWER_^1_%JMP* WRITE_'THAN 120 CHRS TRANSFERRED_^1_%JMP* COMXIT_#EXIT IF (COUNT1) = 0_^1COMERR ENA 0_^1_(JMP*_$(CDRIVE)_^1COMXIT ENA -0_^1_(JMP*_$(CDRIVE)_^1READ_!LDQ* QCD_^1_%ENA 0_^1INPCOM INP -1_(READ CHARACTER_^1_%AND =N$7F_(MASK 7 BITS_6**MSOS 4.1**_^1_%INA -$60_)TEST LOWER CASE_2**MSOS 4.1**_^1_%SAP 1_,LOWER CASE, MAKE €€UPPER CASE._$**MSOS 4.1**_^1_%INA $20_*UPPER CASE -OR- NUMBER_+**MSOS 4.1**_^1_%INA $40_L**MSOS 4.1**_^1_(STA*_$INPREL_(AND STORE CHARACTER_^1ERSW_!NUM $1800,$FFFF_^1CHRPRO INA -$A_^1_%SAN 1_)TEST FOR AND XFER IF_^1_%JMP* READ_(CHARACTER IS LINE FEED_^1_%INA -3_^1_%SAN 1_)TEST FOR AND XFER IF_^1_%JMP* COMXIT_%CHARACTER IS CARRIAGE RETURN_^1_%INA -$72_^1_%SAN 1_)TEST FOR AN€€D XFER IF_^1_%JMP* DELETE_%CHARACTER IS DELETE_^1_%LDQ* WRDCNT_%ADDRESS OF BUFFER_^1_%LDA* FLAG_^1_%SAZ_!LFTCHR_%SKIP IF LEFT CHARACTER_^1_%CLR_!A_^1_%STA* FLAG_^1_%LDA* INPREL_^1_%EOR* MASK4_'STORE RIGHT CHARACTER_^1_%AND* (ZERO),Q_J72*1701_^1_%RAO* WRDCNT_^1CHRSTR STA* (ZERO),Q_J72*1701_^1_%JMP* READ_^1LFTCHR RAO* FLAG_(SET FLAG_^1_%LDA* INPREL_%STORE LEFT CHARACTER_^1_%€€ALS_!8_^1_%EOR* MASK3_^1_%JMP* CHRSTR_^1DELETE LDQ* ERRSET_^1_%STQ* ERSW+1_^1ERSLEW INA -$D_^1_%SAZ 1_)TEST FOR AND XFER IF_^1_%JMP* READ_(CARRIAGE RETURN NOT RECEIVED_^1_%LDA* NUMWDS_^1_%TCA Q_^1_%ADD* FSTWRD_^1_%STA* CLEAR+1_^1_%ENA 0_^1CLEAR STA+ ($7FFF)_"CLEAR INPUT BUFFER_^1_%INQ 1_^1_%SQZ 1_^1_%JMP* CLEAR_^1_%JMP* RESTRT_#XFER TO REPEAT OPERATION_^1FSTWRD NUM $FFFF_€€^1NUMWDS NUM $FFFF_^1PROSET_!ADC_%CHRPRO-ERSW-1_^1ERRSET_!ADC_%ERSLEW-ERSW-1_^1RDSET_"ADC_%READ-IOSW-1_^1WRSET_"ADC_%WRITE-IOSW-1_^1QCD_"NUM $90_^1QCI_"NUM $91_^1MODSET NUM -0_^1WRMODE NUM $100_^1RDMODE NUM $200_^1LIGHT LDA* WRMODE_#TYPEWRITER TO WRITE MODE_^1_%LDQ* QCI_^1_%OUT -1_^1_%ENA 0_^1_%LDQ* QCD_^1_%OUT -1_^1_%OUT -1_^1_%JMP RUNCHK_^1WRDCNT_!NUM_%0_^1COUNT1_!NUM€^_%0_^1INPREL_!NUM_%0_^1MASK4_"NUM_%$FF00_^1MASK3_"NUM_%$FF_^1ZERO_!NUM 0_Q72*1701_^1_(END_^__^PDSKDHX CSY/ B40 P€1_%NAM DSKDHX_'DECK-ID B40 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_(ENT_%DCODHX_^1_(EQU_%SPACE($20)_^1DCODHX_!ADC_%-0_^1_(STQ*_$C1_^1_(STA*_$C3_^1_(LLS_%8_^1_(STQ*_$C2_^1_(STA*_$C4_^1_(ENQ_%0_^1_(STQ*_$KNTR_^1_(STQ*_$NUM_^1DHX100_!LDA*_$C1,Q_^1_(ARS_%8_^1_(SAZ_€€%1_^1_(SAP_%DHX120-*-1_^1_(JMP*_$DHXEND_^1DHX120_!INA_%-SPACE_^1_(SAN_%1_^1_(JMP*_$DHX200_^1_(INA_%SPACE_^1_(STA*_$TEMP1_^1_(ENQ_%$F_^1DHX140_!LDA*_$TABLE,Q_^1_(EOR*_$TEMP1_^1_(SAN_%1_^1_(JMP*_$DHX160_^1_(INQ_%-1_^1_(SQM_%1_^1_(JMP*_$DHX140_^1DHXERR_!ENA_%-0_^1_(JMP*_$(DCODHX)_^1DHX160_!LDA*_$NUM_^1_(ALS_%4_^1_(AAQ_%A_^1_(STA*_$NUM_^1DHX200_!RAO*_$KNTR_^1_(LDQ*_$KNTR_^1_(LDA_%=N-4,€€Q_^1_(SAP_%DHXEND-*-1_^1_(JMP*_$DHX100_^1DHXEND_!LDA*_$NUM_^1_(RAO*_$DCODHX_^1_(JMP*_$(DCODHX)_^1_(BSS_%C1,C2,C3,C4,KNTR,NUM_^1_(BSS_%TEMP1_^1_(SPC_%2_^1_(ENT_%ENCDHX_^1ENCDHX_!ADC_%-0_^1_(ENQ_%0_^1_(LLS_%4_^1_(LDQ*_$TABLE,Q_^1_(QLS_%8_^1_(STQ*_$C1_^1_(ENQ_%0_^1_(LLS_%4_^1_(LDQ*_$TABLE,Q_^1_(ADQ*_$C1_^1_(STQ*_$C1_^1_(ENQ_%0_^1_(LLS_%4_^1_(LDQ*_$TABLE,Q_^1_(QLS_%8_^1_(LLS_%8_^1_(QRS€€_%4_^1_(ALS_%8_^1_(EOR*_$TABLE,Q_^1_(LDQ*_$C1_^1_(JMP*_$(ENCDHX)_^1TABLE_"NUM_%$30,$31,$32,$33,$34,$35_^1_(NUM_%$36,$37,$38,$39_^1_(NUM_%$41,$42,$43,$44,$45,$46_^1_(ENT_%DCODEC_^1DCODEC_!ADC_%-0_^1_(STQ*_$CH1_^1_(STA*_$CH3_^1_(LLS_%8_^1_(STQ*_$CH2_^1_(STA*_$CH4_^1_(ENQ_%0_^1_(STQ*_$VAL_^1_(STQ*_$DKT_^1DDC210_!LDA*_$CH1,Q_^1_(ARS_%8_^1_(SAZ_%1_^1_(SAP_%1_^1_(JMP*_$DDC250_^1_(STA*_$C€€H1_^1_(INA_%-SPACE_^1_(SAN_%1_^1_(JMP*_$DDC230_^1_(ENA_%10_^1_(MUI*_$VAL_^1_(STA*_$VAL_^1_(LDA*_$CH1_^1_(INA_%-$30_^1_(SAP_%1_^1_(JMP*_$DDCERR_^1_(TRA_%Q_^1_(ADD*_$VAL_^1_(STA*_$VAL_^1_(INQ_%-10_^1_(SQM_%DDC230-*-1_^1DDCERR_!ENA_%-0_^1_(JMP*_$(DCODEC)_^1DDC230_!RAO*_$DKT_^1_(LDQ*_$DKT_^1_(LDA_%=N-4,Q_^1_(SAP_%DDC250-*-1_^1_(JMP*_$DDC210_^1DDC250_!LDA*_$VAL_^1_(RAO*_$DCODEC_^1_(JMP*€€_$(DCODEC)_^1_(BSS_%CH1,CH2,CH3,CH4_^1_(BSS_%VAL,DKT_^1_(ENT_%ENCDEC_^1ENCDEC_!ADC_%-0_^1_(SAM_%EDCERR-*-1_^1_(STA*_$VAL_^1_(SUB*_$MAXDEC_^1_(SAM_%EDC200-*-1_^1EDCERR_!LDA_%=A**_^1_(TRA_%Q_^1_(JMP*_$(ENCDEC)_^1EDC200_!LDA_%=A00_^1_(STA*_$CH1_^1_(STA*_$CH2_^1_(LDA*_$VAL_^1_(ENQ_%0_^1_(DVI*_$TEN_^1_(ADQ*_$CH2_^1_(STQ*_$CH2_^1_(ENQ_%0_^1_(DVI*_$TEN_^1_(QLS_%8_^1_(ADQ*_$CH2_^1_(STQ*_$C€H2_^1_(ENQ_%0_^1_(DVI*_$TEN_^1_(ADQ*_$CH1_^1_(ALS_%8_^1_(EAQ_%Q_^1_(LDA*_$CH2_^1_(JMP*_$(ENCDEC)_^1MAXDEC_!NUM_%10000_^1TEN_$NUM_%10_^1_(END_^__PDSKMMD CSY/ B41 P€1_%NAM DSKMMD_'DECK-ID B41 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_]_^1*_!********************************************************************_^1*_#THE FOLLOWING PARAMETERS MUST BE SUPPLIED._^1_%EQU DEVN(3)_"PHYSICAL DEVICE NUMBER_^1_%EQU UNIT(0)_"€€DISK PACK RELATIVE TO CONTROLLER_^1_(EQU WPS(3072)_^1_(EQU_%HILOC($7FFF)_^1*_!********************************************************************_^1_(ENT_%MDRIVE_^1_(ENT_%GENFC_^1_%EXT MSIZV4_'MAX CORE SIZE THIS SYSTEM_^1*_]_^1MDRIVE_!ADC_%0_^1_%NOP 0_)SELECTIVE STOP DEBUG CELL_^1_%STA* FWD_'FIRST WORD ADDRESS OF BUFFER_^1_%ENA 3_,READ CODE_8**MSOS 4.1**_^1_%SQP MDR20_(+ FOR €€READ, - WRITE_.**MSOS 4.1**_^1_%ENA 2_,WRITE CODE_7**MSOS 4.1**_^1_%TCQ Q_N**MSOS 4.1**_^1MDR20 EQU MDR20(*)_G**MSOS 4.1**_^1_%STA* K_)K=2 FOR WRITE, K=3 FOR READ_^1_%LDA* FWD_'ADDR OF STORAGE BUFFER_^1_%AAQ A_+PLUS NBR WDS TO BE MOVED_^1_%STA* LWD_)TO LAST WORD ADDR_^1*_!********************************************************************_^1*_#COMPUTE SEEK FUNCTION (NR)_^1*_€€!********************************************************************_^1_%CLR Q_^1_%STQ* M_)SEEK TEST SWITCH_^1_%STQ* L_)SEEK SAVE_^1_%STQ* J_)CONNECT COUNT_^1_%LDA- I_)MASS STORAGE SECTOR NUMBER_^1_%DVI =N160_'DIVIDED BY 160_^1_%ALS 8_+TO BITS (15-8)_^1_%AAQ A_)SC/160 TO (15-8), R TO (7-0)_^1_%STA* NR_(SEEK ADDR COMPLETE_^1*_!***************************************************€€*****************_^1*_#CONNECT THE DEVICE_^1*_!********************************************************************_^1MDR50 LDA* CONFC_$CONNECT FUNCTION_^1_%LDQ* GENFC_$GENERATING FUNCTION_^1_%NOP 0_^1_%OUT -1_(CONNECT MASS STORAGE DEVICE_^1*_!********************************************************************_^1*_#SETUP BUFFER FOR TRANSFER_^1*_!********************************€€************************************_^1MDR65 LDA* FWD_*ADDR OF WORD OF BUFFER_^1_%SAZ MDR68_(ZERO SPECIAL CASE_^1_%INA -1_^1_%JMP* MDR69_^1MDR68 EQU MDR68(*)_^1_%SAN MDR70-*-1 ZERO IMPLIES SPECIAL CASE_^1_%LDQ* AHILOC_'GET MAX MEMORY SIZE_^1_%LDA =N$7FFF_%LOWER BANK ONLY_^1_%SQP MDR69_^1_%LDA =N$FFFF_%BOTH BANKS_^1MDR69 EQU MDR69(*)_^1_%STA* FWD_)TO FWD AS FIRST WD -1_^€€1*_81 CARD DELETED_^1_%RTJ* SAVE_%SAVE LAST WD ADDR IN FIRST WD-1_^1_%JMP* MDR80_^1MDR70 RTJ* SAVE_%SAVE LAST WD ADDR IN FIRST WD-1_^1*_81 CARD DELETED_^1MDR80 STA* P_)ADDR -1 OF BUFFER_^1*_81 CARD DELETED_^1MDR85 ENA 7_^1_%STA* M_^1*_!********************************************************************_^1*_#INITIATE SEEK ADDRESS FUNCTION (NR)_^1*_!****************************€€****************************************_^1MDR90 CLR A_)ZERO TO_^1_%STA* J_+J_^1_%LDA* NR_(SEEK FUNCTION_^1_%LDQ* GENFC_$GENERATING FUNCTION_^1_%INQ 1_+PLUS 1 FOR LOAD FCN_^1_%OUT 2_^1_%JMP* MDR130_#DEVICE REPLY_^1_%JMP* MDR90_$DEVICE REJECT (INTERNAL)_^1_%JMP* MDR110_#DEVICE REJECT (EXTERNAL)_^1*_]_^1SAVE_!ADC 0_)SAVE LAST WD ADDR IN FIRST WD-1_^1_%LDA* (FWD)_(CONTENTS OF FIR€€ST WORD -1_^1_%STA* T_+TO LOCATION T_^1_%LDA* LWD_'ADDRESS OF LAST WD OF BUFFER_^1_%STA* (FWD)_(TO FIRST WD-1_^1_%LDA* FWD_'FETCH FIRST WORD ADDRESS_^1_%JMP* (SAVE)_#RETURN_^1*_!********************************************************************_^1*_#INITIATE DATA TRANSFER_!(DATFC)_^1*_!********************************************************************_^1MDR100 LDA* P_)ADDR-1 OF€€ BUFFER_^1_%LDQ* GENFC_$GENERATING FUNCTION_^1_%ADQ* K_)PLUS READ OR WRITE CODE_^1_%OUT 2_^1_%JMP* MDR125_#DEVICE REPLY_^1_%JMP* MDR100_#DEVICE REJECT (INTERNAL)_^1MDR110 LDA* T_)DEVICE REJECT (EXTERNAL)_^1_%STA* (FWD)_((FWD)-1_^1*_!********************************************************************_^1*_#ERROR EXIT_^1*_!************************************************************€€********_^1FAIL_!LDQ* GENFC_^1_%INP 1_,GET STATUS_^1_%NOP 0_^1_%TRA Q_,STATUS TO Q_^1_%CLR A_^1EXI_$JMP*_$(MDRIVE)_^1*_]_^1MDR125 LDA* M_^1_%STA* J_)CONNECT COUNT_^1_%RTJ* STATUS_^1_%LDA* J_)CONNECT COUNT_^1_%INA -6_^1_%SAN MDR126-*-1_^1_%JMP* MDR110_^1MDR126 INA 6_^1_%STA* M_^1_%JMP* MDR90_^1*_!********************************************************************_^1*_#PARAME€€TERS AND CONSTANTS_^1*_!********************************************************************_^1AHILOC ADC MSIZV4_'SYSTEM MAX MEMORY_^1Q_$ADC 0_)TEMPORARY STORAGE FOR Q_^1FWD_"ADC 0_)FIRST WORD ADDRESS_^1K_$ADC 0_)READ OR WRITE CODE_^1LWD_"ADC 0_)LAST WORD ADDRESS_^1NR_#ADC 0_)SEEK ADDRESS_^1GENFC ADC DEVN*128+1 GENERATING FUNCTION_^1CONFC ADC UNIT*512+256 CONNECT FUNCTION€€_^1J_$ADC 0_)CONNECT COUNT_^1T_$ADC 0_)CONTENTS OF (FWD) - 1_^1M_$ADC 0_)SEEK TEST SWITCH_^1L_$ADC 0_)SEEK SAVE_^1P_$ADC 0_)ADDR-1 OF BUFFER_^1*_!********************************************************************_^1*_#RUN STATUS AND TEST NBR OF CONNECTS_^1*_!********************************************************************_^1MDR130 RTJ* STATUS_"STATUS CHECK_^1_%LDA* J_(C€€ONNECT COUNT_^1_%SAZ MDR150-*-1_^1_%INA -6_^1_%SAZ MDR140-*-1_^1_%JMP* MDR90_#TRY TO CONNECT AGAIN_^1MDR140 JMP* MDR110_#ERROR EXIT_^1MDR150 LDA* M_^1_%SAZ MDR170-*-1_^1_%INA -7_^1_%SAN MDR160-*-1_^1_%STA* M_^1MDR160 JMP* MDR100_#ATTEMPT ANOTHER CONNECT_^1*_!********************************************************************_^1*_#INITIATE COMPARE FUNCTION_^1*_!**************€€******************************************************_^1MDR170 LDA* L_^1_%STA* J_^1MDR180 LDA* P_)ADDR-1 OF BUFFER_^1_%LDQ* GENFC_$GENERATING FUNCTION_^1_%INQ 4_+PLUS 4 FOR COMPARE_^1_%OUT 2_^1_%JMP* MDR190_#DEVICE REPLY_^1_%JMP* MDR180_#DEVICE REJECT (INTERNAL)_^1_%JMP* MDR110_#DEVICE REJECT (EXTERNAL)_^1MDR190 RTJ* STATUS_#TEST STATUS_^1_%LDA* J_^1_%SAN MDR210-*-1_^1_(ENA_%€€$40_^1_(AND*_$DIRSTA_^1_(SAZ_%MDR200-*-1_^1_(JMP*_$MDR110_(NO-COMPARE ERROR_^1MDR200 LDA* T_)RESTORE CONTENTS OF FWD-1_^1_%STA* (FWD)_(RESTORE FWD -1_^1_%SET A_)SET A_^1_%CLR Q_)CLR Q_^1_%JMP* EXI_'NORMAL EXIT_^1MDR210 INA -6_^1_%SAN MDR220-*-1_^1_%JMP* MDR110_#ERROR EXIT_^1MDR220 LDA* J_^1_%STA* L_^1_%JMP* MDR85_$INITIATE SEEK AGAIN_^1*_!***************************************€€*****************************_^1*_#ROUTINE FOR STATUS TESTING_^1*_!********************************************************************_^1STATUS ADC 0_^1STA5_!CLR A_)ZERO TO A_^1_%LDQ* GENFC_$GENERATING FUNCTION TO Q_^1_%INP 2_^1_%JMP* STATRS_#REPLY, GO TO TEST READY SET_^1_%JMP* STAEXI_#DEVICE REJECT (INTERNAL)_^1_%JMP* STAERR_#DEVICE REJECT (EXTERNAL)_^1STATRS STA* DIRSTA_#SAV€€E DIRECTOR STATUS_^1_(AND*_$MASK1_^1_%SAN STA10-*-1_^1_%JMP* STAERR_#EXIT IF DEVICE NOT READY_^1STA10 LDQ* DIRSTA_#DIRECTOR STATUS_^1_%LRS 4_^1_%SAP STA25-*-1 MINUS IMPLIES ON CYLINDER_^1STA20 LRS 1_)END OF OPERATION BIT_^1_%SAM STA30-*-1_^1STA25 JMP* STA5_%MINUS IMPLIES END OF OPERATION_^1STA30 LRS 1_^1_(SAM_%ALARM_^1_(ALS_%4_^1_(SAP_%STA40_)MINUS IMPLIES BUSY_^1_(JMP*_€€$STA5_^1STA40 CLR A_^1_%STA* J_^1_%JMP* (STATUS)_^1ALARM LDA* DIRSTA_#DIRECTOR STATUS_^1_%ARS 11_^1_%AND* B_)000B MASK_^1_%SAZ STA50-*-1_^1_%JMP* STAERR_#ADDR ERR, DEF TR, PROT FAULT_^1STA50 LDA* DIRSTA_#DIRECTOR STATUS_^1_(AND*_$BIT10_^1_%SAZ STAEXI-*-1_^1_%CLR A_)SEEK TO ZERO_^1_%LDQ* GENFC_$GENERATING FUNCTION_^1_%INQ 1_)SEEK FUNCTION_^1_%NOP 0_^1_%OUT -1_^1STAERR ENA€Ξ 6_)FATAL ERROR EXIT_^1_%STA* J_^1_%JMP* (STATUS)_^1STAEXI RAO* J_)ERROR EXIT_^1_%JMP* (STATUS)_^1*_]_^1DIRSTA ADC 0_)DIRECTOR STATUS_^1B_$NUM $B_(000B MASK_^1MASK1_"NUM_%1_^1BIT10_"NUM_%$400_^1_(END_^__ΞPDSKMTI CSY/ B42 P€1_%NAM DSKMTI_'DECK-ID B42 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_(EQU_%W(2048),E(128),SELECT(1024)_^1_(EQU_%ACTBIT(4096)_^1_(EQU_%DATBIT(8)_^1_(EQU_%EOPBIT(16)_^1_(EQU_%ALRBIT(32)_^1_(EQU_%PERBIT(256)_^1_(EQU_%EOFBIT(2048)_^1_(EQU_%BEGINP(2*E)_^1_(€€EQU_%BSPCOD(3*E)_^1_(EQU_%BEGOUT(1*E)_^1_(EQU_%MARKEF(5*E)_^1_%EQU REWCOD(8*E)_^1_(EQU_%BDCNR(2)_^1_(EQU_%CNTLR(3)_-EQ.3_^1_(EQU_%MTNR(0)_^1_(EQU_%MAXTRY(5)_^1*_'*_(*_-*_^1_(ENT_%IDRIVE_^1_(ENT_%MGREAD_^1_(ENT_%EWES_^1IDRIVE_!EQU_%IDRIVE(*)_^1MGREAD_!NUM_%-0_^1_%STA* BCWI_)BCWI CONTAINS FIRST WORD ADRS._^1_%STA SVBCWI_'SAVE ADDRESS FOR RETRY_^1_%SAN 2_^1_%JMP WRAPUP_^1*********€€*******************************_^1_%ENA 0_^1_%STA RTRYKT_^1_%JMP* RESTRT_^1********************_^1REJ1_!NOP 0_^1_%LDQ EWES_^1_%INP 1_,GET STATUS_^1_%NOP 0_^1_%TRA Q_,STATUS TO Q_^1_%SQN LABEL1_^1_%SET Q_^1_%ENA 0_^1LABEL1 JMP* (MGREAD)_^1********************_^1RESTRT LDQ EWES_^1_%LDA UNISEL_'UNIT 0,BINARY_^1_%INQ 1_^1_%OUT REJ1-*_^1********************_^1_%LDA =XBEGI€€NP_$READ MOTION_^1_%INQ -1_^1_%OUT REJ1-*_'START MOTION_^1_(JMP*_#DATA_^1**********_]_^1RDSTAT NUM 0_^1ERASER NUM 0_^1BCWI_!NUM 0_^1EQ_#NUM 0_^1**********_]_^1****************************************_^1DATA_!INQ -1_+READY FOR DATA INPUT_^1_%STQ* EQ_^1***_"***_"***_"***_"***_"***_^1R2_#CLR A_^1_%STA* ERASER_^1_%INP REJ2-*_'6 BITS,WORD 1_^1_%AND =N$3F_(MASK 6 BITS_6**MSOS 4€€.1**_^1MSK6_!EQU MSK6(*-1)_#MASK 6 BITS_6**MSOS 4.1**_^1_%ALS 10_^1_%STA* ERASER_^1R3_#CLR A_^1_%INP REJ3-*_'6 BITS,WORD 1_^1_%AND* MSK6_)MASK 6 BITS_6**MSOS 4.1**_^1_%ALS 4_^1_%EOR* ERASER_^1_%STA* ERASER_^1R4_#CLR A_^1_%INP REJ4-*_'4 BITS-WORD 1, 2 BITS WORD 2_^1_%AND* MSK6_)MASK 6 BITS_6**MSOS 4.1**_^1_%TRA Q_,SAVE 2 BITS OF 2ND WORD_^1_%ARS 2_^1_%EOR* ERASER_^1_%STA* €€(BCWI)_'WORD 1 FORMED AND STORED_^1***_"***_"***_"***_"***_"***_^1_%RAO* BCWI_^1_%CLR A_^1_%LRS 2_,2 BITS,WORD 2-FROM 'Q'_^1_%STA* ERASER_^1_%LDQ* EQ_^1R5_#CLR A_^1_%INP REJ5-*_'6 BITS,WORD 2_^1_%AND* MSK6_)MASK 6 BITS_6**MSOS 4.1**_^1_%ALS 8_^1_%EOR* ERASER_^1_%STA* ERASER_^1R6_#CLR A_^1_%INP REJ6-*_'6 BITS,WORD 2_^1_%AND* MSK6_)MASK 6 BITS_6**MSOS 4.1**_^1_%ALS 2_^1_%EOR*€€ ERASER_^1_%STA* ERASER_^1R7_#CLR A_^1_%INP REJ7-*_'2 BITS-WORD 2 , 4 BITS WORD 3_^1_%AND* MSK6_)MASK 6 BITS_6**MSOS 4.1**_^1_%TRA Q_^1_%ARS 4_^1_%EOR* ERASER_^1_%STA* (BCWI)_'WORD 2 FORMED AND STORED_^1***_"***_"***_"***_"***_"***_^1_%RAO* BCWI_^1_%CLR A_^1_%LRS 4_,4 BITS-WORD 3 FROM 'Q'_^1_%STA* ERASER_^1_%LDQ* EQ_^1R8_#CLR A_^1_%INP REJ8-*_'6 BITS,WORD 3_^1_%AND* MSK6_)M€€ASK 6 BITS_6**MSOS 4.1**_^1_%ALS 6_^1_%EOR* ERASER_^1_%STA* ERASER_^1R9_#CLR A_^1_%INP REJ9-*_'6 BITS,WORD 3_^1_%AND* MSK6_)MASK 6 BITS_6**MSOS 4.1**_^1_%EOR* ERASER_^1_%STA* (BCWI)_'WORD 3 FORMED AND STORED_^1_%RAO* BCWI_^1_%JMP* R2_+LOOP_^1***_"***_"***_"***_"***_"***_^1****************************************_^1REJ2_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPBIT+€€EOFBIT CHECK FOR EOP OR EOF_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+RESTORE 'Q'_^1_%JMP* R2_+TRY INPUT AGAIN_^1_%JMP* ENDING_'YES EOP-_^1REJ3_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPBIT_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+RESTORE 'Q'_^1_%JMP* R3_+TRY INPUT AGAIN_^1_%JMP* ENDING_'YES EOP-_^1REJ4_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPB€€IT_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+RESTORE 'Q'_^1_%JMP* R4_+TRY INPUT AGAIN_^1_%JMP* ENDING_'YES EOP-_^1REJ5_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPBIT_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+RESTORE 'Q'_^1_%JMP* R5_+TRY INPUT AGAIN_^1_%JMP* ENDING_'YES EOP-_^1REJ6_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPBIT_^1_%SAN 2_,SKIP IF END€€ OF OP._^1_%INQ -1_+RESTORE 'Q'_^1_%JMP* R6_+TRY INPUT AGAIN_^1_%JMP* ENDING_'YES EOP-_^1REJ7_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPBIT_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+RESTORE 'Q'_^1_%JMP* R7_+TRY INPUT AGAIN_^1_%JMP* ENDING_'YES EOP-_^1REJ8_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPBIT_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+RESTO€€RE 'Q'_^1_%JMP* R8_+TRY INPUT AGAIN_^1_%JMP* ENDING_'YES EOP-_^1REJ9_!NOP 0_^1_%LDQ* EWES_^1_%INP -1_+STATUS_^1_%AND =XEOPBIT_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+RESTORE 'Q'_^1_%JMP* R9_+TRY INPUT AGAIN_^1****************************************_^1ENDING NOP 0_^1_%INP -1_+STATUS_^1_%STA_!RDSTAT_^1_%ENA -0_+YES-EOP_^1_%STA* EOFLAG_'ASSUME NO ERRORS_^1_%STA* ENDFLG_^1€€_%LDA RDSTAT_^1_%AND =XALRBIT_$CHECK FOR ALARM_^1_%SAN 1_,SKIP IF ALARM_^1_%JMP* EXIT_^1_%ENA 0_^1_%STA* ENDFLG_'SET ALARM FLAG_^1_%LDA RDSTAT_^1_%AND =XEOFBIT_$CHECK END OF FILE_^1_%SAZ NOTEOF_'SKIP IF NOT EOF_^1_%ENA 0_^1_%STA* EOFLAG_'SET EOF FLAG_^1_%JMP* EXIT_^1NOTEOF ENA 1_^1_%AND RDSTAT_'CHECK FOR READY CONTRL._^1_%SAZ 1_,SKIP IF NOT READY_^1_%RTJ* PARERR_^1_%LDA €€ RDSTAT_'PASS STATUS IN Q_^1_%STA* EOFLAG_^1EXIT_!LDQ* EWES_^1_%ENA 1_^1_%OUT -1_+CLEAR CONTRL._^1_%LDA* ENDFLG_^1_%LDQ* EOFLAG_^1_%JMP (MGREAD)_$EXIT_^1ENDFLG NUM 0_^1EOFLAG NUM 0_^1SVBCWI NUM 0_,BUFFER ADDRESS_^1EWES_!ADC BDCNR*W+CNTLR*E+1_'EQ. CODE - DIR. BIT = 1_^1_%SPC 2_^1PARERR NUM -0_^1_%LDA* RTRYKT_^1_%INA -MAXTRY_^1_%SAM 1_^1_%JMP* (PARERR)_$CAN'T RECOVER_^1_%R€€AO* RTRYKT_^1_%LDQ* EWES_^1_%LDA =XBSPCOD_^1_%OUT -1_+BACK SPACE 1 RECORD_^1_%LDA* SVBCWI_'RESTORE BUFFER ADDRESS_^1_%STA BCWI_^1_%LDA =XBEGINP_$READ MOTION_^1_%LDQ* EWES_^1_%OUT -1_+START MOTION_^1_%JMP DATA_)RETRY READ_^1****************************************_^1*_81 CARD DELETED_^1UNISEL ADC SELECT+MTNR*E+5 UNIT SELECT,BINARY,CHAR MODE_^1RTRYKT NUM 0_^1****************€΄************************_^1WRAPUP LDQ* EWES_^1_%INQ 1_^1_%LDA* UNISEL_^1_%OUT -1_^1_%LDA =XREWCOD_^1_%INQ -1_^1_%NOP 0_^1_%OUT -1_^1_%JMP (MGREAD)_$REWIND TAPE_^1_%END_]_^__΄PDSKMTO CSY/ B43 P€1_%NAM DSKMTO_'DECK-ID B43 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_(ENT_%MGDRIV_^1_(ENT_%EWES1_^1_(EQU RECLNG(1536)_^1_(EQU_%MINWDS(2)_^1_(EQU_%W(2048),E(128)_^1_%EQU EOPBIT($10)_)END OF OP_^1_%EQU ALRBIT($20)_'ALARM_^1_%EQU LDBIT($40)_$LOST DATA_€€^1_(EQU_%OUTCOD(1*E),INPCOD(2*E)_^1_(EQU_%BSPCOD(3*E),EOFCOD(5*E)_^1_%EQU REWCOD(8*E)_^1_(EQU_%BDCNR(2)_^1_%EQU MTOUT(0)_^1_(EQU_%CTLRNR(3)_^1MGDRIV_!ADC_%-0_^1*_81 CARD DELETED_^1_(SAN_%BEG110-*-1_#SKIP IF A NON-ZERO_^1**_0IF A = 0 A WRAP-UP PROCEDURE_^1**_0IS CARRIED OUT_^1_(JMP_%WRAPUP_^1************_$***********_%**********_^1REJ2_#NOP_%0_^1_%LDQ* EWES1_^1_%INP 1_,GET STATUS€€_^1_%NOP 0_^1_%TRA Q_,STATUS TO Q_^1_(ENA_%0_^1_(JMP*_$(MGDRIV)_^1WDKNT NUM 0_^1FWA_"NUM 0_^1BEG110 NOP 0_^1_(STQ*_$WDKNT_)SAVE WORD COUNT AND_^1_(STA*_$FWA_,STARTING ADDRESS_^1_(AAQ_%A_^1_(INQ_%-MINWDS_^1BEG120_!STA*_$LWAP1_^1_%LDQ* EWES1_^1_%INQ -1_^1_%STQ* EQ_^1_(INQ_%2_^1_(LDA*_$BINSEL_^1_(OUT_%-1_,SELECT UNIT_^1RERITE_!LDA*_$FWA_^1_(STA*_$ADRS2_^1_(LDA_%=XOUTCOD_^1_(LDQ€€*_$EWES1_^1_(OUT_%REJ2-*_(START MOTION_^1****************************************_^1OUT200 LDQ* EQ_^1_%LDA* (ADRS2)_^1_%ALS 6_^1_%NOP 0_^1_%OUT -1_+6 BITS - WORD 1_^1_%ALS 6_^1_%NOP 0_^1_%OUT -1_+6 BITS - WORD 1_^1_%LLS 4_^1_%RAO* ADRS2_^1_%LDA* ADRS2_^1_%SUB* LWAP1_(CHECK LAST WORD_^1_%SAN 1_,SKIP IF NOT LAST WORD_^1_%JMP* LW1_*YES - LAST WOD OF RECORD_^1_%LDA* (ADRS2)_^1_€€%LRS 14_^1_%LDQ* EQ_^1_%OUT -1_+4 BITS - WORD 1.. 2 BITS - WORD 2 ))_^1_%LDA* (ADRS2)_^1_%ALS 8_^1_%NOP 0_^1_%OUT -1_+6 BITS - WORD 2_^1_%ALS 6_^1_%NOP 0_^1_%OUT -1_+6 BITS - WORD 2_^1_%LLS 2_^1_%RAO* ADRS2_^1_%LDA* ADRS2_^1_%SUB* LWAP1_(CHECK FOR LAST WORD_^1_%SAN 1_,SKIP IF NOT LAST WORD_^1_%JMP* LW2_*YES - LAST WORD OF RECORD_^1_%LDA* (ADRS2)_^1_%LRS 12_^1_%LDQ* EQ_^1€€_%OUT -1_+2 BITS - WORD 2.. 4 BITS - WORD 3....._^1_%LDA* (ADRS2)_^1_%ALS 10_^1_%NOP 0_^1_%OUT -1_+6 BITS - WORD 3_^1_%ALS 6_^1_%NOP 0_^1_%OUT -1_+6 BITS - WORD 3_^1_%RAO* ADRS2_^1_%LDA* ADRS2_^1_%SUB* LWAP1_(CHECK FOR LAST WORD_^1_%SAZ LW3_*SKIP IF YES LAST WORD***_^1_%JMP* OUT200_'3 WORD LOOP_^1****************************************_^1LW1_"CLR A_^1_%LRS 14_+GET LAST 4€€ BITS_^1LWOUT LDQ* EQ_^1_%OUT -1_+OUTPUT LAST BITS OF LAST WORD_^1LW3_"JMP* OUTEND_^1LW2_"CLR A_^1_%LRS 12_+GET LAST 2 BITS_^1_%JMP* LWOUT_^1********************_^1EQ_#NUM 0_^1ADRS2 NUM 0_,FWA_^1LWAP1 NUM 0_,NUMBER OF WORDS (96)_^1STAT_!NUM 0_^1EWES1 ADC BDCNR*W+CTLRNR*E+1_^1BINSEL ADC $405+MTOUT*E UNIT 0,BINARY,CHAR MODE_^1BCDSEL ADC $403+MTOUT*E UNIT 0,BCD,CHAR MO€€DE_^1********************_^1OUTEND LDQ* EWES1_^1_%CLR A_^1LP1_"INP -1_+STATUS_^1_%STA* STAT_^1_%AND =XEOPBIT_$CHECK EOP_^1_%SAN 1_,SKIP IF EOP_^1_%JMP* LP1_*WAIT FOR EOP_^1_%LDA* STAT_^1_%AND =XALRBIT_$CHECK ALARM_^1_%SAN ERR_*SKIP IF ALARM_^1_%ENA -0_+NO ALARM EXIT_^1_%JMP (MGDRIV)_^1ERR_"LDA* STAT_^1_%AND =N$140_'CHECK FOR PARITY OR LOST DATA_^1_%SAN ERR120_'SKIP IF EIT€€HER ERROR_^1_%ENA 0_,ALARM NOT LOST DATA EXIT_^1_%LDQ* STAT_)STATUS TO Q_^1_%JMP (MGDRIV)_^1********************_^1ERR120_!LDA_%=XBSPCOD_^1_(OUT_%-1_^1_(LDA_%=XEOFCOD_^1_(OUT_%-1_^1_(LDA_%=XBSPCOD_^1_(OUT_%-1_^1_%LDA FWA_*RESTORE BUFFER ADDRESS_^1_%STA* ADRS2_^1_%LDA =XOUTCOD_$WRITE MOTION_^1_%LDQ* EWES1_^1_%OUT -1_+START MOTION_^1_%JMP OUT200_'RETRY WRITE_^1WRAPUP_!LDQ_%EWES€ΰ1_^1_(INQ_%1_^1_(LDA_%BCDSEL_^1_%OUT 0_,PASS EXT REJ, 9 TRACK BINARY ONLY **MSOS 4.1**_^1_(NOP_%0_^1_(INQ_%-1_^1_(LDA_%=XEOFCOD_^1_(OUT_%-1_^1_(OUT_%-1_^1_%LDA =XREWCOD_^1_(OUT_%-1_^1_(ENA_%-0_^1_(JMP_%(MGDRIV)_^1_(END_^__ΰPFINDCR CSY/ B44 P€1_%NAM FINDCR_'DECK-ID B44 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$RETURNS ADDRESS OF CONTROL RECORD CONTAINING_^1*_$POINT SPECIFIED BY INDEX . SETS ERROR IF CANT FIND._^1*_]_^1*_$PARAMETERS PASSED IN VOLATILE_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTER€€NALS_^1_%ENT FINDCR_^1_%SPC 4_^1_%EQU H8000($32)_^1_%EQU ZERO($22)_^1_%EQU H7FFF($11)_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU I€€VAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#00 THREAD_^1_%EQU NBRS(1)_%01 NUMBER OF POINTS_^1_%EQU TYPLU(2)_$02 DEVICE TYPE_^1_%EJT_]_^1_%SPC 4_^1FINDCR NUM 0_^1_%IIN 0_^1_%LDA* FINDCR_^1_%STA- SUBRET,I_$SAVE RETU€€RN_^1_%EIN 0_^1FIN2_!LDQ- IREC,I_^1_%LDA- NBRS,Q_'GET NUMBER OF POINTS IN RECORD_^1_%SUB- INDEX,I_%SUBTRACT INDEX_^1_%INA -1_^1_%SAM FIN3_^1_%JMP* FIN8_)INDEX POINTS TO THIS RECORD_^1*_)GET NEXT CONTROL RECORD ON THREAD_%*_^1FIN3_!LDA- INDEX,I_%DECREMENT INDEX_!BY NBR PTS IN LAST RECD_^1_%LDQ- IREC,I_^1_%SUB- NBRS,Q_^1_%STA- INDEX,I_%SAVE INDEX TO NEW CONTROL RECORD_^1_%LDQ- IRE€0C,I_'GET THREAD_^1_%LDA- (ZERO),Q_^1_%INA 0_^1_%SAN FIN4_)NOT THE END_^1_%LDA- H8000_(SET ERROR_^1_%STA- ETEMP,I_^1_%RAO- SUBRET,I_$BUMP RETURN FOR ERROR_^1_%JMP* FIN8_^1FIN4_!STA- IREC,I_'UPDATE LOCATION OF CONTROL RECORD_^1_%JMP* FIN2_)TRY AGAIN_^1FIN8_!LDQ- SUBRET,I_^1_%JMP- (ZERO),Q_^1_%END_]_^__ 0PL15721 CSY/ B45 P€1_%NAM L15721_'DECK-ID B45 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1572-1 LINE SYNC TIMER HANDLING ROUTINE_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$THIS SUBROUTINE IS DESIGNED TO BE USED FOR INTERRUPTS ONLY WHEN_^1*_'THE 1572-1 IS NOT THE BASIC SYSTEM TIME BASE. (LST PORTION)_^1*_$IF€€ THIS SUBROUTINE IS USED TO ENABLE THE LST, AND THE 1572-1_^1*_'INTERRUPT IS USED, THE USER MUST SUPPLY A ROUTINE WITH ENTRY_^1*_'POINT LST721 TO PERFORM ANY FUNCTION REQUIRED._^1*_$THIS SUBROUTINE IS CALLABLE FROM BOTH ASSEMBLY AND FORTRAN_^1*_'PROGRAMS. PSEUDO RE-ENTRANCY IS ACHIEVED BY INHIBITING_^1*_'INTERRUPTS THROUGHOUT._^1*_$ASSEMBLY LANGUAGE CALL..._^1*_*RTJ+ L15721_%OR_!R€€TJ+ L15721_^1*_*ADC INVALUE_*ADC (IVALUE-*)_^1*_'WHERE IVALUE IS DEFINED AS..._^1*_-BITS 2-15 UNUSED_^1*_-BIT 0 - 0 = DISABLE LST INTERRUPT_^1*_3- 1 = ENABLE LST INTERRUPT_^1*_-BIT 1 - 0 = DISABLE LST SYNC_^1*_3- 1 = ENABLE LST SYNC_^1*_'ON RETURN TO THE CALLER, THE VALUE IN THE A-REGISTER IS..._^1*_-0 = NO ERROR_^1*_,-1 = INTERNAL REJECT_^1*_-1 = EXTERNAL REJECT_^1*_$FORTRAN CAL€€L..._"(AS INTEGER FUNCTION)_^1*_*IF(L15721(IVALUE)) 10,20,30_^1*_'WHERE IVALUE IS AS DEFINED ABOVE_^1*_'STATEMENT EXECUTED IS..._^1*_,10 = INTERNAL REJECT_^1*_,20 = NO ERROR_^1*_,30 = EXTERNAL REJECT_^1_%EJT_]_^1* SUBROUTINE ENTRY POINTS_^1_%ENT L15721_'BASIC SUBROUTINE ENTRY_^1_%SPC 2_^1* SUBROUTINE EXTERNALS_^1_%EXT E15721_'BASIC W,E,S FUNCTION (IN SYSDAT)_^1_%EXT H15721_'1€€572-1 FUNCTION HISTORY (IN SYSDAT)_^1_%EXT END0V4_'LAST ADDRESS IN PART 0_^1_%SPC 2_^1* SUBROUTINE EQUIVALENCES_^1_%EQU LPMASK(2)_#LOGICAL PRODUCT MASK TABLE_^1_%EQU ZERO($22)_#CELL CONTAINING ZERO_^1_%SPC 4_^1L15721 NUM 0_,BASIC ENTRY_^1_%IIN 0_^1_%STQ* SAVEQ_(SAVE Q._^1_%RTJ* PARABS_^1_%STQ* VALADD_'SAVE VALUE ADDRESS_^1_%LDA+ H15721_'LOAD HISTORY WORD_^1_%AND* SRGMSK_'LE€€AVE SRG FUNCTION AS IS._^1_%TRA Q_^1_%LDA* (VALADD)_$PICK UP USER FUNCTION_^1_%AND- LPMASK+2_$SAVE ONLY ALLOWABLE BITS_^1_%ALS 1_,SHIFT INTO POSITION_^1_%EAQ A_,COMBINE IN A_^1_%LDQ* CODE_)FUNCTION OUTPUT._^1_%LDQ- (ZERO),Q_$W.E.S. FOR FUNCTION_^1_%OUT ERR-*_^1_%STA+ H15721_'UPDATE HISTORY_^1_%CLR A_,NO ERROR FLAG_^1EXIT_!LDQ* SAVEQ_^1_%EIN 0_^1_%JMP* (L15721)_$RETURN TO CALL€€ER_^1ERR_"JMP* INREJ_(INTERNAL REJECT._^1_%ENA 1_,EXTERNAL REJECT._^1_%JMP* EXIT_^1INREJ ENA -1_^1_%JMP* EXIT_^1CODE_!ADC E15721_'BASIC W,E,S FUNCTION ADDRESS_^1SAVEQ NUM 0_,Q._^1VALADD NUM 0_,ADDR. OF IVALUE._^1SRGMSK NUM $30_*SRG FUNCTION BIT MASK._^1_%SPC 2_^1PARABS NOP 0_,ABSOLUTIZE PARAMETER._!Q = PARAMETER ADDRESS_^1_%LDQ* L15721_'ADDRESS OF CALLER_^1_%SQM PART1_(C€€ALLER IS IN PART 1_^1_%TRQ A_^1_%SUB =XEND0V4_$LAST ADDRESS IN PART 0_^1_%SAM PART0_(CALLER IS IN PART 0_^1_%SAZ PART0_(CALLER IS IN PART 0_^1PART1 LDA- (ZERO),Q_$PICK UP PARAMETER ADDRESS_^1_%JMP* PAR2_^1PART0 LDA- (ZERO),Q_$IS THE ADDRESS RELATIVE_^1_%SAP PAR2_)NO_^1_%AAQ A_,YES, ABSOLUTIZE IT_^1_%AND- LPMASK+15_^1PAR2_!TRA Q_^1_%RAO* L15721_'BUMP RETURN ADDRESS_^1_%JMP*€ (PARABS)_$RETURN_^1_%END_]_^__ PMDRV56 CSY/ B46 P€1_%NAM MDRV56_'DECK-ID B46 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_]_^1*_$856 CARTRIDGE DISK DRIVER FOR DSKTAP_0**MSOS 4.1**_^1*_]_^1*_]_^1***€€**************************ENTRANCE PARAMETERS ARE************MSOS 4.0_^1*_\**MSOS 4.0_^1*_;A REGISTER CONTAINS FIRST WORD_!**MSOS 4.0_^1*_;ADDRESS OF THE READ/WRITE BUFFER.**MSOS 4.0_^1*_\**MSOS 4.0_^1*_;I CONTAINS THE FIRST SECTOR TO_!**MSOS 4.0_^1*_;READ/WRITE_6**MSOS 4.0_^1*_\**MSOS 4.0_^1*_;Q CONTAINS THE READ/WRITE CODE_!**MSOS 4.0_^1*_;PLUS MEANS READ_/**MSOS 4.1**_^1*_;MINUS€€ MEANS WRITE_-**MSOS 4.1**_^1*_\**MSOS 4.0_^1*_;THE FOLLOWING PARAMETERS MUST_"**MSOS 4.0_^1*_;BE SUPPLIED_5**MSOS 4.0_^1_%EQU CYL562(203)_!NO. OF CYLINDERS ON 856-2_^1_%EQU CYL564(406)_!NO. OF CYLINDERS ON 856-4_^1_(EQU_%DEVN($D) PHYSICAL DEVICE NUMBER_***MSOS 4.0_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1_%EXT*€€ FST_L**MSOS 4.1**_^1_%ENT GENFC_J**MSOS 4.1**_^1_%ENT MDRIVE_I**MSOS 4.1**_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1MDRIV4_!ADC_%0_I**MSOS 4.0_^1MDRIVE EQU MDRIVE(MDRIV4)_A**MSOS 4.1**_^1_(STA*_$FWD_%SAVE FIRST WORD ADDRESS_)**MSOS 4.0_^1_(ENA_%10_'SET COUNTERS TO TRY TEN TIMES_"**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1_(STA*_$TENC_F**MSOS 4.0_^1_%ENA 3_,READ CODE_8**MSOS 4.1**_^1_%SQP€€ MDR20_(+ FOR READ, - WRITE_.**MSOS 4.1**_^1_%ENA 2_,WRITE CODE_7**MSOS 4.1**_^1_%TCQ Q_N**MSOS 4.1**_^1MDR20_"STA*_$K_(K IS ADDED TO FUNCTION TO_'**MSOS 4.0_^1_%STQ* BUFLEN+1_G**MSOS 4.1**_^1*_;GENERATE READ OR WRITE FUNCTION **MSOS 4.0_^1_%LDA- I_^1_%STA* ISAV_)SAVE SECTOR_^1_%LDA FST_*CHECK FIRST TIME THROUGH_)**MSOS 4.1**_^1_(SAZ_%1_(CLEAR CONTROLLER IF EQUAL TO ZERO**MSOS€€ 4.0_^1_%JMP* DONSET_'DONE SETUP_^1_%RAO FST_*SET FIRST TIME FLAG_.**MSOS 4.1**_^1****************************************************************MSOS 4.0_^1*_;CLEAR THE CONTROLLER_,**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1CLRCON_!CLR_%A_I**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_%LDA =N$100_I**M€€SOS 4.1**_^1_%OUT -1_+CONNECT TO UNIT 0_0**MSOS 4.1**_^1_%INQ -1_+CLEAR CONTROLLER_1**MSOS 4.1**_^1_(INP_%-1_'SEND FUNCTION TO DISK_+**MSOS 4.0_^1MSTAT_"RTJ_%STACON_"CHECK STATUS AFTER CLEAR_(**MSOS 4.0_^1*_;CONTROLLER_6**MSOS 4.0_^1_(LLS_%15_'CHECK READY_5**MSOS 4.0_^1_(SAM_%1_(MINUS MEANS READY_/**MSOS 4.0_^1_(JMP*_$MDR110_"NOT READY-FATAL ERROR_+**MSOS 4.0_^1_(LRS_%15_H**MSOS €€4.0_^1_%AND* BIT3_)CHECK FOR OFF CYLINDER_.72*1701_^1_(SAZ_%1_(ZERO MEANS OFF CYLINDER_)**MSOS 4.0_^1_(JMP*_$MSTAT_#REPEAT REQUEST IF NOT_+**MSOS 4.0_^1*_;OFF CYLINDER_4**MSOS 4.0_^1M1STAT_!RTJ_%STACON_"CHECK STATUS AFTER CLEAR_(**MSOS 4.0_^1_%AND* BIT3_N72*1701_^1_(SAN_%1_(NON ZERO MEANS ON CYLINDER_%**MSOS 4.0_^1_(JMP*_$M1STAT_"REPEAT REQUEST IF NOT ON CYLINDER**MSOS 4.0_^1_%LDA*€€ SVSTAT_'GET SAVED STATUS_^1_%AND =N$1000_%MASK DISK TYPE_^1_%ARS 12_+RIGHT JUSTIFY_^1_%TRA Q_,TO Q FOR INDEX_^1_%STA* DSKTYP_'SAVE DISK TYPE_^1_%LDA* SECTAB,Q_$GET BOUNDARY SIZE_^1_%STA* SIZSEC_^1DONSET LDQ* DSKTYP_'DISK TYPE_^1_%LDA ISAV_^1_%EOR* BONDSC,Q_$CHECK SECTOR FOR BOUNDARY CONDITION_^1_%SAN LASTP_(NO BOUNDARY, DO IN ONE XFER_^1_%LDA* L1,Q_)TWO PART XFER_^1_%STA* BUF€€LEN+1_$SAVE LENGTH OF PART 1_^1_%RTJ* SETSEC_'DO PART 1 XFER_^1_%LDQ* DSKTYP_'DISK TYPE_^1_%LDA* L1,Q_)LENGTH PART 1_^1_%ADD* FWD_*UPDATE FWD FOR_^1_%STA* FWD_*SECOND PART OF XFER_^1_%LDA* L2,Q_)LENGTH OF PART 2 XFER_^1_%STA* BUFLEN+1_$SAVED_^1_%LDA* SECTAB,Q_$SECTOR OF PART 2_^1_%STA* ISAV_^1LASTP RTJ* SETSEC_'DO PART 2 OF XFER_^1_%JMP MDR200_'NORMAL EXIT_^1SETSEC NUM 0_,PARTIA€€L TRANSFER SUBROUTINE_^1FUNCTS_!RTJ*_$FNDSEC_"GET READY FOR DATA TRANSFER_$**MSOS 4.0_^1_(JMP*_$MDR100_"GO TO DATA TRANSFER_-**MSOS 4.0_^1_%SPC 3_^1FNDSEC NUM 0_,COMPUTE AND DO SEEK ADDRESS_^1_(CLR_%Q_I**MSOS 4.0_^1_%LDA* ISAV_)SECTOR NUMBER_^1_(SAN_%1_(CHECK FOR SECTOR ZERO_+**MSOS 4.0_^1_(JMP*_$SETNR_E**MSOS 4.0_^1_(DVI_%=N11774_!DIVIDE BY LARGEST PHYSICAL SECTOR**MSOS 4.0_^1SI€€ZSEC EQU SIZSEC(*-1)_D**MSOS 4.1**_^1*_;A EQUAL 1 MEANS DISK1_+**MSOS 4.0_^1*_;A EQUAL 0 MEANS DISK 0_***MSOS 4.0_^1_%ALS 5_,B+T 5 DISK INDICATOR_-**MSOS 4.1**_^1_(STA*_$Q1_'SAVE DISK INDICATOR_-**MSOS 4.0_^1TRQA_#TRQ_%A_I**MSOS 4.0_^1DV1_$CLR_%Q_(CLEAR Q FOR DIVISION_,**MSOS 4.0_^1_(DVI_%=N29_$DIVIDE BY NUMBER OF SECTORS PER **MSOS 4.0_^1*_;TRACK_;**MSOS 4.0_^1_(STQ*_$R2_'SAVE €€SECTOR NUMBER IN TRACK_$**MSOS 4.0_^1_(CLR_%Q_(CLEAR Q FOR DIVISION_,**MSOS 4.0_^1_%DVI* TWO_*CALCULATE CYLINDER AND TRACK_(72*1701_^1_%ALS 7_,CYL IN BITS 7-15_1**MSOS 4.1**_^1_(ADD*_$R2_'PUT SECTOR NUMBER IN BITS 0-4_"**MSOS 4.0_^1_(ADD*_$Q1_'ADD DISK INDICATOR(BIT6)_(**MSOS 4.0_^1_%QLS 6_,TRACK INDICATOR IN BIT 6_)**MSOS 4.1**_^1_(AAQ_%A_I**MSOS 4.0_^1SETNR STA* NR_+SAVE ADDRE€€SS TO SEEK_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;INITIATE SEEK ADDRESS FUNCTION_!**MSOS 4.0_^1****************************************************************MSOS 4.0_^1MDR90_"LDA*_$NR_'FILE ADDRESS_4**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_%INQ 1_,LOAD ADDRESS_5**MSOS 4.1**_^1_(OUT_%2_(SEND FUNCTION €€TO DISK_+**MSOS 4.0_^1_(JMP*_$MDR130_"DEVICE REPLY_4**MSOS 4.0_^1_(JMP*_$MDR90_#DEVICE REJECT(INTERNAL)_)**MSOS 4.0_^1_(LDA*_$TEN_%EXTERNAL REJECT_1**MSOS 4.0_^1_(SAN_%1_I**MSOS 4.0_^1_(JMP*_$MDR110_"EXTERNAL REJECT 10 TIMES_(**MSOS 4.0_^1_(INA_%-1_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1_(JMP*_$MDR90_#TRY AGAIN_7**MSOS 4.0_^1ISAV_!NUM 0_,TEMP FOR SECTOR_^1************************€€****************************************MSOS 4.0_^1*_;LOAD BUFFER LENGTH_.**MSOS 4.0_^1****************************************************************MSOS 4.0_^1MDR130_!RTJ*_$STATUS_"STATUS CHECK_4**MSOS 4.0_^1_(SAZ_%MDR150_"ANY ERRORS_6**MSOS 4.0_^1_(JMP*_$MDR110_"ERROR EXIT_6**MSOS 4.0_^1MDR150_!LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_%INQ -1_+LOAD BUFFER COUNT_0**MSOS€€ 4.1**_^1BUFLEN_!LDA_%=N3072_^1_(OUT_%-1_H**MSOS 4.0_^1_(JMP*_$(FNDSEC)_B**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;PARAMETERS AND CONSTANTS_^1****************************************************************MSOS 4.0_^1_%SPC 1_^1******_)XFER AT PLATTER BOUNDARY TABLES_^1BONDSC ADC CYL564*29*2/32*32_^1_%ADC CYL562*29*2/32*32_^1L1_#NU€€M $0A20_(LENGTH PART 1, 856-4_^1_%NUM $04E0_(LENGTH PART 1, 856-2_^1L2_#NUM $01E0_(LENGTH PART 2, 856-4_^1_%NUM $0720_(LENGTH PART 2, 856-2_^1******_]_^1_%SPC 1_^1SVSTAT NUM 0_,SAVE STATUS_^1DSKTYP NUM 0_,DISK TYPE, 1 = 856-2_^1SECTAB ADC CYL564*29*2-1 SECTOR 0, DISK 1, 856-4_^1_%ADC CYL562*29*2-1 SECTOR 0, DISK 1, 856-2_^1TEN_$NUM_%0_I**MSOS 4.0_^1TENC_#NUM_%0_I**MSOS 4.0€€_^1Q1_%NUM_%0_(DISK INDICATOR_2**MSOS 4.0_^1R2_%NUM_%0_(HOLDER FOR SECTOR NUMBER_(**MSOS 4.0_^1FWD_$ADC_%0_(FIRST WORD ADDRESS_.**MSOS 4.0_^1K_'ADC_%0_(READ OR WRITE CODE_.**MSOS 4.0_^1NR_%ADC_%0_(SEEK ADDRESS_4**MSOS 4.0_^1GENFV4_!ADC_%DEVN*128 GENERATING FUNCTION_-**MSOS 4.0_^1GENFC EQU GENFC(GENFV4)_B**MSOS 4.1**_^1CYLNUM_!ADC_%0_(CYLINDER AFTER REGISTER STATUS_!**MSOS 4.0_^1€€BIT3_!NUM 8_Q72*1701_^1HFF00 NUM $FF00_M72*1701_^1H00FF NUM $00FF_M72*1701_^1TWO_"NUM 2_Q72*1701_^1****************************************************************MSOS 4.0_^1*_;DATA TRANSFER_3**MSOS 4.0_^1****************************************************************MSOS 4.0_^1MDR100_!ENA_%10_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1MDR101_!LDA*_$FWD_%FIRST WORD ADDRESS_.**M€€SOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_(ADQ*_$K_(PLUS READ OR WRITE CODE_)**MSOS 4.0_^1_(OUT_%2_I**MSOS 4.0_^1_(JMP*_$MDR125_"DEVICE REPLY_4**MSOS 4.0_^1_(JMP*_$MDR101_"INTERNAL REJECT_1**MSOS 4.0_^1_(LDA*_$TEN_%EXTERNAL REJECT_1**MSOS 4.0_^1_(SAN_%1_I**MSOS 4.0_^1_(JMP*_$MDR110_"EXTERNAL REJECT 10 TIMES_(**MSOS 4.0_^1_(INA_%-1_H**MSOS 4.0_^1_(STA*_$TEN_G**MSO€€S 4.0_^1_(JMP*_$MDR101_D**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;ERROR EXIT_6**MSOS 4.0_^1MDR110 LDQ* GENFV4_^1_%INP 1_,GET STATUS_^1_%NOP 0_^1_%TRA Q_,STATUS TO Q_^1_(CLR_%A_^1EXI_$JMP_%(MDRIV4)_B**MSOS 4.0_^1****************************************************************MSOS 4.0_^1MDR125_!RTJ*_$STATUS_"CHECK STATUS AFTER DATA €€TRANSFER **MSOS 4.0_^1_(SAZ_%1_(ANY ERRORS_6**MSOS 4.0_^1_(JMP*_$MDR110_"YES_=**MSOS 4.0_^1_(RTJ*_$FNDSEC_"GET READY FOR COMPARE FUNCTION_!**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;INITIATE COMPARE FUNCTION_'**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1MDR180_!ENA_%10_H**MSOS€€ 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1MDR181_!LDA*_$FWD_%ADDRESS OF BUFFER_/**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_%INQ 4_,COMPARE FUNCTION_1**MSOS 4.1**_^1_(OUT_%2_I**MSOS 4.0_^1_(JMP*_$MDR190_"DEVICE REPLY_4**MSOS 4.0_^1_(JMP*_$MDR180_"DEVICE REJECT(INTERNAL)_)**MSOS 4.0_^1_(LDA*_$TEN_%EXTERNAL REJECT_1**MSOS 4.0_^1_(SAN_%1_I**MSOS 4.0_^1_(JMP*_$MDR110_"EXTER€€NAL REJECT 10 TIMES_(**MSOS 4.0_^1_(INA_%-1_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1_(JMP*_$MDR181_D**MSOS 4.0_^1MDR190_!RTJ*_$STATUS_"TEST STATUS_5**MSOS 4.0_^1_(SAZ_%1_(ANY ERRORS_6**MSOS 4.0_^1_(JMP*_$MDR110_D**MSOS 4.0_^1_(ENA_%$40_%CHECK FOR NO COMPARE_,**MSOS 4.0_^1_(AND*_$DIRSTA_D**MSOS 4.0_^1_%SAN NOCOMX_^1_%JMP (SETSEC)_$RETURN FOR NEXT PART IF ANY_^1NOCOMX LDA* TENC_)NO€€ COMPARE_^1_(SAN_%1_I**MSOS 4.0_^1_(JMP*_$MDR110_"NO COMPARE AFTER 10 TIMES_'**MSOS 4.0_^1_(INA_%-1_?S_'**MSOS 4.0_^1_(STA*_$TENC_F**MSOS 4.0_^1_(ENA_%10_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1_(JMP_%FUNCTS_D**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;NORMAL EXIT_5**MSOS 4.0_^1**********************************************************€€******MSOS 4.0_^1MDR200_!SET_%A_I**MSOS 4.0_^1_(CLR_%Q_I**MSOS 4.0_^1_(JMP*_$EXI_%NORMAL EXIT_5**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;ROUTINE FOR STATUS TESTING_%**MSOS 4.0_^1*_;AFTER CLEAR CONTROLLER_***MSOS 4.0_^1****************************************************************MSOS 4.0_^1STACON_!ADC_%0_I**MSOS 4.0_^1STREPL_!CLR_%€€A_I**MSOS 4.0_^1_(LDQ*_$GENFV4_D**MSOS 4.0_^1_%INP 3_^1_%STA* SVSTAT_'SAVE STATUS_^1_(JMP*_$(STACON) REPLY RETURN FROM STATUS CHECK_!**MSOS 4.0_^1_(JMP*_$STREPL_"DEVICE REJECT(INTERNAL)_)**MSOS 4.0_^1_(JMP*_$MDR110_"DEVICE REJECT(EXTERNAL)_)**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;ROUTINE FOR TESTING STATUS_%**MSOS 4.0_^1*********€€*******************************************************MSOS 4.0_^1STATUS_!ADC_%0_I**MSOS 4.0_^1STA5_#RTJ*_$STACON_"ISSUE STATUS FUNCTION_+**MSOS 4.0_^1_(STA*_$DIRSTA_"SAVE DIRECTOR STATUS_,**MSOS 4.0_^1_(TRA_%Q_I**MSOS 4.0_^1_(LRS_%1_(CHECK FOR READY_1**MSOS 4.0_^1_(SAM_%1_I**MSOS 4.0_^1_(JMP*_$STAERR_"EXIT IF NOT READY_/**MSOS 4.0_^1_%LRS 1_,BUSY BIT TO A15_2**MSOS 4.1**_^1_%SAP €6 1_,NOT BUSY_9**MSOS 4.1**_^1_(JMP*_$STA5_$REPEAT STATUS_3**MSOS 4.0_^1_(LRS_%4_(IF NOT BUSY CHECK FOR ALARM_$**MSOS 4.0_^1_(SAM_%STAERR_D**MSOS 4.0_^1_(CLR_%A_I**MSOS 4.0_^1_(JMP*_$(STATUS)_B**MSOS 4.0_^1STAERR_!ENA_%6_^1STAEXI_!JMP*_$(STATUS) FATAL ERROR EXIT_^1DIRSTA_!ADC_%0_(DIRECTOR STATUS_^1_%END_]_^__6PQCARD CSY/ B47 P€1_%NAM QCARD_(DECK-ID B47 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1726/405, 1728/430, 1729-2, 1729-3 INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$IDRIV FOR CARDS, USED WITH SYS INITIALIZER IDRIV CONTROLLER_^1*_'READS FORMATTED BINARY RECORDS_^1*_'MAXIMUM RECORD LENGTH €€IS ONE CARD_^1**************************************************************MSOS 4.1**_^1*_$ERROR EXIT CONDITIONS_?**MSOS 4.1**_^1*_'(A) = 0_K**MSOS 4.1**_^1*_'(Q) = ERROR CODE_B**MSOS 4.1**_^1*_+1 = LOST DATA_A**MSOS 4.1**_^1*_+2 = ALARM ERROR_?**MSOS 4.1**_^1*_+4 = CHECKSUM ERROR_<**MSOS 4.1**_^1*_+5 = INTERNAL REJECT_;**MSOS 4.1**_^1*_+6 = EXTERNAL REJECT_;**MSOS 4.1**_^1*_+9 = €€SEQUENCE ERROR_<**MSOS 4.1**_^1*_*10 = NON-NEGATIVE RECORD LENGTH_0**MSOS 4.1**_^1*_*14 = NOT READY_A**MSOS 4.1**_^1*_'(I) = LAST HARDWARE STATUS_8**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$A HOLLERITH CARD CODE CONVERSION TABLE MUST BE LOADED**MSOS 4.1**_^1*_'WITH THIS MODULE....._=**MSOS 4.1**_^1*_.CR026 - HOLLER€€ITH_:**MSOS 4.1**_^1*_.CR029 - EBCDIC_=**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1_%SPC 1_^1_%EQU WES(11)_%STANDARD EQUIPMENT CODE_***MSOS 4.1**_^1_%EQU ASKII(70)_^1_%ENT QCARD_(BASIC DRIVER ENTRY_/**MSOS 4.1**_^1_%ENT ECARD_(W,E,S FUNCTION CODE_.**MSOS 4.1**_^1_%EXT* CDRD_)HOLLERITH CONVERSION TABLE_'**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1ECARD ADC WES*128+$21_!BASIC W,E,S FUNCTION CODE_^1€€*_Z**MSOS 4.1**_^1QCARD NUM 0_,BASIC DRIVER ENTRY_/**MSOS 4.1**_^1_%RTJ SETUP_^1CKSTAT_!RTJ*_$STATUS_-COMES BACK ON DATA READY OR_^1REPT_!RTJ* TRIP_%TRIP NEXT CARD_^1_%ENA 1_^1_%STA CLMN1F_'SET 1ST COLUMN FLAG_^1*_82 CARDS DELETED_563*1376_^1_%RTJ* RDBIN_$READ IN BINARY MODE_^1_%JMP CHKOK_^1*_]_^1EREXIT STQ* ERCD_)SAVE ERROR CODE_2**MSOS 4.1**_^1_%RTJ STOPMO_'STOP CARD MOTIO€€N, CLEAR CONTROLLER**MSOS 4.1**_^1_%LDQ* ERCD_)PASS ERROR CODE_2**MSOS 4.1**_^1EXITER LDA* STATS_(PASS STATUS_6**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%CLR A_)SET ERROR CODE FOR EXIT_^1_%JMP* (QCARD)_%ERROR RETURN_5**MSOS 4.1**_^1ERCD_!NUM 0_N**MSOS 4.1**_^1ASMD1 RTJ ASCMD_$ASCII MODE, HOLLERITH_^1_%JMP CHKOK_^1*_]_^1TRPCD NUM $80_^1* *************************************€€********************************_^1*_$THE FOLLOWING ROUTINE IS RESPONSIBLE FOR TRIPPING ALL CARDS_^1* *********************************************************************_^1TRIP_!ADC 0_)TRIP NEXT CARD_^1_%CLR A_^1_%STA* WORDCT_#PREPARE FOR NEXT CARD_^1_(STA*_$CC_^1_%LDQ* ECARD_J**MSOS 4.1**_^1_(LDA*_$TRPCD_^1_%OUT YREJ-*_I**MSOS 4.1**_^1_%JMP* (TRIP)_^1*_]_^1* ***************€€******************************************************_^1*_"STATUS IS TAKEN EACH TIME THE DRIVER IS ENTERED_^1* *********************************************************************_^1STATUS ADC 0_)RUN STATUS ON CARD READER_^1_%LDQ* ECARD_J**MSOS 4.1**_^1_%INP REJ-*_(READ STATUS_6**MSOS 4.1**_^1_%STA* STATS_(SAVE STATUS_6**MSOS 4.1**_^1_%AND =N$0021_%SAVE ALARM AND READY_-**MSO€€S 4.1**_^1_%ALS 15_+GET READY BIT_4**MSOS 4.1**_^1_%SAP NOTRDY_'SKIP IF NOT READY_0**MSOS 4.1**_^1_%ALS 11_+GET ALARM_8**MSOS 4.1**_^1_%SAP STATOK_'SKIP IF NO ALARM_1**MSOS 4.1**_^1_%ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1_%JMP* EXITER_I**MSOS 4.1**_^1STATOK JMP* (STATUS)_G**MSOS 4.1**_^1NOTRDY ENQ 14_+NOT READY ERROR_2**MSOS 4.1**_^1_%JMP* EXITER_I**MSOS 4.1**_^1STATS NUM 0_N*€€*MSOS 4.1**_^1REJ_"JMP* INREJ_J**MSOS 4.1**_^1_%ENQ 6_,EXTERNAL REJECT ERROR_,**MSOS 4.1**_^1_%JMP* EXITER_I**MSOS 4.1**_^1INREJ ENQ 5_,INTERNAL REJECT ERROR_,**MSOS 4.1**_^1_%JMP* EXITER_I**MSOS 4.1**_^1* M********M****************M******MMM***M*****************************_^1*_!BINARY READ REQUEST PROCESSOR_^1*_$FORMATTING IS EXPECTED_^1*_'1) WORD 1 CONTAINS SEQ NBR IN BITS €€15-4_^1*_+AND CHECKSUM OVERIDE IN B+TS 3-0_^1*_'2) WORD 2 DEFINES THE COMPLEMENT OF THE WORD COUNT_^1*_+FOR THE RECORD_^1*_'3) DATA CONTINUES THROUGH COL 80_^1*_'4) SUCCEDING CARDS MUST CONTAIN SEQUENCING_^1*_+IN THE FIRST WORD_^1*_'5) FOLLOWING THE LAST WORD OF THE RECORD_^1*_+A CHECKSUM MUST APPEAR. CHECKSUMS ARE_^1*_+IGNORED IF OVERIDE BITS ARE SET_^1* ********************€€*************************************************_^1RDBIN_"ADC_%0_^1R_$RTJ* INPUTC_^1_%LDA* W1_^1_%ENQ 0_,STORE 3 WORDS_^1_%LLS 12_^1_%EOR* W2_^1_%LLS 8_^1_%RTJ* STOQ_)WORD 0_^1*_+WORD 0 IS MADE FROM W1(11=0) AND W2(11=8)_^1_%LDQ* W2_^1_%LDA* W3_^1_%ALS 4_^1_%LLS 8_^1_%RTJ* STOQ_^1*_8WORD 2 IS MADE FROM W2(7=0)AND W3(11=4)_^1_%ENQ 0_^1_%LDA* W3_^1_%LLS 12_^1_%EOR* W4_^1_%TRA€€ Q_^1_%RTJ* STOQ_^1*_8WORD P IS MADE OF W3(3=0) AND W4(11=0)_^1*_]_^1_(LDA*_$CC_^1_%INA -80_'TEST FOR 80 COLUMNS_^1_%SAP 1_^1_%JMP* R_^1_%JMP* (RDBIN)_^1*_]_^1WORDCT ADC 0_)CARD WORD COUNT_^1SEQ_"NUM 0_,SEQUENCE COUNTER_^1SWITCH ADC 0_)ASCII OR BINARY MODE SWITCH_^1DATCOD NUM 0_^1INPUTC ADC 0_)ROUTINE FOR READING 4 COLS_^1_%RTJ* INP_^1_%STA* W1_^1_%RTJ* INP_^1_%STA* W2_^1_€€%RTJ* INP_^1_%STA* W3_^1_%RTJ* INP_^1_%STA* W4_^1_%JMP* (INPUTC)_^1*_]_^1_%BSS W1,W2,W3,W4,CC,CORE_^1*_]_^1*_]_^1* *********************************************************************_^1*_!GENERALIZED ROUTINE FOR STORING FORMATTED BINARY DATA_^1* *********************************************************************_^1STOQ_!ADC 0_)STORE CONTENTS OF Q AWAY_^1_(STQ*_$OVRIDE_^1_%L€€DA* CHKSUM_#UPDATE CHECKSUM FOR RECORD_^1_%AAQ A_^1_%STA* CHKSUM_^1_(LDA*_$WORDCT_.CARD WORD COUNT_^1_(SAZ_%SEQOK-*-1_+ZERO IF FIRST WORD ON CARD_^1_%SAP NOTCKS-*-1_^1_%JMP* CHECK_'MINUS IF PROCESSING CHECKSUM_^1NOTCKS JMP* NOTFST_%OTHERWISE NOT FIRST WD OR CHECKSUM_^1*_]_^1*_]_^1SEQOK_"LDA*_$OVRIDE_.CHECK FOR BINARY CARD_^1_(AND_%=N$00F0_^1_(SAZ_%BINARY_.1729 TYPE BINARY_^1_(INA€€_%-$50_^1_(SAZ_%BINARY_-1726 OR 1728 TYPE BINARY_^1_%INA -$20_)CHECKSUM OVERRIDE BIT SET_%*4.0/77*1716_^1_%SAZ SETOVR_'YES_<*4.0/77*1716_^1_(CLR_%A_^1_(STA*_$SWITCH_^1_(JMP*_$ASMD1_/PROCESS AS IF ASCII REQ_^1CHKIT NUM 0_^1SETOVR ENA 1_L*4.0/77*1716_^1_%STA* CKOVR_(SET CHECKSUM OVERRIDE_**4.0/77*1716_^1BINARY_!LDA*_$OVRIDE_(CURRENT SEQ NO TO PREVIOUS_^1_(ARS_%8_^1_%STA* CHKI€€T_^1*_83 CARDS DELETED_0*4.0/77*1716_^1_%SAN CONTON_^1_%STA* SEQ_*RESET SEQUENCE COUNTER_^1CONTON LDA CLMN1F_^1_%SAZ NEXT1_(COLUMN 1 ALREADY PROCESSED_^1_%RTJ SEQNUM_^1NEXT1 JMP* NXTWD_^1*_]_^1YREJ_!JMP* IX_M**MSOS 4.1**_^1_%JMP* EX_M**MSOS 4.1**_^1NOTFST INA -1_(TEST FOR WORD TWO OF CARD_^1_%SAN NOT2ND-*-1_^1*_83 CARDS DELETED_^1_%SQM ISCOMP-*-1_^1_%ENQ 10_+NON-NEGATIVE R€€ECORD LENGTH ERROR **MSOS 4.1**_^1_%JMP EREXIT_'WORD COUNT MUST BE NEG_+**MSOS 4.1**_^1ISCOMP TCQ A_^1_%ADD* CORE_%FWA_^1_%STA* LAST_%LWA_^1_%JMP* NXTWD_^1*_]_^1NOT2ND STQ* (CORE)_#STORE WORD IN CORE BUFFER_^1_%RAO* CORE_%UPDATE BUFFER POINTER_^1_%LDA* CORE_%TEST FOR LAST WORD OF TRANSFER_^1_%SUB* LAST_^1_%SAP ISLAST-*-1_^1NXTWD RAO* WORDCT_^1BACK_!JMP* (STOQ)_#RETURN_^1*_]_^1€€ISLAST ENA -1_^1_%STA* WORDCT_^1_%JMP* BACK_^1*_]_^1CHECK LDQ* CHKSUM_^1_%SQZ CHKOK-*-1_!TEST FOR ZERO CHECKSUM_^1_%LDA* CKOVR_^1_%SAN CHKOK-*-1_^1_%STA* STATS_J**MSOS 4.1**_^1_%ENQ 4_,CHECKSUM ERROR_3**MSOS 4.1**_^1_%JMP EREXIT_I**MSOS 4.1**_^1CHKOK RTJ STOPMO_#STOP CARD MOTION , CLEAR CONTROLLER_^1_%ENA 1_)SET SUCCESSFUL READ CODE FOR EXIT_^1_%JMP (QCARD)_H**MSOS 4.1**_€€^1*_]_^1* *********************************************************************_^1*_!INITIALIZATION ROUTINE FOR CARD READER DRIVER_^1* *********************************************************************_^1*_]_^1SETUP ADC 0_)PARAMETER INITIALIZATION PROGRAM_^1_%STA* SWITCH_#+ = ASCII, - = BINARY_^1_%SAP ASMD-*-1_^1_%TCA A_^1ASMD_!STA* CORE_%BUFFER FIRST WORD ADDR_^1_%SQZ QC€€OUNT-*-1_^1_%AAQ A_)WORD COUNT ALREADY SPECIFIED_^1_%JMP* SVE_^1QCOUNT CLR A_)GET WORD COUNT FROM CARD_^1SVE_"STA* LAST_^1_%CLR A_)INITIALIZE PARAMETERS TO ZDRO_^1_%STA- ASKII,I_$ASCII READ MODE SWITCH_^1_%STA* WORDCT_%CARD WORD COUNT_^1_%STA* OVRIDE_%WORD ONE STORAGE SWITCH_^1_%STA* CHKSUM_%CHECKSUM CELL_^1_%STA* CKOVR_(CHECKSUM OVERRIDE_.*4.0/77*1716_^1_%STA WHCHAR_'1=LOWER_!€€0=UPPER_0**MSOS 4.1**_^1_%LDQ ECARD_J**MSOS 4.1**_^1_%LDA =N$401_$CLEAR CONTROLLER (NEG HOLL TO ASC FOR 405)_^1_%OUT XREJ-*_I**MSOS 4.1**_^1_%JMP* (SETUP)_^1*_]_^1INP_"NUM 0_N**MSOS 4.1**_^1_%LDQ ECARD_J**MSOS 4.1**_^1WATDTA INP XREJ-*_'READ STATUS_6**MSOS 4.1**_^1_%STA STATS_(SAVE STATUS_6**MSOS 4.1**_^1_%ALS 9_N**MSOS 4.1**_^1_%SAM LOSDTA_'SKIP IF LOST DATA_0**MSOS 4.1**€€_^1_%ALS 1_N**MSOS 4.1**_^1_%SAM ALM_*SKIP IF ALARM_4**MSOS 4.1**_^1_%ALS 2_N**MSOS 4.1**_^1_%SAM DATA_)SKIP IF DATA PRESENT_-**MSOS 4.1**_^1_%JMP* WATDTA_'LOOP WAITING FOR DATA READY_%**MSOS 4.1**_^1DATA_!INQ -1_M**MSOS 4.1**_^1_%INP XREJ-*_'READ DATA_8**MSOS 4.1**_^1_(RAO*_$CC_^1_(JMP*_$(INP)_^1LOSDTA ENQ 1_,LOST DATA ERROR_2**MSOS 4.1**_^1EREX_!JMP EREXIT_I**MSOS 4.1**_^€€1ALM_"ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1_%JMP* EREX_K**MSOS 4.1**_^1*_]_^1OVRIDE_!ADC_%0_3CARD WORD 1_^1CHKSUM_!ADC_%0_3CHECKSUM CELL_^1CKOVR_"ADC_%0_3CHECKSUM OVERIDE SWITCH_^1LAST_#NUM_%0_^1*_]_^1* *********************************************************************_^1*_!ASCII READ REQUEST PROCESSOR_^1*_$IF NO RECORD SIZE IS SPECIFIED, 40 WORDS ARE FILLED._^1*_$CONVERSION IS €€FROM HOLLERITH TO ASCII._^1*_$A BINARY RECORD WITH A HOLLERITH * IN COL 1 IS_^1*_'INTERPRETED AS AN ASCII RECORD._^1* *********************************************************************_^1ASCMD_"0_(0_^1_(RAO-_$ASKII,I_-SET ASCII MODE SWITCH_^1_(LDA*_$LAST_^1_(SAN_%IZSET-*-1_^1_%LDA CORE_^1_(INA_%40_^1_(STA*_$LAST_^1IZSET_"LDA_%SWITCH_B**MSOS 4.1**_^1_(SAN_%P-*-1_^1_(JMP*_$READ4€€_/WAS BIN REQ WITH * IN COL 1_^1P_'RTJ_%INPUTC_B**MSOS 4.1**_^1READ4_"LDQ_%W1_F**MSOS 4.1**_^1_(RTJ*_$PROCES_^1_(LDQ_%W2_F**MSOS 4.1**_^1_(RTJ*_$PROCES_^1_(LDQ_%W3_F**MSOS 4.1**_^1_(RTJ*_$PROCES_^1_(LDQ_%W4_F**MSOS 4.1**_^1_(RTJ*_$PROCES_^1_(LDA_%CC_F**MSOS 4.1**_^1_(INA_%-80_^1_(SAP_%1_^1_(JMP*_$P_^1_(JMP*_$(ASCMD)_^1XREJ_!JMP* IX_M**MSOS 4.1**_^1EX_#ENQ 6_,EXTERNAL REJECT ERROR_€€,**MSOS 4.1**_^1_%JMP* EREX_K**MSOS 4.1**_^1IX_#ENQ 5_,INTERNAL REJECT ERROR_,**MSOS 4.1**_^1_%JMP* EREX_K**MSOS 4.1**_^1*_]_^1* *********************************************************************_^1* CONVERSION FROM HOLLERITH TO ASCII_^1* *********************************************************************_^1PROCES ADC 0_^1CONVRT_!ENA_%0_^1_(QLS_%7_^1_(SQP_%1_^1_(INA_%$71_€€1ROW 1_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$62_1ROW 2_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$63_1ROW 3_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$64_1ROW 4_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$65_1ROW 5_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$66_1ROW 6_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$67_1ROW 7_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$18_1ROW 8_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$79_1ROW 9_^1_(AND_%=N$FF8F_-CLEAR CARRY FORCING BIT€€S FOR_^1_(QLS_%5_3NUMERIC PUNCHES_^1_(SQP_%1_^1_(INA_%$70_1ROW 12_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$60_1ROW 11_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$50_1ROW ZERO_^1_(AND_%=N$FFBF_^1_(ENQ_%0_^1_(LLS_%9_3ILLEGAL PUNCH_^1_%SQZ 6_N**MSOS 4.1**_^1_%CLR Q_N**MSOS 4.1**_^1_%STQ STATS_J**MSOS 4.1**_^1_%ENQ 8_,ILLEGAL HOLLERITH PUNCH_***MSOS 4.1**_^1_%JMP EREXIT_#ERROR IN HOLLERITH_^1_(LLS_%6_€€3NO_^1_%LDQ CDRD,Q_I**MSOS 4.1**_^1_(SAZ_%1_3UPPER CHAR_^1_(LRS_%8_3YES,SHIFT IT_^1_(LRS_%8_3TACK ON $FF_^1_(ENQ_%-0_2TO THE TOP_^1_(LRS_%8_3OF IT_^1FRCV_!LDQ* WHCHAR_#UPPER CHAR_^1_%SQN LOWER-*-1_^1_%ALS 8_+YES_^1_%JMP* STORIT_^1LOWER AND (CORE)_%NO_^1STORIT STA (CORE)_^1_%ENA 1_^1_%EOR* WHCHAR_^1_%STA* WHCHAR_^1_%SAN NXTCHR-*-1_^1_%RAO CORE_^1_%LDA CORE_%TEST FOR LAST C€€ORE ADDR_^1_%SUB LAST_^1_%SAN NXTCHR-*-1_^1_%JMP CHKOK_$NORMAL EXIT FROM DRIVER_^1NXTCHR JMP* (PROCES)_^1WHCHAR ADC 0_)UPPER OR LOWER CHAR TEST CELL_^1NSEQ_!NUM 0_^1*_]_^1*_]_^1STOPMO ADC 0_)STOP MOTION AND CLEAR CONTROLLER_^1_%LDQ ECARD_J**MSOS 4.1**_^1TRYDTA INP NOTBSY-*_$TAKE STATUS_6**MSOS 4.1**_^1_%ALS 12_^1_%SAP NO405_(DATA NOT PRESENT_^1_%INQ -1_^1_%INP 0_,GET EO€€P, COLUMN 80_^1_%NOP 0_^1_%INQ 1_^1_%INP NOTBSY-*_^1_%ALS 12_^1NO405 ALS 3_,GET READY_^1_%SAP NOTBSY_'NO ****_:**MSOS 4.1**_^1_%ALS 12_+GET EOP_:**MSOS 4.1**_^1_%SAM 1_,YES EOP_:**MSOS 4.1**_^1_%JMP* TRYDTA_'LOOP READY AND EOP_/**MSOS 4.1**_^1BSY_"INP NOTBSY-*_$INPUT STATUS_^1_%ALS 14_^1_%SAP NBSY_)SKIP IF NOT BUSY_^1_%JMP* BSY_^1NBSY_!EQU NBSY(*)_^1_%ENA 1_N**MSOS 4.€€1**_^1_%OUT 1_,CLEAR CONTROLLER_1**MSOS 4.1**_^1NOTBSY NOP 0_,PASS_=**MSOS 4.1**_^1_%JMP* (STOPMO)_$RETURN TO CALLER_1**MSOS 4.1**_^1CLMN1F NUM 0_,1ST COLUMN FLAG_^1SEQNUM NUM 0_,RETURN EXIT_^1_%LDA OVRIDE_^1_%ARS 8_,REMOVE 7-9 AND ZEROES_^1_%AND =N$00FF_%STRIP OFF SIGN EXTENSION_^1_%STA* NSEQ_^1_%SUB SEQ_^1_%SAZ GOON_^1_%LDA* NSEQ_)SAVE SEQ NUM IN ERROR FOR RETRY_^1_%STA € SEQ_^1_%ENQ 9_,SEQUENCE ERROR_3**MSOS 4.1**_^1_%CLR A_N**MSOS 4.1**_^1_%STA STATS_(STATUS MEANINGLESS_/**MSOS 4.1**_^1_%JMP EREXIT_I**MSOS 4.1**_^1GOON_!RAO SEQ_*BUMP SEQUENCE COUNTER_^1_%ENA 0_^1_%STA* CLMN1F_'RESET COLUMN 1 FLAG_^1_%JMP* (SEQNUM)_$NORMAL EXIT_^1_%END_]_^__PQCDDMY CSY/ B48 Pj1_%NAM QCDDMY_'DECK-ID B48 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY CARD READER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT QCARD_^1_%ENT ECARD_^1QCARD NUM $FFFF_(DUMMY ENTRY_^1ECARD NUM 0_,DUMMY EQUIPMENT CODE_^1_%END_]_^__ jPQDKDMY CSY/ B49 P€1_%NAM QDKDMY_'DECK-ID B49 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY DISK DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT QDISK_^1_%ENT EDISK_^1_%ENT DISK_^1QDISK NUM $FFFF_(DUMMY ENTRY_^1EDISK NUM 0_,DUMMY EQUIPMENT CODE_^1_%EQU DISK(QDISK)_^1_%END_€]_^__ PQDMDMY CSY/ B50 P€1_%NAM QDMDMY_'DECK-ID B50 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY DRUM DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT QDRUM_^1_%ENT EDRUM_^1_%ENT DRUM_^1QDRUM NUM $FFFF_(DUMMY ENTRY_^1EDRUM NUM 0_,DUMMY EQUIPMENT CODE_^1_%EQU DRUM(QDRUM)_^1_%END_€]_^__ PQMTDMY CSY/ B51 Ph1_%NAM QMTDMY_'DECK-ID B51 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY MAG TAPE DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT QMTAPE_^1_%ENT EMTAPE_^1QMTAPE NUM $FFFF_(DUMMY ENTRY_^1EMTAPE NUM 0_,DUMMY EQUIPMENT CODE_^1_%END_]_^__hPQMT7TK CSY/ B52 P€1_%NAM QMT7TK_'DECK-ID B52 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1731/601, 1732-1/608, 1732-2/615-73 MAG TAPE INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$IDRIV FOR MAG TAPE, USED WITH SYS INITIALIZER IDRIV CONTROLLER_^1_%SPC 1_^1*_$PACKING IS 3-16 BIT WORDS FROM 8 €€FRAMES OF TAPE_^1*_$THE TAPE FORMAT IS 6,6,4-2,6,6,2-4,6,6_^1************************************************************************_^1*_]_'*_^1*_@NOTE_@*_^1*_@****_@*_^1*_]_'*_^1*_]_'*_^1*_$THIS DRIVER WILL NOT ACCEPT (AS LEGAL DATA) ANY RECORD_)*_^1*_$WHICH HAS A LENGTH LESS THAN OR EQUAL TO EQUATE 'SNRL'_)*_^1*_]_'*_^1*_]_'*_^1***************************************************€€*********************_^1************************************************************************_^1*_@ENTRY PARAMETERS_4*_^1*_A(A) = BUFFER FWA_3*_^1*_A(Q) = NO. OF WORDS TO READ_)*_^1*_]_'*_^1*_@EXIT PARAMETERS_5*_^1*_A(A) = 0- ERROR EXIT_0*_^1*_A(A) = 1 - NORMAL EXIT_.*_^1************************************************************************_^1*_]_^1****************************€€**********************************MSOS 4.1**_^1*_$ERROR EXIT CONDITIONS_?**MSOS 4.1**_^1*_((A) = 0_J**MSOS 4.1**_^1*_((Q) = ERROR CODE_A**MSOS 4.1**_^1*_)2 = ALARM ERROR_@**MSOS 4.1**_^1*_)3 = PARITY ERROR_?**MSOS 4.1**_^1*_)5 = INTERNAL REJECT ERROR_6**MSOS 4.1**_^1*_((I) = LAST HARDWARE STATUS_7**MSOS 4.1**_^1**************************************************************MSOS 4€€.1**_^1_%ENT QMTAPE_'BASIC DRIVER ENTRY_/**MSOS 4.1**_^1_%ENT EMTAPE_'BASIC W,E,S FUNCTION CODE_(**MSOS 4.1**_^1SNRL_!EQU SNRL(2)_%LENGTH OF SYSTEM NOISE RECORD(SNR)_^1_%EQU ASKII(70)_#ASCII MODE SWITCH IN LDRTBL_^1_%EQU DEVICE(7)_#STANDARD EQUIPMENT TAPE CODE_%**MSOS 4.1_^1QMTAPE ADC 0_N**MSOS 4.1**_^1_%STQ* CALSEQ_'WORDS TO READ_^1_%SAP 1_,SKIP IF BFWA NEG._^1_%TCA A_^1_%€€STA* SAVCOR_'BFWA_^1_%ENA -10_*NO. OF RETRYS_^1_%STA* RCOUNT_^1_%CLR A_^1_%STA- ASKII,I_^1RTRYE LDQ* EMTAPE_I**MSOS 4.1**_^1FREJA ENA 1_,CLEAR CONTROLLER_1**MSOS 4.1**_^1_%OUT FREJ-*_I**MSOS 4.1**_^1_%INQ 1_^1_%LDA* UNISEL_'UNIT SELECT CODE_^1_%OUT -1_^1RETRY LDQ* EMTAPE_I**MSOS 4.1**_^1_%INP -1_^1_%AND* H0003_^1_%INA -1_^1_%SAZ READ-*-1_$SKIP IF READY AND NOT BUSY_^1_%€€JMP* RETRY_^1READ_!LDA* SAVCOR_^1_%STA* CORE_^1_%LDQ* CALSEQ_^1_%SQM NOCOMP-*-1_^1_%SQN 1_^1_%ENQ 96_^1_%TCQ Q_^1NOCOMP STQ* COUNT_^1_%STQ* WDCNTR_'-REQUESTED WORDS_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%LDA* H0100_^1_%OUT -1_^1MOREAD ENA 0_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%INQ -1_^1_%INP REJ1-*-1_^1_%ALS 10_^1_%STA* TEMP_^1MRD1_!ENA 0_^1_%INP REJ2-*-1_^1_%ALS 4_^1_%ADD* TEM€€P_^1_%STA* TEMP_^1MRD2_!ENA 0_^1_%INP REJ3-*-1_^1_%ENQ $3_^1_%LAQ Q_^1_%ARS 2_^1_%EOR* TEMP_^1_%STQ* TEMP_^1_%STA* (CORE)_'1ST WORD 6-6-4_^1_%RAO* CORE_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%SAN 1_^1_%JMP* SPIN_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%INQ -1_^1MRD3_!ENA 0_^1_%INP REJ4-*-1_^1_%LDQ* TEMP_^1_%ALS 10_^1_%LRS 2_^1_%STA* TEMP_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%INQ -1_^1MR€€D4_!ENA 0_^1_%INP REJ5-*-1_^1_%ALS 2_^1_%ADD* TEMP_^1_%STA* TEMP_^1MRD5_!ENA 0_^1_%INP REJ6-*-1_^1_%ENQ $F_^1_%LAQ Q_^1_%ARS 4_^1_%EOR* TEMP_^1_%STQ* TEMP_^1_%STA* (CORE)_'2ND WORD 2-6-6-2_^1_%RAO* CORE_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%SAN 1_^1_%JMP* SPIN_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%INQ -1_^1MRD6_!ENA 0_^1_%INP REJ7-*-1_^1_%LDQ* TEMP_^1_%ALS 10_^1_%LRS 4_^1_%ST€€A* TEMP_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%INQ -1_^1MRD7_!ENA 0_^1_%INP REJ8-*-1_^1_%EOR* TEMP_^1_%STA* (CORE)_'3RD WORD 4-6-6_^1_%RAO* CORE_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%SAZ SPIN_^1_%JMP* MOREAD_^1SPIN_!LDQ* EMTAPE_I**MSOS 4.1**_^1_%INQ -1_^1SPINNR INP REJ9-*-1_^1_%JMP* *-1_^1STATUS NUM 0_,LAST HARDWARE STATUS_-**MSOS 4.1**_^1H0100 NUM $100_^1H0003 NUM $3_^1WDCNTR NU€€M 0_,-WORDS TO TRANSFER_^1EMTAPE ADC DEVICE*128+1 BASIC W,E,S FUNCTION_-**MSOS 4.1**_^1UNISEL NUM $415_)UNIT 0,556 BPI, BINARY, CHAR MODE_^1H0180 NUM $180_^1SAVCOR NUM 0_^1TEMP_!NUM 0_^1CORE_!NUM 0_^1RCOUNT NUM 0_^1COUNT NUM 0_^1CALSEQ NUM 0_^1INTREJ CLR A_,INTERNAL REJECT_2**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%ENQ 5_,ERROR 5_:**MSOS 4.1**_^1_%JMP* EXIT_K**MSOS 4€€.1**_^1FREJ_!JMP* INTREJ_I**MSOS 4.1**_^1_%JMP* FREJA_(HANG ON EXTERNAL REJECT_***MSOS 4.1**_^1REJ1_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* MOREAD_^1REJ2_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* MRD1_^1REJ3_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* MRD2_^1REJ4_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* MRD3_^1REJ5_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* MRD4_^1REJ6_!RTJ* R€€EJA_)COMMON REJECT ROUTINE_^1_%JMP* MRD5_^1REJ7_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* MRD6_^1REJ8_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* MRD7_^1REJ9_!RTJ* REJA_)COMMON REJECT ROUTINE_^1_%JMP* SPINNR_^1REJA_!NOP 0_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%INP -1_^1_%STA* STATUS_'SAVE HARDWARE STATUS_-**MSOS 4.1**_^1_%AND =N$10_^1_%SAN EOP-*-1_%SKIP IF EOP_^1_%INQ -1_^1_%JMP* (€€REJA)_'EXIT_^1EOP_"NOP 0_^1_%INP -1_^1_%STA* STATUS_'SAVE HARDWARE STATUS_-**MSOS 4.1**_^1_%AND =N$0160_%PARITY ERROR,LOST DATA + ALARM_^1_%TRA Q_^1_%LDA* WDCNTR_'-REQUESTED WORDS_^1_%SUB* COUNT_(WORDS READ (WDCNTR-COUNT)_^1_%ADD =XSNRL_'LENGTH OF SNR_^1_%SQN PARITY-*-1_"SKIP IF RECORD HAS ALARM_^1_%SAP TRYAGN_J**MSOS 4.1_^1_%JMP* NORML_K**MSOS 4.1_^1TRYAGN JMP READ_^1PARIT€€Y SAM SNRNOT-*-1_"SKIP IF NOT SNR_^1_%JMP* TRYAGN_^1SNRNOT RAO* RCOUNT_'TRY AGAIN_^1_%LDA* RCOUNT_^1_%SAZ ERROR_(SKIP IF ERROR_4**MSOS 4.1**_^1RETRI LDA* H0180_(BACKSPACE FUNCTION_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%OUT -1_^1_%JMP RETRY_^1ERROR LDA* STATUS_'LOOK AT LAST STATUS_.**MSOS 4.1**_^1_%AND* H0100_J**MSOS 4.1**_^1_%SAZ ALARM_(SKIP ON ALARM ERROR_.**MSOS 4.1**_^1_%ENQ €€3_,PARITY ERROR_5**MSOS 4.1**_^1_%JMP* EREXIT_I**MSOS 4.1**_^1ALARM ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1EREXIT LDA* STATUS_'PASS LAST STATUS_1**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%CLR A_N**MSOS 4.1**_^1_%JMP* EXIT_K**MSOS 4.1**_^1NORML LDA* (SAVCOR)_$FIRST WORD OF INPUT_^1_%CLR Q_^1_%LLS 8_^1_%ENA 1_^1_%INQ -$2A_^1_%SQN EXIT-*-1_$SKIP IF BINARY RECORD_^1_%STA- ASKII,I_^€>1EXIT_!JMP (QMTAPE)_$DRIVER EXIT_6**MSOS 4.1**_^1_%END_]_^__ >PQMT9TK CSY/ B53 P€1_%NAM QMT9TK_'DECK-ID B53 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1732-1/609 AND 1732-2/615-93 MAG TAPE INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*THIS DRIVER IS OPERATED BY THE IDRIV CONTROLLER._^1*_$NINE TRACK ONLY, UNIT 0, ASSEMBLY MODE_^1************************€€************************************************_^1*_]_'*_^1*_@NOTE_@*_^1*_@****_@*_^1*_]_'*_^1*_]_'*_^1*_$THIS DRIVER WILL NOT ACCEPT (AS LEGAL DATA) ANY RECORD_)*_^1*_$WHICH HAS A LENGTH LESS THAN OR EQUAL TO EQUATE 'SNRL'_)*_^1*_]_'*_^1*_]_'*_^1************************************************************************_^1*_@ENTRY PARAMETERS_4*_^1*_A(A) = BUFFER FWA_3*_^1*_A(Q) = NO€€. OF WORDS TO READ_)*_^1*_]_'*_^1*_@EXIT PARAMETERS_5*_^1*_A(A) = 0- ERROR EXIT_0*_^1*_A(A) = 1 - NORMAL EXIT_.*_^1************************************************************************_^1*_]_^1**************************************************************MSOS 4.1**_^1*_$ERROR EXIT CONDITIONS_?**MSOS 4.1**_^1*_)(A) = 0_I**MSOS 4.1**_^1*_)(Q) = ERROR CODE_@**MSOS 4.1**_^1*_.2 = AL€€ARM ERROR_<**MSOS 4.1**_^1*_.3 = PARITY ERROR_;**MSOS 4.1**_^1*_)(I) = LAST HARDWARE STATUS_6**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%ENT QMTAPE_'BASIC ENTRY_6**MSOS 4.1**_^1_%ENT EMTAPE_'EQUIPMENT CODE_3**MSOS 4.1**_^1SNRL_!EQU SNRL(2)_%LENGTH OF SYSTEM NOISE RECORD(SNR)_^1_%EQU ASKII(70)_#ASCII MODE SWITCH IN LDRTBL_^1_%EQU €€DEVICE(7)_#EQUIPMENT 7_6**MSOS 4.1**_^1QMTAPE NUM 0_,BASIC ENTRY_6**MSOS 4.1**_^1_%STQ* CALSEQ_'SAVE WORD COUNT_^1_%SAP 1_,SKIP IF BFWA NEG._^1_%TCA A_^1_%STA* SAVCOR_'BFWA_^1_%ENA -10_*SET RETRY COUNT IN CASE OF A READ ERROR_^1_%STA* RCOUNT_'COUNT_^1_%CLR A_,SET MODE BINARY_^1_%STA- ASKII,I_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%ENA 1_^1_%OUT -1_+CLEAR CONTROLLER_^1_%INQ 1_^1_%€€LDA =N$0448_%SELECT UNIT 0, ASSEMBLY MODE, 800 BPI_^1_%NOP 0_^1_%OUT -1_^1RETRY LDQ* EMTAPE_I**MSOS 4.1**_^1_%INP -1_^1_%STA* STATUS_'SAVE STATUS_6**MSOS 4.1**_^1_%AND =N$3_^1_%INA -1_^1_%SAZ READ-*-1_$SKIP IF READY AND NOT BUSY_^1_%JMP* RETRY_^1READ_!LDA* SAVCOR_^1_%STA* CORE_)BFWA_^1_%LDQ* CALSEQ_'FETCH WORD COUNT_^1_%SQM NOCOMP-*-1_^1_%SQN 1_^1_%ENQ 96_^1_%TCQ Q_^1NO€€COMP STQ* COUNT_^1_%STQ* WDCNTR_'-REQUESTED WORDS_^1_%LDA =N$100_'READ MOTION_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%OUT -1_^1_%INQ -1_+FOR INPUT_^1LOOPR CLR A_^1_%INP EOPLOP-*_$REJECT MAY BE EOP_^1_%STA* (CORE)_'STORE II_^1_%RAO* CORE_)TALLY_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%SAZ NORML1-*-1_"SKIP IF REQUEST DONE_^1_%JMP* LOOPR_^1EOPLOP NOP 0_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%INP€€ -1_+STATUS_^1_%STA* STATUS_'SAVE STATUS_6**MSOS 4.1**_^1_%AND* EOPV_)MASK FOR EOP_^1_%SAN 2_^1_%INQ -1_+DECREMENT BACK TO INPUT_^1_%JMP* LOOPR_(CONTINUE IF NOT EOP_^1NORML1 LDQ* EMTAPE_I**MSOS 4.1**_^1_%INP -1_+STATUS_^1_%ALS 11_^1_%SAM 1_,SKIP IF EOP_^1_%JMP* NORML1_^1_%ALS 5_,STATUS SET PROPER_^1_%STA* STATUS_'SAVE STATUS_^1_%AND =N$0160_%PARITY ERROR,LOST DATA + ALARM_^€€1_%TRA Q_^1_%LDA* WDCNTR_'-REQUESTED WORDS_^1_%SUB* COUNT_(WORDS READ (WDCNTR-COUNT)_^1_%ADD =XSNRL_'LENGTH OF SNR_^1_%SQN PARITY-*-1_"SKIP IF RECORD HAS ALARM_^1_%SAM NORMLA_'SKIP IF NOT SNR_^1_%JMP* READ_^1NORMLA JMP* NORML_J**MSOS 4.1**_^1PARITY SAM SNRNOT-*-1_"SKIP IF NOT SNR_^1_%JMP* READ_^1SNRNOT RAO* RCOUNT_'TRY AGAIN_^1_%LDA* RCOUNT_'RETRIED ENOUGH TIMES_^1_%SAN TRY_*€€TRY AGAIN_8**MSOS 4.1**_^1_%LDA* STATUS_'LOOK AT STATUS_3**MSOS 4.1**_^1_%AND =N$100_I**MSOS 4.1**_^1_%SAZ ALARM_(SKIP IF ALARM_4**MSOS 4.1**_^1_%ENQ 3_,PARITY ERROR_5**MSOS 4.1**_^1_%JMP* EREXIT_I**MSOS 4.1**_^1ALARM ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1EREXIT LDA* STATUS_'GET LAST STATUS_2**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%CLR A_N**MSOS 4.1**_^1_%JMP* (QMTAPE)_$ERROR E€€XIT_7**MSOS 4.1**_^1TRY_"LDA =N$180_I**MSOS 4.1**_^1_%LDQ* EMTAPE_I**MSOS 4.1**_^1_%OUT -1_+BACKSPACE 1 RECORD_^1_%JMP* RETRY_(REREAD THE RECORD_^1NORML LDA* (SAVCOR)_$FIRST WORD OF INPUT_^1_%CLR Q_^1_%LLS 8_^1_%ENA 1_^1_%INQ -$2A_^1_%SQN EXIT-*-1_$SKIP IF BINARY RECORD_^1_%STA- ASKII,I_^1EXIT_!JMP* (QMTAPE)_$NORMAL EXIT_6**MSOS 4.1**_^1*_]_^1WDCNTR NUM 0_,-WORDS TO TRANSF€μER_^1CALSEQ ADC 0_^1SAVCOR ADC 0_^1COUNT ADC 0_^1RCOUNT ADC 0_^1CORE_!ADC 0_^1EMTAPE ADC DEVICE*128+1 W,E,S FUNCTION CODE_.**MSOS 4.1**_^1EOPV_!NUM $10_*END OF OPERATION STATUS VALUE_^1STATUS NUM 0_N**MSOS 4.1**_^1_%END_]_^__ μPQPRDMY CSY/ B54 P€1_%NAM QPRDMY_'DECK-ID B54 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY LINE PRINTER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT QPRINT_^1_%ENT EPRINT_^1_%ENT FORMFD_^1_%ENT HEADR1_^1QPRINT NUM $FFFF_(DUMMY ENTRY_^1EPRINT NUM 0_,DUMMY EQUIPMENT CODE_^€41FORMFD NUM 0_^1HEADR1 BSS HEADR1(4)_^1_%END_]_^__4PQPTAP1 CSY/ B55 P€1_%NAM QPTAP1_'DECK-ID B55 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$IDRIV FOR 1720-1 PAPER TAPE READER, SYS INITIALIZER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 1_^1****_!FUNCTION._^1*_$--------._^1*S1_"THIS PROGRAM READS DATA FROM THE 1720-1 PAPER TAPE_^1*_$READER FOR THE SYSTEM €€INTIALIZER. THE PROGRAM_^1*_$DRIVES IN A STATUS MODE. INTERRUPT ARE NOT USED._^1*_*THIS MODULE IS ONLY USED BY IDRIV CONTROLLER MODULE._^1*_]_^1*S1_"ENTRY._^1*_$-----_^1*_]_^1*_$ON ENTRY, THE REGISTERS CONTAIN-_^1*_*A = WORD COUNT TO BE READ._^1*_*I = ADDRESS OF THE SI WORK AREA._^1*_]_^1*S1_"EXIT._^1*_$----_^1*S1_"ON EXIT, IF NO ERRORS WERE DETECTED -_^1*_*A = 0_^1*_$IF ERRORS WER€€E DETECTED -_^1*_*A = -0_^1*_*Q = ERROR CODE._^1*_,= 2 ALARM._^1*_,= 3 PARITY ERROR._^1*_,= 4 CHECKSUM ERROR._^1*_,= 58 ILLEGAL RECORD LENGTH (GT. WPR)._^1*_*I = LAST HARDWARE STATUS._^1*_]_^1*S1_]_^1_%ENT QPTAPE_'BASIC DRIVER ENTRY_^1_%ENT EPTAPE_'EQUIPMENT - W,E,S CODE_^1****_]_^1*_!********************************************************************_^1*_#THE FOLLOWING PARAMETE€€R MUST BE SUPPLIED._^1_%EQU WPR(96)_"MAXIMUM PERMISSIBLE RECORD SIZE_^1*_!********************************************************************_^1_%EQU ASKII(70)_^1QPTAPE NUM 0_,BASIC DRIVER ENTRY_^1_%ENQ 0_^1_%STQ- ASKII,I_^1_%STQ- 25,I_%PUT ZERO IN CHARACTER COUNT_^1_%ENQ -2_(TURN ON LEADER SWITCH_^1_%STQ* LEADER_^1_%STA- 24,I_%SET WRDCNT TO 1ST WRD ADR/INPUT_^1_%LDQ* BINSET_€€'SET MODE TO BINARY_^1_%SAP SET1-*-1_^1_%TCA A_)COMPLEMENT NEGATIVE VALUE FOR_^1_%STA- 24,I_(ADDRESS COUNT IF BINARY READ_^1SET1_!STQ* MODSET_^1_%LDA- 24,I_%WORD COUNT_^1_%ALS 1_^1_%STA- 24,I_%CHARACTER COUNT_^1_%LDA* LEDSET_#SET READSW TO SLEW PAST LEADER_^1_%STA* READSW+1_^1_%LDA* START_^1SET2_!LDQ =N0_^1_%SQN SET3_)IS IT FIRST TIME THROUGH_^1_%INA 1_,SET BIT TO CLEAR CONTR€€OLLER_^1_%STA* SET2+1_'TURN OFF FIRST TIME FLAG_^1SET3_!LDQ* EPTAPE_^1SISTRT OUT -2_(INSTRUCT DEVICE TO BEGIN OPTION_^1INPSTA RTJ RDSTAT_#GET STATUS_^1READIN LDQ* EPTAPE_^1_%INQ -1_^1_%CLR A_^1INPSYS INP -1_(READ CHARACTER_^1_%STA- 11,I_%STORE CHARACTER IN INPREL_^1READSW NUM $1800,$FFFF_^1ASCII LDA- 11,I_^1_%RAO- ASKII,I_"SET ASCII SWITCH TO ON_^1_%SPA- 11,I_^1_%SAN ERR1_)€€TEST FOR AND XFER IF NOT A_^1_%ENQ 3_,PARITY ERROR_^1_%JMP* INPERR_^1ERR1_!ENA $7F_*LOAD CHARACTER MASK_^1_%AND- 11,I_%STRIP PARITY BIT FROM CHARACTER_^1_%STA- 11,I_^1_%INA -$A_^1_%SAN 1_)TEST FOR AND XFER IF_^1_%JMP* INPSTA_%CHARACTER IS LINE FEED_^1_%INA -3_^1_%SAN 1_)TEST FOR AND XFER IF_^1_%JMP* INPXIT_%CHARACTER IS CARRIAGE RETURN_^1_%INA -$72_^1_%SAN 1_)TEST FOR AND X€€FER IF_^1_%JMP* INPSTA_%CHARACTER IS DELETE_^1BINMOD LDA- 24,I_%STORE RIGHT CHARACTER BITS_^1_%ENQ 0_^1_%LLS 15_^1_%INQ -1_^1_%SAP RDLEFT-*-1 SKIP IF LEFT CHARACTER_^1_%LDA- 11,I_%STORE RIGHT CHARACTER IN BITS_^1_%EQU MFF00(68)_^1_%EOR- MFF00,I_%0-7 OF ADDRESS IN WRDCNT_^1_%AND- 1,Q_^1_%STA- 1,Q_^1_%ADD* CHCKSM_#ADD VALUE TO CHECKSUM_^1_%STA* CHCKSM_^1_%JMP* CNTST2_^1RDLEFT LD€€A- 11,I_%STORE LEFT CHARACTER IN BITS_^1_%ALS 8_+8-15 OF ADDRESS IN WRDCNT_^1_%EQU M00FF(69)_^1_%EOR- M00FF,I_^1_%STA- 1,Q_^1CNTST2 RAO- 24,I_%PUT (WRDCNT) + 1 IN WRDCNT_^1_%RAO- 25,I_%PUT (COUNT1) + 1 IN COUNT1_^1_%LDA- 25,I_^1_%SAZ 1_)TEST FOR AND XFER IF_^1_%JMP* INPSTA_%(COUNT1) NON ZERO_^1_%ENA 0_^1_%STA* LEADER_^1_%ENA -2_^1_%STA- 25,I_^1READSM RTJ* RDSTAT_#GET STATUS_^1€€_%LDA* LEADER_^1_%ALS 8_^1_%LDQ* EPTAPE_^1_%INQ -1_^1_%NOP 0_^1_%INP -1_(READ CHAR OF CHECKSUM_^1_%STA* LEADER_^1_%RAO- 25,I_^1_%LDA- 25,I_^1_%SAZ 1_)TEST FOR AND XFER IF_^1_%JMP* READSM_%NOT 2ND CHARACTER_^1_%LDA* LEADER_^1_%ADD* CHCKSM_^1_%SAZ INPXIT_'TEST FOR AND XFER IF NO A_^1_%ENQ 4_^1_%JMP* INPERR_%CHECKSUM ERROR_^1INPXIT LDA* STOP_^1_%LDQ* EPTAPE_^1_%OUT -1_^1_%ENA €€ -0_^1_%JMP* (QPTAPE)_$RETURN WITHOUT ERROR_^1INPERR LDA* STOP_^1_%STQ* ERRCOD_'SAVE ERROR CODE_^1_%LDQ* EPTAPE_^1_%OUT -1_^1_%LDA* STATUS_'PASS LAST STATUS_^1_%STA- I_^1_%LDQ* ERRCOD_'PASS ERROR CODE_^1_%ENA 0_^1_%JMP* (QPTAPE)_$RETURN WITH ERROR_^1START NUM $20_^1STOP_!NUM $40_^1LEADER NUM -0_^1EPTAPE NUM $A1_*W,E,S FUNCTION CODE_^1ERRCOD NUM 0_^1LEDSET_!ADC_%BINARY-READS€€W-1_^1ASCSET_!ADC_%ASCII-READSW-1_^1BINSET_!ADC_%BINMOD-READSW-1_^1MODSET ADC ($7FFF)_^1CHCKSM NUM $FFFF_^1FSTWRD NUM $FFFF_^1LSTWRD NUM $FFFF_^1MWPR_!ADC WPR+1_$WRDS PER RECORD + 1_^1BINARY LDA* LEADER_^1_%SAN LDRTST-*-1 SKIP IF LEADER SWITCH ON_^1_%LDA- 25,I_^1_%LDQ =N$5500_"IF RECORD LENGTH IN EXCESS OF_^1_%AAQ Q_+$54FF, AMOUNT IS BIASED BY_^1_%SQP 2_++$100. REDUCE LEN€€GTH VALUE B_^1_%ADD =N$100_%$100 FOR TRUE VALUE._^1_%STA* CHCKSM_^1_%ALS 1_^1_%STA- 25,I_^1ASCMOD LDA* MODSET_^1_%STA* READSW+1_!SET READSW TO 'CNTSET'_^1_%JMP* BINMOD_^1LDRTST INA 1_^1_%SAM 1_)TEST FOR AND XFER IF_^1_%JMP* LDRPRO_%IF NOT FIRST CHARACTER_^1_%LDA- 11,I_^1_%SAN 1_)SKIP IF CHR NOT LEADER_^1_%JMP* INPSTA_^1_%LDA* MODSET_^1_%SUB* ASCSET_#TEST FOR AND SKIP IF NOT_^1€€_%SAN CHRTST-*-1_!ASCII READ OPERATION_^1_%LDA* ASCSET_#SET READ SWITCH TO POSITION_^1_%STA* READSW+1_#FOR ASCII INPUT AND JUMP TO_^1_%JMP* ASCII_'PROCESS FIRST INPUT CHAR._^1CHRTST LDA- 11,I_^1_%SUB =N$AA_$TEST FOR AND SKIP IF 1ST CHR_^1_%SAN LDRPRO-*-1_!OF INPUT NOT AN ASTERISK_^1_%STA* LEADER_#TURN OFF LEADER SWITCH_^1_%LDA =N$2AFF_^1_%LDQ- 24,I_^1_%QLS 15_^1_%INQ -1_^1_%S€€TA- 1,Q_^1_%LDA* ASCSET_^1_%STA* READSW+1_!SET READSW TO 'ASCII'_^1_%JMP* CNTST2_^1LDRPRO RAO* LEADER_#INCREASE LEADER COUNT_^1_%LDA- 25,I_^1_%ALS 8_^1_%ADD- 11,I_^1_%STA- 25,I_^1_%TCA A_)MAKE COUNT POS_^1_%SUB* MWPR_%MAX PERMISSIBLE RECORD SIZE_^1_%SAP TSET1B_'INPUT ERROR IF POS_^1_%JMP INPSTA_^1TSET1B ENA 1_^1_%ENQ 58_+RECORD SIZE EXCEEDS WPR EQU_^1_%JMP* INPERR+1_^1RDSTAT €€NUM $FFFF_^1_%LDQ* EPTAPE_^1_%INP -1_(GET STATUS OF READ DEVICE_^1_%STA* STATUS_^1_%ENQ 8_^1_%LAQ Q_^1_%AND* PTSTAT_^1_%SAZ NOALA_^1SET1B ENA 1_^1_%ENQ 2_,ALARM ERROR_^1_%JMP* INPERR+1_^1NOALA SQN 1_,TEST FOR AND XFER IF_^1_%JMP* RDSTAT+1_#CHARACTER NOT TRANSMITTED_^1_%JMP* (RDSTAT)_!EXIT_^1PTSTAT NUM $520_)BACKWARD,PARITY,ALARM_54.3_^1*_8BIT 6 LOST DATA_^1*_8BIT 5 ALA€ RM_^1STATUS NUM 0_^1_%END_]_^__ PQPTDMY CSY/ B56 Pj1_%NAM QPTDMY_'DECK-ID B56 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY PAPER TAPE DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT QPTAPE_^1_%ENT EPTAPE_^1QPTAPE NUM $FFFF_(DUMMY ENTRY_^1EPTAPE NUM 0_,DUMMY EQUIPMENT CODE_^1_%END_]_^__jPQ1711 CSY/ B57 P€1_%NAM Q1711_(DECK-ID B57 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1711/1713 TELETYPE KEYBOARD INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT QCOM_)BASIC ENTRY_6**MSOS 4.1**_^1_%ENT TTYOUT_^1_%ENT TELOUT_^1_%ENT ECOM_)EQUIPMENT CODE_3**MSOS 4.1**_^1_%SPC 2_^1_%EXT€€* CO,TABLE_^1_%EXT* BACKGR_^1_%SPC 2_^1*_82 CARDS DELETED_^1_%SPC 2_^1**************************************************************MSOS 4.1**_^1*_$ERROR EXIT CONDITIONS_?**MSOS 4.1**_^1*_*(A) = 0_H**MSOS 4.1**_^1*_*(Q) = ERROR CODE_?**MSOS 4.1**_^1*_13= INPUT PARITY ERROR_3**MSOS 4.1**_^1*_*(I) = LAST HARDWARE STATUS_5**MSOS 4.1**_^1**********************************************€€****************MSOS 4.1**_^1_%SPC 1_^1QCOM_!NUM 0_^1_%STA* FSTWRD_'SAVE FIRST WORD ADDRESS_^1_%STQ* NUMWDS_'SAVE NUMBER OF WORDS_^1_%SQN LDQCO_^1_%JMP* ISN_+Q ZERO AT QCOM ENTRY IMPLIES READ_^1*_]_^1*******_#ENTRY_^1TELOUT NOP 0_^1_%STA* FSTWRD_'SAVE BUFFER ADDRESS_^1_%STQ* NUMWDS_'SAVE WORD COUNT_^1_%LDA* TELOUT_'SETUP RETURN ADDRESS_^1_%STA* QCOM_^1_%JMP* ISN_^1LDQCO LDQ C€€O_^1_%ADQ TABLE,Q_^1AT_#ADQ =XTABLE_^1_%ADQ =X(AT-RJ)_^1_%STQ* RJ+1_^1_%LDQ* NUMWDS_'RESTORE WORD COUNT_^1_%LDA* FSTWRD_^1RJ_#RTJ AT_^1_%JMP* (QCOM)_^1*_]_^1*******_#ENTRY_^1TTYOUT ADC 0_^1_%LDA* QCOM_^1_%STA* SAVRET_^1_%RTJ* SAVAD_^1_%LDA* SAVRET_^1_%STA* QCOM_^1_%JMP* (TTYOUT)_^1SAVRET ADC 0_^1SAVAD ADC 0_^1_%LDA* SAVAD_^1_%STA* QCOM_^1*_]_^1*_$QCOM - TELOUT - TTYOUT ENT€€RIES COME TO 'ISN'_^1ISN_"LDA* WRSET_(IF TYPEWRITER OUTPUT_^1_%STA* IOSW+1_%1. SET IOSW TO 'WRITE'_^1_%LDA* WRMODE_^1_%STA* MODSET_'2. SET MODSET TO $100_^1_%SQN SETWR-*-1 SKIP IF WRITE OPERATION_^1*_$SET FOR READ MODE_^1_%LDA* RDMODE_^1_%STA* MODSET_%1. SET MODSET TO $200_^1_%LDA* RDSET_^1_%STA* IOSW+1_%2. SET IOSW TO 'READ'_^1*_$WANT TO SET BREAK LIGHT_^1_%LDA* WRMODE_#TYPEWRIT€€ER TO WRITE MODE_^1_%LDQ* ECOM_K**MSOS 4.1**_^1_%OUT -1_^1_%INQ -1_^1_%CLR A_^1_%OUT -1_+TWO SUCCESSIVE NULLS (A=0) ARE_^1_%OUT -1_+NEEDED FOR BREAK LIGHT_^1_%JMP* RUNCHK_^1SETWR LDQ* FSTWRD_'CHECK FOR END OF BUFFER_^1_%ADQ* NUMWDS_L62*1337_^1_%INQ -2_P62*1337_^1TSTBL LDA- 1,Q_*GET WORD FROM BUFFER_062*1337_^1_%SAM BCKGND_'SKIP IF BACK GROUNDED_/62*1337_^1_%SUB =N$2020_K6€€2*1337_^1_%SAN NOBL_)SKIP IF NOT SPACES_262*1337_^1BCKGND INQ -1_+DECREMENT BUFFER LENGTH_-62*1337_^1_%JMP* TSTBL_(CHECK NEXT_:62*1337_^1NOBL_!LDA* FSTWRD_L62*1337_^1_%TCA A_Q62*1337_^1_%INQ 2_Q62*1337_^1_%AAQ A_Q62*1337_^1_%STA* NUMWDS_L62*1337_^1_%LDQ* ECOM_B62*1337 **MSOS 4.1**_^1_%LDA* WRMODE_^1_%OUT -1_(SET TYPEWRITER TO WRITE MODE_^1RUNCHK LDQ* ECOM_K**MSOS 4.1**_^1_%I€€NP -1_(TAKE INITIAL STATUS_^1_%STA* STATUS_'SAVE STATUS_6**MSOS 4.1**_^1_%ALS 14_+CHECK BUSY BIT_^1_%SAP START-*-1_#SKIP IF NOT BUSY_^1_%JMP* RUNCHK_^1START LDQ* ECOM_K**MSOS 4.1**_^1_%INQ -1_^1_%ENA $D_(SEND CARRIAGE RETURN AND_^1_%OUT -1_*AND LINE FEED_^1_%OUT -1_+DELAY FOR HARD COPY PRINTER_^1_%OUT -1_^1_%OUT -1_^1_%ENA $A_^1_%OUT -1_^1_%LDA* MODSET_^1_%LDQ* ECOM_K**€€MSOS 4.1**_^1CSTART OUT -2_(INSTRUCT DEVICE TO BEGIN OPTN._^1RESTRT LDA* PROSET_#SET ERROR SWITCH_^1_%STA* ERSW+1_^1_%ENA 120_*MAXIMUM CHARACTER COUNT_^1_%STA* BUFFUL_'SET READ COUNTER TO MAX_^1_%LDA* FSTWRD_#SET ADDRESS COUNTER TO_^1_%ALS 1_+(FSTWRD)*2_^1_%STA* WRDADD_^1_%LDA* NUMWDS_#SET CHARACTER COUNTER TO_^1_%ALS 1_+-(NUMWDS)*2_^1_%TCA A_^1_%STA- 25,I_^1IOSW_!NUM $1800,$€€FFFF_"GO TO 'READ' OR 'WRITE'_^1FSTWRD NUM $FFFF_^1NUMWDS NUM $FFFF_^1WRDADD NUM $FFFF_(CHARACTER ADDRESS WITH R/L INDICATOR_^1PROSET_!ADC_%CHRPRO-ERSW-1_^1ERRSET_!ADC_%ERSLEW-ERSW-1_^1RDSET_"ADC_%READ-IOSW-1_^1WRSET_"ADC_%WRITE-IOSW-1_^1ECOM_!NUM $91_*W,E,S FUNCTION_3**MSOS 4.1**_^1MODSET NUM -0_^1RDMODE NUM $200_^1WRMODE NUM $100_^1WRITE ENQ 0_^1_%LDA* WRDADD_^1_%LLS 15€€_^1_%INQ -1_(TEST FOR LEFT OR RIGHT CHARACTE_^1_%LDQ- 1,Q_)OF OUTPUT_^1_%SAM 1_)SKIP IF RIGHT CHARACTER_^1_%QLS 8_)SHIFT IF LEFT CHARACTER_^1_%TRQ A_^1_%AND =N$7F_(MASK CHARACTER_^1_%LLS 16_^1_%INQ -$D_*TEST FOR CARRIAGE RETURN_^1_%SQN WRITE1_'SKIP IF NOT_^1_%LDQ* ECOM_^1_%INQ -1_^1_%NOP 0_^1_%OUT -1_^1_%OUT -1_+DELAY FOR HARD COPY PRINTER_^1_%OUT -1_^1WRITE1 LDQ* ECOM_€€^1_%INQ -1_^1_%NOP 0_^1_%OUT -1_+XFER CHARACTER OF OUTPUT_^1_%RAO* WRDADD_^1_%RAO- 25,I_%PUT (COUNT1) + 1 IN COUNT1_^1_%LDA- 25,I_^1_%SAZ COMXIT_#TEST FOR AND LOOP IF FEWER_^1_%JMP* WRITE_'THAN 120 CHRS TRANSFERRED_^1COMXIT ENA -0_^1_%JMP (QCOM)_%EXIT ADDRESS_^1STATUS NUM 0_,LAST HARDWARE STATUS_-**MSOS 4.1**_^1*_85 CARDS DELETED_^1READ_!LDQ* ECOM_K**MSOS 4.1**_^1_%INQ -1_^€€1_%ENA 0_^1INPCOM INP -1_(READ CHARACTER_^1_%AND =N$7F_)DROP PARITY BIT_2**MSOS 4.1_^1*_$NO PARITY CHECK. TTY AND CRT NOT COMPATABLE_***MSOS 4.1_^1_%STA- 11,I_*STORE CHARACTER AT INPREL_(**MSOS 4.1_^1_%INA -$61_*LOWER CASE A_5**MSOS 4.1_^1_%SAM NOTLOW_(SKIP IF BELOW LOWER CASE A_'**MSOS 4.1_^1_%INA -$1A_*CHECK RANGE THRU LOWER CASE Z_#**MSOS 4.1_^1_%SAP NOTLOW_(SKIP IF ABOVE€€ LOWER CASE RANGE_"**MSOS 4.1_^1_%LDA- 11,I_L**MSOS 4.1_^1_%INA -$20_*DROP LOWER CASE BIT_.**MSOS 4.1_^1_%STA- 11,I_L**MSOS 4.1_^1NOTLOW LDA- 11,I_*FETCH VALUE FOR FURTHER CHECKS_"**MSOS 4.1_^1ERSW_!NUM $1800,$FFFF_"GO TO 'CHRPRO' OR 'ERSLEW'_^1CHRPRO INA -$A_^1_%SAN 1_)TEST FOR AND XFER IF_^1_%JMP* READ_(CHARACTER IS LINE FEED_^1_%INA -3_^1_%SAN 1_)TEST FOR AND XFER IF_^1_%J€€MP* COMXIT_%CHARACTER IS CARRIAGE RETURN_^1_%INA -$72_^1_%SAN 1_)TEST FOR AND XFER IF_^1_%JMP* DELETE_%CHARACTER IS DELETE_^1_%LDA* BUFFUL_'CHECK MAX BUFFER EXCEEDED_^1_%INA -1_^1_%STA* BUFFUL_^1_%SAN CNTINU-*-1_"SKIP IF OK_^1_%JMP* COMXIT_'IF FULL CONTINUE AS IF CARRIAGE RETURN_^1BUFFUL NUM 0_^1CNTINU LDA* WRDADD_'CHECK FOR RIGHT OR LEFT CHARACTER_^1_%ENQ 0_^1_%LLS 15_^1_%I€€NQ -1_^1_%SAP LFTCHR-*-1 SKIP IF LEFT CHARACTER_^1_%LDA- 11,I_%STORE RIGHT CHARACTER_^1_%EOR =N$FF00_%SET BITS 8-15 OF DATA WORD_^1_%AND- 1,Q_^1CHRSTR STA- 1,Q_^1_%RAO* WRDADD_^1_%JMP* READ_^1LFTCHR LDA- 11,I_%STORE LEFT CHARACTER_^1_%ALS 8_^1_%EOR =N$FF_(SET BITS 1-7 OF DATA WORD_^1_%JMP* CHRSTR_^1DELETE LDQ* ERRSET_^1_%STQ* ERSW+1_^1ERSLEW INA -$D_^1_%SAZ 1_)TEST FOR AND X€˜FER IF_^1_%JMP* READ_(CARRIAGE RETURN NOT RECEIVED_^1_%RTJ BACKGR_'BACKROUND BUFFER TO ALL ONES_^1_%JMP* RESTRT_#XFER TO REPEAT OPERATION_^1_%END_]_^__˜PQ17332 CSY/ B58 P€1_%NAM Q17332_'DECK-ID B58 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$SYSTEM INITIALIZER DRIVER FOR 1733-2/856 DISK_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1************************************************************************_^1*_=ENTRY PARAMETERS (ANY COMBINATION)_$*_^1*_>+(A) = FWA O€€F BUFFER(FWAB)_,*_^1*_>-(A) = WRITE ADDRESS TAGS_^1*_>+(Q) = NO. OF WORDS TO READ_+*_^1*_>-(Q) = COMPLEMENT OF WORDS TO WRITE_"*_^1*_@(I) = STARTING SECTOR ADDRESS_^1*_F(WILL BE BIASED BY 4)_^1*_]_'*_^1*_=EXIT PARAMETERS - OK_3*_^1*_?(A) =-0 REQUEST OK_3*_^1*_?(Q) = 0_>*_^1*_?(I) = SAME AS UPON ENTRY BUT ALWAYS + *_^1*_]_'*_^1*_8ERROR EXIT CONDITIONS_^1*_8(A) = 0_^1*_8(Q) = ERROR C€€ODE_^1*_>2 = ALARM ERROR_^1*_>5 = INTERNAL REJECT_^1*_>6 = EXTERNAL REJECT_^1*_>7 = NO COMPARE ERROR_^1*_=14 = NOT READY_^1*_=16 = SEEK ERROR_^1*_8(I) = LAST HARDWARE STATUS_^1*_]_^1************************************************************************_^1************* THE FOLLOWING PARAMETERS MUST BE SUPPLIED **************_^1DEVICE EQU DEVICE(3)_#EQUIPMENT NUMBER_^1SECTOR EQU€€ SECTOR(29)_"SECTORS/TRACK_^1WORDS EQU WORDS(96)_#WORDS/SECTOR_^1*_81 CARD DELETED_^1_%EQU CYL562(203)_^1_%EQU CYL564(406)_^1_%EQU D18562(CYL562*29*2-1)_^1_%EQU D18564(CYL564*29*2-1)_^1************************************************************************_^1_%ENT MMINIT_'ENTRY FOR I2_^1_%ENT QMASS_(ENTRY TO DRIVER_^1_%ENT EMASS_(W,E,S FUNCTION CODE_^1_%EXT* I2RETN_'IN I€€2_^1_%SPC 2_^1MMINIT LDQ =XDSKEND-START1+2_!AUTOLOAD PROGRAM LENGTH_^1_%LDA =XPART01-START1 DISTANCE TO AUTOLOAD TABLE_^1_%RTJ I2RETN_'RETURN TO I2 WITH ADDRESS OF THE AUTOLOAD PROG_^1************************************************************************_^1********************* AUTOLOAD PROGRAM FOR 1733-2 ********************_^1*********************************************€€***************************_^1START1 IIN 0_^1_%LDQ =XDSKEND-LOOP+1_%LENGTH TO BE MOVED_^1LOOP01 LDA* LOOP,Q_^1_%STA* (STMSV4),Q_^1_%SQZ_!CONT1_^1_%INQ -1_^1_%JMP* LOOP01_^1CONT1 JMP* (STMSV4)_$GO TO LOOP AFTER IT HAS BEEN MOVED_^1************************************************************************_^1*************** FWA OF CODE MOVED TO 'STMSV4' IN SPACE ***************_^1€€************************************************************************_^1LOOP_!ENA 5_,SYSTEM SECTOR IS 5_^1_%STA- I_^1_%CLR A_,BFWA_^1_%LDQ* STMSV4_'MODIFIED LENGTH OF PART 0_^1_%RTJ* QDISK_(READ IN PART 0_^1_%SAN GOON-*-1_$SKIP IF NO DISK ERROR_^1_%JMP* LOOP_)KEEP TRYING_^1GOON_!LDA* PART01_'PART 1 CORE IMAGE SECTOR ADDRESS_^1_%SAZ ONGO-*-1_$SKIP IF NOT PART 1 TO LOAD_^1_%ST€€A- I_^1_%LDA* PART1A_'MODIFIED CORE ADDRESS OF PART 1_^1_%LDQ* LPART1_'MODIFIED LENGTH OF PART 1_^1_%RTJ* QDISK_(READ IN PART 1_^1_%SAN ONGO-*-1_$SKIP IF NO DISK ERROR_^1_%JMP* GOON_)KEEP TRYING_^1ONGO_!EIN 0_,ENABLE INTERRUPT SYSTEM_^1_%JMP* LOOP-2_'TO MSOS SPACE 'RESTRT'_^1PART01 NUM 0_,PART 1 CORE IMAGE SECTOR ADDRESS_^1LPART1 NUM 0_,MODIFIED LENGTH OF PART 1_^1PART1A NUM 0€€_,MODIFIED CORE ADDRESS OF PART 1_^1STMSV4 NUM 0_,ADDRESS IN SPACE WHERE TO MOVE THE AUTOLOAD_^1************************************************************************_^1*_]_'*_^1QMASS NUM 0_,BASIC DRIVER ENTRY_^1_%EQU QDISK(QMASS)_^1QDISK1 STA* AINITL_'BUFFER FWA TO READ OR WRITE_^1_%EOR =N$FFFF_%CHECK FOR WRITE TAGS FUNCTION_^1_%SAN QDISK2_'SKIP IF NOT_^1_%JMP WRATAG_'GO €€WRITE TAGS_^1QDISK2 STQ* RDWEFG_'+(READ)/-(WRITE) FLAG_^1_%SQP SETWC-*-1_#SKIP IF READ (Q)WORDS_^1_%TCQ Q_^1SETWC STQ* QINITL_'WORDS TO I/O_^1_%LDA =N$100_'CONNECT CODE FOR UNIT 0_^1_%ENQ 1_^1_%RTJ OUTPUT_'CONNECT_^1*_83 CARDS DELETED_^1SETWCA ENQ 1_^1_%RTJ STATUS_'GET STATUS_^1_%NOP 0_^1_%ALS 3_,DISK TYPE BIT TO BIT 15_^1_%SAM SETWC1_'SKIP IF 856-2_^1_%LDA =XD18564_$SE€€CTOR 0, DISK 1, 856-4_^1_%JMP* SETWC2_^1SETWC1 LDA =XD18562_$SECTOR 0, DISK 1, 856-2_^1SETWC2 STA* NOTE9+1_%SET FIRST SECTOR OF DISK 1_^1_%LDQ- I_,STARTING SECTOR ADDRESS_^1_%STQ* XINITL_^1*_82 CARDS DELETED_^1_%CLR A_^1BIGLOP STA* EXCESS_^1_%TRA M_,CLEAR MASK REGISTER (COMPARE FLAG)_^1_%STA* ERRCTN_'CLEAR ERROR COUNTER NO.1_^1_%STA* ERRCNT_'CLEAR ERROR COUNTER NO.2_^1_%STA* END€€DSK_'ACROSS DISK FLAG_^1_%JMP* NOTNER_'CHECK FOR TRANSFER ACROSS DISKS_^1AINITL NUM 0_,STARTING ADDRESS OF BUFFER_^1QINITL NUM 0_,WORDS TO TRANSFER_^1EXCESS NUM 0_,NO. OF WORDS FOR NEXT I/O_^1TEMP2 NUM 0_,NEXT PART OF REQ.'S STARTING ADDRESS_^1TEMP3 NUM 0_^1XINITL NUM 0_,STARTING SECTOR OF I/O_^1RDWEFG NUM 0_,READ,WRITE INDICATOR_^1ENDDSK NUM 0_,ACROSS DISK FLAG_^1_%SPC €€2_^1*_$DETERMINE IF REQUEST WILL FIT_^1ENDLNG NOP 0_^1_%MUI =XWORDS_^1_%DVI* QINITL_'REQUEST LENGTH_^1_%SAZ 1_,SKIP IF AN ALTERNATE NEEDED OR END OF THE DISK_^1_%JMP* GETHED_^1_%TRQ A_^1_%SUB* QINITL_'REQUEST_^1_%STQ* QINITL_'WORDS THIS I/O_^1_%TCA A_^1_%STA* EXCESS_'WORDS NEXT I/O_^1_%ADQ* AINITL_^1_%STQ* TEMP2_(FWA OF NEXT I/O_^1_%JMP* (ENDLNG)_^1_%SPC 2_^1NOTNER LDA- I_^1_€€%SUB* NOTE9+1_^1_%SAM DISEND-*-1_"SKIP IF DISK 0_^1_%JMP* GETHED_^1DISEND LDA* NOTE9+1_%SECTOR 0, DISK 1_^1_%SUB- I_^1_%RTJ* ENDLNG_'FIND DISTANCE TO END OF DISK 0_^1_%ENA 1_^1_%STA* ENDDSK_'SET ACROSS DISK FLAG_^1GETHED LDA- I_^1_%CLR Q_^1NOTE9 DVI =N0_*SECTOR 0, DISK 1_^1_%ALS 5_,POSITION DISK INDICATOR_^1_%STA* TEMP3_^1_%TRQ A_^1_%CLR Q_^1_%DVI =XSECTOR_$SECTORS/TRACK_^€€1_%QLS 10_+Q = SECTOR_^1_%LLS 6_,A = CYL., TRACK AND SECTOR_^1_%ADD* TEMP3_(ADD IN DISK INDICATOR_^1_%STA* TEMP3_(SAVE COMPLETE FILE ADDRESS_^1HEDLOP LDA* TEMP3_(PICK UP LAST FILE ADDRESS_^1_%ENQ 2_,LOAD ADDRESS SEEK_^1_%RTJ* OUTPUT_^1_%ENQ 1_,DEVICE STATUS_^1_%RTJ* STATUS_^1_%JMP* ERROR2_^1_%CLR A_^1_%STA* ERRCTN_^1_%LDA* QINITL_'WORDS TO I/O_^1_%CLR Q_^1_%RTJ* OUTPUT_'LOAD €€BUFFER_^1_%TRM Q_-COMPARE FLAG_^1_%SQN CMPTIM-*-1_"SKIP IF COMPARE, Q = 1_^1_%CLR Q_^1_%LDA* RDWEFG_'READ / WRITE FLAG_^1_%SAP CMPTIM-*-1_"SKIP IF A READ REQUEST_^1_%ENQ -1_+SET UP WRITE_^1CMPTIM INQ 4_*WRITE = 3,READ = 4,COMPARE = 5_^1_%LDA* AINITL_'FWA OF BUFFER_^1_%RTJ* OUTPUT_^1_%ENQ 1_,DEVICE STATUS_^1_%RTJ* STATUS_^1_%JMP* ERRORA_^1_%TRM Q_-COMPARE FLAG_^1_%SQN COMPI€€T-*-1_"SKIP IF COMPARED_^1_%ENQ 1_^1_%TRQ M_,SET COMPARE FLAG IN M_^1_%JMP* HEDLOP_^1COMPIT AND =N$40_^1_%SAZ COMPOK-*-1_"SKIP IF COMPARE OK_^1_%ENQ 7_,COMPARE ERROR_^1_%STQ* CODERR_'SAVE ERROR CODE_^1_%JMP* ERROR1_^1COMPOK LDQ* EXCESS_'NEXT REQ.WORDS TO I/O IF NON ZERO_^1_%SQN SETWC4_^1_%LDQ* XINITL_^1_%STQ- I_,RESET SECTOR NO._^1*_81 CARD DELETED_^1_%JMP* WAYOUT_^1SETWC4 LD€€A* NOTE9+1_%SECTOR 0, DISK 1_^1_%STA- I_,SET STARTING SECTOR_^1_%LDA* TEMP2_(STARTING ADDRESS_^1_%STA* AINITL_'FWA OF I/O_^1_%LDQ* EXCESS_^1_%STQ* QINITL_'WORDS TO I/O_^1_%CLR A_^1_%JMP* BIGLOP_^1ERROR2 ENQ 16_+SEEK ERROR_^1_%STQ* CODERR_^1_%RAO* ERRCTN_^1_%LDQ* ERRCTN_^1_%JMP* ERROR3_^1ERRORA ENQ 2_,ALARM ERROR_^1_%STQ* CODERR_'SET ERROR CODE_^1ERROR1 RAO* ERRCNT_^1_%CLR Q_^1_€€%TRQ M_^1_%LDQ* ERRCNT_^1ERROR3 INQ -10_*NO. OF RETRYS_^1_%SQN NOTDON-*-1_"SKIP IF NOT DONE TRYING_^1_%JMP* XOREJ_(ERROR EXIT_^1NOTDON SAM DRIVSK-*-1_"SKIP IF DRIVE SEEK ERROR_^1_%JMP* HEDLOP_'TRY AGAIN_^1DRIVSK ENQ 0_,CLEAR CONTROLLER FUNCTION_^1_%RTJ* OUTPUT_^1_%ENQ 1_,STATUS_^1_%RTJ* STATUS_^1_%JMP* OREJA_(CLEAR CONTROLLER ERROR_^1_%JMP* HEDLOP_'TRY AGAIN_^1ERRCTN NUM 0_,€€ERROR COUNTER NO. 1_^1ERRCNT NUM 0_,ERRCOUNTER NO. 2_^1CODERR NUM 0_^1************************************************************************_^1*************************** STATUS ROUTINE ***************************_^1************************************************************************_^1*_>ENTRY PARAMETERS_6*_^1*_?Q = FUNCTION CODE_4*_^1*_]_'*_^1*_>EXITS_A*_^1*_?A = STATUS€€ TAKEN_5*_^1*_?P+1 - ERROR EXIT_5*_^1*_?EXT.REJ.,NOT READY - ERROR EXIT_%*_^1*_?P+2 - A = STATS OR CYLINDER REG.STATUS*_^1************************************************************************_^1STATUS NUM 0_^1_%INQ -1_^1_%STQ* FUNSAV_^1_%CLR A_^1STLOP LDQ* EDISK_(EQUIP. CODE_^1_%ADQ* FUNSAV_^1_%INP OREJ-*_^1_%STA* SAVSTS_^1_%TRQ A_^1_%AND =N7_^1_%INA -1_^1_%SAZ STSTIM-*€€-1_"SKIP IF STATUS REQUEST_^1_%JMP* GOODEX_^1STSTIM LDQ* SAVSTS_^1_%STQ* DSTAT_(SAVE LAST STATUS_^1_%LRS 1_^1_%SAM ITRDY-*-1_#SKIP IF READY_^1_%ENQ 14_+NOT READY ERROR_^1_%JMP* EROUT_^1ITRDY LRS 1_^1_%SAP NOTBSY-*-1_"SKIP IF NOT BUSY_^1_%JMP* STLOP_^1NOTBSY LRS 2_^1_%SAM ONCNDR-*-1_"SKIP IF ON CYLINDER_^1_%JMP* STLOP_^1ONCNDR LRS 2_,BIT 5 TO A(15)_^1_%SAM BADEXT-*-1_"SKIP€€ IF ALARM ERROR_^1GOODEX RAO* STATUS_^1BADEXT LDA* SAVSTS_^1_%JMP* (STATUS)_^1FUNSAV NUM 0_^1SAVSTS NUM 0_^1DSTAT NUM 0_^1************************************************************************_^1*************************** OUTPUT ROUTINE ***************************_^1************************************************************************_^1*_>ENTRY PARAMETERS_6*_^1*_?Q = F€€UNCTION CODE_4*_^1*_]_'*_^1*_>EXITS_A*_^1*_?REPLY - P+1_:*_^1*_?EXT.REJ. - CARERR (DEVICE ERROR EXIT) *_^1************************************************************************_^1OUTPUT NUM 0_^1_%ADQ- 0_,2 WORD INSTRUCTION_^1EMASS ADC DEVICE*128+1 W,E,S FUNCTION CODE_^1_%EQU EDISK(EMASS)_^1_%INQ -1_^1_%OUT OREJ-*_^1_%JMP* (OUTPUT)_$DEVICE REPLY_^1OREJ_!JMP* IREJ_)INTERNAL €€REJECT_^1_%ENQ 6_,EXTERNAL REJECT_^1EROUT LDA* DSTAT_(PASS LAST STATUS_^1_%STA- I_^1_%CLR A,M_^1_%JMP* DSKEND_'RETURN_^1IREJ_!ENQ 5_^1_%JMP* EROUT_^1OREJA ENQ 2_,ALARM ERROR_^1_%JMP* EROUT_^1XOREJ LDQ* CODERR_'10 TRIES FAILED_^1_%JMP* EROUT_^1WAYOUT LDA =N$80_(DESELECT CODE_^1_%ENQ 1_^1_%RTJ* OUTPUT_'DISCONNECT FROM DISK_^1_%CLR Q,M_^1_%SET A_,-0, REQUEST OK_^1DSKEND JMP€€ (QDISK)_%EXIT_^1WRATAG ENQ 1_,WRITE ADDRESS TAGS_^1_%LDA =N$100_'CONNECT CODE FOR UNIT 0_^1_%RTJ* OUTPUT_'CONNECT TO DISK_^1_%ENQ 1_^1_%RTJ* STATUS_'GET STATUS 1_^1_%NOP 0_^1_%ALS 3_,TYPE BIT TO A15_^1_%SAM TAGS1_^1_%LDA =XCYL564_$MAXCYL FOR AN 856-4_^1_%JMP TAGS2_^1TAGS1 LDA =XCYL562_$MAXCYL FOR AN 856-2_^1TAGS2 ALS 7_,FORM MAXIMUM FILE ADDRESS_^1_%STA* MAXCYL_'SAVE €€FOR COMPARE_^1_%ENA 0_^1_%STA* ADDRES_'RESET CURRENT ADDRESS_^1LODADR ENQ 2_^1_%RTJ* OUTPUT_'LOAD ADDRESS_^1_%ENQ 1_^1_%RTJ* STATUS_'WAIT FOR NOT BUSY/ON CYLINDER_^1_%JMP* OREJA_(REPORT ERROR_^1_%ENQ 7_^1_%RTJ* OUTPUT_'WRITE TAGS_^1_%ENQ 1_^1_%RTJ* STATUS_'WAIT FOR NOT BUSY/ON CYLINDER_^1_%JMP* OREJA_(REPORT ERROR_^1_%LDA* ADDRES_^1_%INA $20_^1_%STA* ADDRESS_^1_%EOR* MAXCYL_'€ΌSEE IF DONE_^1_%SAZ TAGSX_(YES, EXIT_^1_%LDA* ADDRES_^1_%JMP* LODADR_^1TAGSX JMP* WAYOUT_'EXIT FROM WRITE TAGS ROUTINE_^1_%SPC 3_^1ADDRES NUM 0_^1MAXCYL NUM 0_^1_%SPC 3_^1_%END_]_^__ΌPQ42312 CSY/ B59 P€1_%NAM Q42312_'DECK-ID B59 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$INITIALIZER LINE PRINTER DRIVER FOR 1742-30 1742-120_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_$IF THE 1742-120 IS USED, A TRAIN IMAGE TABLE MUST BE LOADED._^1*_]_^1_%ENT QPRINT_^1_%ENT EPRINT_^1_(ENT_$FORMFD_^€€1_(ENT_$HEADR1,HEADR2,HEADR3,HEADR4_^1_%EXT* TRAIN_(PRINTER TRAIN IMAGE_^1_%SPC 3_^1DEVICE EQU DEVICE(4)_^1_%EQU FORMAT($40)_"TOP OF FORM CONTROL_^1PAGE_!EQU PAGE(57)_^1_%SPC 3_^1QPRINT NOP 0_-ENTRY TO DRIVER_^1_(STA*_#START_^1_(STQ*_#NCHAR_^1_%LDQ* EPRINT_'GET PRINTER STATUS_^1_%INP -1_^1_%AND =N$100_'LOOK TO SEE IF TRAIN LOADING IS REQUIRED_^1_%SAZ NTRAIN_'SKIP IF NOT_^1€€_%CLR Q_,INITIALIZE TRAIN COUNTER - OUTPUT 144 WORDS_^1_%STQ* TCOUNT_^1LTRAIN LDA TRAIN,Q_%GET TRAIN DATA_^1_%RTJ* DATA_)OUTPUT TO LOAD TRAIN_^1_%RAO* TCOUNT_'INCREMENT POINTER_^1_%LDA* TCOUNT_'HAS ALL OF TRAIN IMAGE BEEN SENT_^1_%SUB =N144_^1_%SAZ NTRAIN_'SKIP IF ALL OUT_^1_%LDQ* TCOUNT_^1_%JMP* LTRAIN_'CONTINUE OUTPUT_^1NTRAIN ENA 0_^1_(STA*_#CC_^1_(LDA*_#FORMFD_^1_%SAZ PAG€€EFD_'SKIP IF TIME FOR FORM FEED_^1_(JMP*_#COUNTL_^1PAGEFD_!STA*_#LINES_^1_(STA*_#COUNTW HEADER PRINT COUNTER_^1_%ENA FORMAT_(TOP OF FORM_^1_(ENQ_$-1_^1_(RTJ*_#OUTPUT_+TOP OF FORM_^1_(STA*_#FORMFD_^1_%SPC 2_^1LOOPER_!LDQ*_#COUNTW_^1_(LDA*_#HEADER,Q_^1_(SAZ_$HPRINT-*-1_'SKIP IF PRINT HEADER TIME_^1_(RTJ*_#DATA_-SEND TO BUFFER_^1_(RAO*_#COUNTW_^1_(JMP*_#LOOPER_^1HPRINT_!RTJ*_#PRINT€€_,PRINT THE HEADER_^1COUNTL_!LDA*_#LINES_^1_%INA -PAGE_^1_(SAN_$GOON-*-1_^1_(STA*_#FORMFD_+FORMFD=0_^1_(JMP*_#PAGEFD_^1GOON_#LDA*_#HEADCT_+CONTROL AND SPACE FOR EACH LINE_^1_%ENQ -1_^1_%ENA 1_,LINE UP_^1_%RTJ* OUTPUT_^1PLOOP_"LDQ*_#CC_^1_(LDA*_#(START),Q_(GET 2 CHARACTERS_^1BLANK RTJ* DATA_^1_(RAO*_#CC_^1_(LDA*_#CC_^1_(SUB*_#NCHAR_^1_(SAP_$PRINT1_+SKIP IF BUFFER NOW OUTPUT_^1_(€€JMP*_#PLOOP_,LOOP BACK FOR NEXT WORD_^1PRINT1_!RTJ*_#PRINT_^1_(JMP*_#(QPRINT)_)EXIT_^1PRINT_"NOP_$0_^1_(CLR_$Q_^1_(ENA_$$20_^1_(RTJ*_#OUTPUT_+PRINT THE LINE_^1_(RAO*_#LINES_^1_(JMP*_#(PRINT)_^1_%EJT_]_^1OUTPUT_!NOP_$0_^1_%STA* SAVDAT_'SAVE DATA_^1_%STQ* SAVQ_)SAVE Q INCREMENT_^1LOOPX LDQ* EPRINT_^1_%INP -1_+STATUS_^1_%AND =N$B_(MASK STATUS_^1_%INA -9_+CHECK READY AND DATA_^1_%S€€AZ OK_+OK_^1_%JMP* LOOPX_(LOOP FOR READY AND DATA_^1OK_#LDQ =N0_^1SAVQ_!EQU SAVQ(*-1)_^1_%LDA =N0_^1SAVDAT EQU SAVDAT(*-1)_^1_%ADQ* EPRINT_^1_(NOP_$0_^1_(OUT_$-1_^1_(JMP*_#(OUTPUT)_)EXIT_^1_%SPC 5_^1DATA_#NOP_$0_^1_(ENQ_$-1_^1_(ALS_$8_^1_%RTJ* CHECK_^1_(ALS_$8_^1_$ENQ -1_^1_%RTJ* CHECK_^1_(JMP*_#(DATA)_+EXIT_^1CHECK NUM 0_^1_%STA* SAVDA2_'SAVE DATA_^1_%AND =N$7F_(MASK 7 L€€SB_^1_%INA -$20_^1_%SAP OK1_*GREATER THAN SPACE_^1_%CLR A_,MAKE IT A SPACE_^1OK1_"INA -$5F_^1_%SAM OK2_*LESS THAN A NULL_^1_%ENA -$5F_)MAKE IT A SPACE_^1OK2_"INA $7F_*RESTORE TO ORIGINAL DATA_^1_%RTJ* OUTPUT_'GO OUT DATA_^1_%LDA =N0_*RESTORE DATA TO -A-_^1SAVDA2 EQU SAVDA2(*-1)_^1_%JMP* (CHECK)_%RETURN TO CALLER_^1_%SPC 5_^1TCOUNT NUM 0_^1START_"NUM_$0_^1NCHAR_"NUM_$0_^1€€CC_%NUM_$0_^1FORMFD_!NUM_$0_^1COUNTW_!NUM_$0_^1H2020 NUM $2020_^1HC0C0 NUM $C0C0_^1EPRINT ADC DEVICE*128+1_^1HEADCT_!NUM_$$0120_,SINGLE SPACE,SPACE_^1HEADER_!ALF_$4, DATE_^1HEADR1_!ALF_$1,_/MM_^1HEADR2_!ALF_$1,_//D_^1HEADR3_!ALF_$1,_/D/_^1HEADR4_!ALF_$1,_^1*_$ADDITIONAL HEADER INFO. MAY BE OUTPUT BUT IT MUST BE PLACED HERE*_^1LINES NUM 0_,LINE COUNT - MUST FOLLOW LAST WORD €OF HEADER_^1_%END_]_^__ PSCMAD1 CSY/ B60 P€1_%NAM SCMAD1_'DECK-ID B60 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_+1536 LOW SPEED TEST ROUTINE_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1**************************************************€€**********************_^1*_]_'*_^1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1*_]_^1*_]_^1*_$THIS ROUTINE TESTS THE PERFORMANCE OF THE 1536 LOW SPEED ANALOG_^1* INPUT CONTROLLER. GENERALLY, THE ROUTINE OBTAINS INPUTS FROM A_^1* SEQUENCE OF 1 TO 8 CHANNELS (BEGADR MINUS ENDADR CAN BE GREATER THAN_^1* 8 BUT THE TES€€T DOES ITS TESTING IN GROUPS OF 8, THEN INCREMENTS ITS_^1* COUNTERS IF YOU SPECIFIED MORE THAN 8 AND DOES THE NEXT GROUP OF_^1* POINTS WHICH CAN BE FROM 1 TO 8),_^1*_5REPEATS A SPECIFIED NUMBER OF TIMES, COMPARES THE_^1* ACTUAL TO THE EXPECTED COUNTS, AND GENERATES A DOUBLE PRECISION_^1* HISTOGRAM WHICH ALLOWS A MAXIMUM COUNT OF 9,999,999 FOR EACH ERROR_^1* COUNTER._^1*_$IN OR€€DER TO CONDUCT THE TEST, THE USER MUST PROVIDE THE EXPECTED_^1* FULL-SCALE VALUE FOR EACH CHANNEL BEING TESTED. THIS IS MOST_^1* CONVENIENTLY ACCOMPLISHED USING THE ANALOG INPUT TEST BOX. WITH THE_^1* TEST BOX, THE USER CAN APPLY THE DESIRED VOLTAGE TO EACH OF THE_^1* CHANNELS. THEN, WHEN REQUESTED BY THE SCMM AD1 TEST ROUTINE, HE CAN_^1* ENTER THE EXPECTED PERCENT OF FULL S€€CALE FOR EACH CHANNEL. THIS_^1* INFORMATION IS CONVERTED BY THE PROGRAM TO EXPECTED COUNTS. THE_^1* EXPECTED COUNTS ARE COMPARED TO ACTUAL COUNTS TO PRODUCE A HISTOGRAM_^1* OF ERRORS. AFTER EACH INPUT, CHECKS ARE MADE FOR ANY ERROR_^1* INDICATIONS RETURNED BY THE DRIVER. ANY ERRORS INDICATED RESULT IN_^1* THE OUTPUT OF DIAGNOSTIC MESSAGES._^1**_]_^1**_]_^1_%EJT_]_^1*_]_^1*€€***********************************************************************_^1*_]_^1*****_#OPERATING INSTRUCTIONS ***********_^1*_]_^1*_]_^1*_$LU_"LOGICAL UNIT OF DEVICE IN DECIMAL_^1*_$BEG ADR_!STARTING CHANNEL IN DECIMAL_^1*_$END ADR_!ENDING CHANNEL, MUST BE GREATER OR EQUAL TO BGN ADR_^1*_$RUNS_!NUMBER OF RUNS IN DECIMAL_^1*_$NUM OF HISTOGRAMS_$NUM OF HISTOGRAMS TO BE PRINTED_^1*_€€*_^1*_]_'*_^1***€€*********************************************************************_^1_%SPC 2_^1_%EQU LPMSK(2)_$START OF LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS + LOC. OF NEG. ZERO_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%EQU ONEBIT($23)_!START OF ONE BIT MASKS_^1_%EQU ZROBIT($33)_!START OF ZERO BIT MASKS_^1_%EQU ADISP($EA)_"LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU A€€MONI($F4)_"LOCATION OF ADDRESS OF MONITOR_^1_%EQU FRC($200)_#REQUEST WORD "REQUEST CODE" LOCATOR_^1_%EQU FX($100)_$REQUEST WORD "F BIT" LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD "REQUEST PRIORITY" LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD "COMPLETION PRIORITY" LOCATOR_^1*_]_^1_%EXT TMRTYP_(TIMER TYPE IN SYSDAT_^1_%EXT E15721_'TIMER WEMS IN SYSDAT_^1_%EQU TSTCTR(*)_#ENTRY POINT FOR RC€€OS_^1_%ENT TSTCTR_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATIONS REGION_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTCTR_$TEST MNEMONIC_^1_%ADC END-START_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1*_]_^1FLAG_!NUM 0_^1*_]_^1INFOIN NUM 0_^1G€€ETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1************************************************************************_^1*_]_'*_^1*_8INPUT TEST PARAMETERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_,CLEAR COUNTERS AND FLAGS_^1_%STA INPERR_^1_%STA REPEAT_^1_%STA €€ ERRCTR_^1_%STA TMRMSG_^1MES0_!RTJ* (MESAGE)_$OUTPUT TITLE MESSAGE_^1MES1_!NUM $8244_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ADC MSG2B-MES1_^1_%ADC MSG2E-MSG2B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET PARAMETERS_^1INI12 RTJ* (GETFLD)_^1_%SQP INI12A_'TTY ERROR_^1_%RTJ* ERRCK_(YES, TTY ERROR_^1_%JMP* MES0_^1INI12A INQ -1_^1_%STA* TESTS,Q_^1_%INQ -3_^1_%SQZ INI13-*-1_^1_%JMP* I€€NI12_^1INI13 LDA* CMPUTR_(CONVERT COMPUTER TYPE_^1_%RTJ* (RDECHX)_^1_%STA* CMPUTR_^1_%LDA* RUNS_^1_%SAM RN8000_'IS IT AN 8000_^1_%RTJ* (RDECHX)_$NO, CONVERT_^1RN8000 STA* RUNS_^1_%LDA* INTLNE_^1_%SAN 1_,INT LINE NOT ZERO CHECK_^1_%JMP* INI21_)ITS ZERO, PROGRAM WILL CATCH IT_^1_%RTJ* (RDECHX)_$CONVERT TO HEX_^1_%STA* INTLNE_^1_%TRA Q_^1_%INA -2_+CHECK FOR CORRECT RANGE (2 TO 15€€)_^1_%SAM INI14-*-1_^1_%INA -14_^1_%SAP INI14-*-1_^1_%JMP* INI21_^1INI14 RTJ* (MESAGE)_$INTERRUPT ASSIGNMENT ERROR_^1MES3_!NUM $8244_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG9B-MES3_^1_%ADC MSG9E-MSG9B_^1_%SPC 2_^1INI21 RTJ* (MESAGE)_$REQUEST TEST CONFIGURATION INFO_^1MES4_!NUM $8144_^1_%ADC MSG3B-MES4_^1_%ADC MSG3E-MSG3B_^1_%CLR A_^1_%STA* NUMCTR_^1_%LDA =A00_^1_%€€STA MSG4B+1_^1INI22 RAO MSG4B+1_^1INI22A RTJ* (MESAGE)_^1MES5_!NUM $8144_^1_%ADC MSG4B-MES5_^1_%ADC MSG4E-MSG4B_^1_%ENQ +1_^1_%RTJ* (INFOIN)_$GET TEST CONFIGURATION INFO_^1_%LDA* NUMCTR_^1_%STA- I_^1_%SPC 2_^1INI23 RTJ* (GETFLD)_^1_%SQP M5_+TTY ERROR_^1_%RTJ* ERRCK_(YES_^1_%JMP* INI22A_^1M5_#INQ -1_^1_%JMP* *+1,Q_(JMP TO APPORIATE FIELD PROCESSOR_^1_%JMP* FIELD1_^1_%JMP*€€ FIELD2_^1_%JMP* FIELD3_^1_%JMP* FIELD4_^1_%SPC 2_^1FIELD5 STA TYPE,I_'PROCESS OUTPUT TYPE, CK FOR PROPER RANGE_^1_%INA -1_^1_%SAM TYPERR-*-1_^1_%INA -10_^1_%SAP TYPERR-*-1_^1_%RAO* NUMCTR_^1_%LDA* NUMCTR_^1_%INA -4_^1_%SAZ F5EXIT-*-1_^1_%JMP* INI22_^1F5EXIT JMP* INI31_^1*_]_^1TYPERR RTJ* (MESAGE)_$NOT IN RANGE 1 TO 10_^1MES6_!NUM $8144_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E€€-MSG10B_^1_%JMP* INI22A_^1*_]_^1*_]_^1FIELD4 AND- ZROBIT+7_$PROCESS OUTPUT WEMS CODE_^1_%STA OUWEMS,I_^1_%JMP* INI23_^1*_]_^1*_]_^1FIELD3 STA JUMPER,I_$STORE JUMPER CONFIGURATION_^1_%JMP* INI23_^1*_]_^1*_]_^1FIELD2 STA DASHNO,I_$PROCESS DASH NUMBER, CHECK FOR ERROR_^1_%INA -1_^1_%SAM DSHERR-*-1_^1_%INA -2_^1_%SAP DSHERR-*-1_^1_%JMP* INI23_^1DSHERR RTJ* (MESAGE)_$1547 DASH NU€€MBER ERROR - NOT 1 OR 2_^1MES7_!NUM $8144_^1_%ADC MSG11B-MES7_^1_%ADC MSG11E-MSG11B_^1_%RTJ* ERRCK_(SEE IF 3 ERRORS_^1_%JMP* INI22A_^1*_]_^1*_]_^1FIELD1 SAM INI31-*-1_#PROCESS 1547 WEMS CODE_^1_%AND- ZROBIT+7_^1_%STA CTWEMS,I_^1_%JMP* INI23_^1INI31 LDA* NUMCTR_^1_%INA -1_+CHECK FOR NO INFO ENTERED_^1_%STA* NUMCTR_^1_%SAP INI32-*-1_^1_%JMP* INI21_^1INI32 RTJ* HERE_^1HERE_!N€€UM 0_^1_%LDQ* CMPUTR_^1_%LDA* DLYCNT,Q_^1_%STA DELAY+1_^1_%JMP* BEGIN_^1*_]_^1_%SPC 2_^1ERRCK NUM 0_,ROUTINE TO CK IF 3 TTY ERRORS_^1_%RAO* INPERR_^1_%LDA* INPERR_'IS THIS THE THIRD ERROR_^1_%INA -3_^1_%SAM NOT3_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1NOT3_!JMP* (ERRCK)_^1_%SPC 2_^1INPERR NUM 0_^1TESTS NUM 0_^1RUNS_!NUM 0_^1INTLNE NUM 0_^1CMPUTR NUM 0_,COMPUTER TYPE_^1€€NUMCTR NUM 0_^1_%SPC 2_^1DLYCNT NUM 1125_)1784-2_^1_%NUM 740_*1784-1_^1_%NUM 960_*1704,1714_^1_%NUM 500_*1774_^1_%NUM 740_*MP17 (ASSUMES AVERAGE CYCLE TIME OF 0.9 U SEC)_^1*_]_^1HSTRY BZS HSTRY(4)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7INITIALIZE OUTPUT UNIT_7*_^1*_]_'*_^1*****************************************€€*******************************_^1_%SPC 2_^1BEGIN LDA =A0_^1_%STA TNUM_^1_%CLR A_^1_%STA- I_^1BEG1_!CLR A_^1_%STA* HSTRY,I_^1_%LDA TYPE,I_^1_%INA -7_^1_%CLR Q_^1_%SAP BEG2-*-1_$SKIP IF RELAY TYPE_^1_%INA +7_^1_%AND- ONEBIT_^1_%SAN BEG2-*-1_^1_%SET Q_^1BEG2_!STQ* HSTRY,I_^1_%LDQ JUMPER,I_^1_%QLS 9_,CHECK INVERSION OF LOWER COUNTER B SIGNAL_^1_%SQP BEG3-*-1_^1_%LDA- O€€NEBIT+5_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG3_!QLS 1_,CHECK INVERSION OF LOWER COUNTER A SIGNAL_^1_%SQP BEG4-*-1_^1_%LDA- ONEBIT+4_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG4_!QLS 4_,CHECK INVERSION OF UPPER COUNTER B SIGNAL_^1_%SQP BEG5-*-1_^1_%LDA- ONEBIT+3_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG5_!QLS 1_,CHECK INVERSION OF UPPER COUNTER A SIGNAL_^1_%SQP BEG6-*-1_^1_%LDA- O€€NEBIT+2_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG6_!QLS 6_,CHECK INVERSION OF EXTERNAL SYNC SIGNAL_^1_%SQP BEG7-*-1_^1_%LDA- ONEBIT_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG7_!ENA $15_*CLEAR THE SET BITS_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1_%RTJ DIGRLY_^1_%LDA- I_^1_%RAO- I_^1_%SUB* NUMCTR_^1_%SAZ TSTSEQ-*-1_^1_%JMP* BEG1_^1_%SPC 2_^1**********************************************€€**************************_^1*_]_'*_^1*_5SECTION 1_!INTERFACE TEST_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TSTSEQ LDA* TESTS_^1_%AND- ONEBIT+1_$IS TEST ONE REQUESTED_^1_%SAN TEST1-*-1_^1_%JMP T2CHK_^1TEST1 LDA =A1_*YES_^1_%STA TNUM_^1_%CLR A_^1_%STA- I_^1T11_"LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ OUTPUT€€_'OUTPUT CLEAR CARD_^1_%RTJ INPUT_(INPUT OVERFLOW STATUS_^1_%SAZ T12-*-1_^1_%ENQ 0_^1_%RTJ ACTEXP_'STATUS ERROR_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T12_"LDQ CTWEMS,I_^1_%RTJ INPUT_(INPUT COUNTER STATUS_^1_%SAZ T13-*-1_^1_%ENQ 0_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T13_"LDQ CTWEMS,I_^1_%LDA- LPMSK+8_^1_%RTJ OUTPUT_'OUTPUT LOAD LOWER COUNTER_^€€1_%RTJ INPUT_(CHECK COUNTER STATUS_^1_%LDQ- LPMSK+8_^1_%EAQ Q_^1_%SQZ T14-*-1_^1_%LDQ- LPMSK+8_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T14_"LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ OUTPUT_'CLEAR CARD_^1_%LDQ CTWEMS,I_^1_%LDA =N$80FF_^1_%RTJ OUTPUT_'OUTPUT LOAD UPPER COUNTER_^1_%RTJ INPUT_(CHECK COUNTER STATUS_^1_%LDQ- NZERO+8_^1_%EAQ Q_^1_%SQZ€€ T15-*-1_^1_%LDQ- NZERO+8_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T15_"LDQ CTWEMS,I_^1_%LDA- LPMSK+8_^1_%RTJ OUTPUT_'SET BOTH COUNTERS_^1_%ADD- ONEBIT+15_^1_%RTJ OUTPUT_^1_%RTJ INPUT_(CHECK STATUS_^1_%SET Q_^1_%EAQ Q_^1_%SQZ T16-*-1_^1_%SET Q_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T16_"LDQ* CTWEMS,I_^1_%CLR A_^1_%RTJ OUTPUT_'ZERO €€BOTH COUNTERS_^1_%LDA- ONEBIT+15_^1_%RTJ OUTPUT_^1_%RTJ INPUT_(CHECK STATUS_^1_%CLR Q_^1_%EAQ Q_^1_%SQZ T17-*-1_^1_%CLR Q_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T17_"LDQ* CTWEMS,I_$CHECK CLEAR ON READ_^1_%LDA- LPMSK+8_^1_%RTJ OUTPUT_'SET COUNTERS_^1_%ADD- ONEBIT+15_^1_%RTJ OUTPUT_^1_%RTJ* INPUT_(READ COUNTER_^1_%RTJ* INPUT_(READ COUNTER AGAIN AND CHECK €€FOR PROPER CLEAR_^1_%LDQ* JUMPER,I_^1_%SQM T18-*-1_^1_%SAZ T19-*-1_^1_%RTJ MSGOUT_'ERROR NO READ CLEAR WHEN EXPECTED_^1_%ADC MSG7B-MES9_^1_%ADC MSG7E-MSG7B_^1_%JMP* T19_^1T18_"SAN T19-*-1_^1_%RTJ MSGOUT_'ERROR READ CLEAR WHEN NOT EXPECTED_^1_%ADC MSG8B-MES9_^1_%ADC MSG8E-MSG8B_^1T19_"LDA* JUMPER,I_^1_%AND* H0108_^1_%SAZ T1A-*-1_^1_%EOR* H0108_^1_%SAN T1A-*-1_^1_%JMP* T1E€€ND_(BOTH COUNTERS ARE IN EPUT MODE_^1T1A_"LDA* JUMPER,I_^1_%AND =N$C_^1_%SAZ T1A1-*-1_^1_%JMP* T1B_^1T1A1_!LDA- LPMSK+8_^1_%LDQ* CTWEMS,I_^1_%RTJ* OUTPUT_^1_%EOR- ONEBIT+15_^1_%RTJ* OUTPUT_^1_%ENQ 1_^1_%RTJ PULSE_(PULSE UPPER_^1_%LDQ* CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%RTJ* INPUT_^1_%STA* OFSTAT_^1_%ENQ 0_^1_%LDA* JUMPER,I_^1_%ALS 1_^1_%SAM 1_^1_%ADQ- ONEBIT+15_#IF 8 BIT, UPPER €€OVERFLOW STATUS WILL BE SET_^1_%LDA* OFSTAT_^1_%EAQ A_^1_%SAZ T1B-*-1_^1_%LDA* OFSTAT_^1_%RTJ ACTEXP_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T1B_"LDA* JUMPER,I_^1_%AND =N$180_^1_%SAZ T1B1-*-1_^1_%JMP* T1END_^1T1B1_!LDA- LPMSK+8_^1_%LDQ* CTWEMS,I_^1_%RTJ* OUTPUT_^1_%EOR- ONEBIT+15_^1_%RTJ* OUTPUT_^1_%ENQ 0_^1_%RTJ PULSE_(PULSE LOWER_^1_%LDQ* CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_€€%RTJ* INPUT_^1_%STA* OFSTAT_^1_%LDQ- ONEBIT+14_#CHECK FOR OVERFLOW STATUS_^1_%LDA* JUMPER,I_^1_%ALS 1_^1_%SAP 1_^1_%ADQ- ONEBIT+15_#UPPER OVERFLOW_^1_%LDA* OFSTAT_^1_%EAQ A_^1_%SAZ T1END-*-1_^1_%LDA* OFSTAT_^1_%RTJ ACTEXP_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T1END LDQ* CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ* OUTPUT_'CLEAR CARD_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHEC€€K FOR STOP FLAG_^1_%SAZ T1END1-*-1_^1_%JMP ENDMSG_^1T1END1 LDA- I_^1_%SUB NUMCTR_^1_%SAZ T1END2-*-1_^1_%RAO- I_^1_%JMP T11_^1T1END2 JMP T2CHK_(CHECK FOR TEST 2_^1*_]_^1OFSTAT NUM 0_^1CTWEMS BZS CTWEMS(4)_^1DASHNO BZS DASHNO(4)_^1JUMPER BZS JUMPER(4)_^1OUWEMS BZS OUWEMS(4)_^1TYPE_!BZS TYPE(4)_^1H0108 NUM $0108_^1_%EJT_]_^1***********************************************€€*************************_^1*_]_'*_^1*_2INPUT, OUTPUT AND REJECT ROUTINES_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INPUT 0_"0_^1_%IIN 0_^1_%INP 3_^1_%EIN 0_^1_%JMP* (INPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1_%JMP* (INPUT)_^1*_]_^1OUTPUT 0_"0_^1_%IIN 0_^1_%OUT 3_^1_%EIN 0_^1_%JMP* (OUTPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXT€€REJ_^1_%JMP* (OUTPUT)_^1*_]_^1INTREJ 0_"0_^1_%STQ* QSAVE_^1_%LDQ* INTREJ_^1_%INQ +1_^1_%STQ* EXTREJ_^1_%EIN 0_^1_%ENQ 0_^1_%JMP* FRMINT_^1*_]_^1EXTREJ 0_"0_^1_%STQ* QSAVE_^1_%EIN 0_^1_%ENQ 1_^1FRMINT STA* ASAVE_^1_%RTJ (RHXASC)_^1_%ADC (AREG-*)_^1_%LDA* REJTAB,Q_^1_%STA REJTYP_^1_%LDA* REJTAB+2,Q_^1_%STA REJTYP+1_^1_%LDA* QSAVE_^1_%RTJ (RHXASC)_^1_%ADC (QREG-*)_^1_%ENQ €€-5_^1_%LDA* (EXTREJ),Q_^1_%RTJ (RHXASC)_^1_%ADC (XREG-*)_^1_%LDA- I_^1_%STA* RISAVE_^1_%RTJ* INIMSG_^1_%JMP* RJEXIT_^1_%RTJ (MESAGE)_$OUTPUT REJECT MESSAGE_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG13B-MES8_^1_%ADC MSG13F-MSG13B_^1_%ADC REJTYP-MES8_^1_%ADC MSG14E-REJTYP_^1RJEXIT LDA* RISAVE_^1_%STA- I_^1_%LDA* ASAVE_^1_%LDQ* QSAVE_^1_%JMP* (EXTREJ)_^1REJ€€TAB ALF 4, I ENTXT_^1QSAVE NUM 0_^1ASAVE NUM 0_^1RISAVE NUM 0_^1TRPSAV NUM 0_,HOLD FOR ORGINAL TRAP ADDRESS 1547_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8MESSAGE OUTPUT ROUTINE_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGOUT 0_"0_^1_%LDA- I_^1_%STA* MISAVE_^1€€_%LDA* (MSGOUT)_^1_%STA* MSGPTR_^1_%RAO* MSGOUT_^1_%LDA* (MSGOUT)_^1_%STA* MSGPTR+1_^1_%LDA* CTWEMS,I_^1_%RTJ (RHXASC)_^1_%ADC (CTRASC-*)_^1_%RAO* MSGOUT_^1_%RTJ* INIMSG_^1_%JMP* (MSGOUT)_^1_%RTJ (MESAGE)_$OUTPUT ERROR MESSAGE_^1MES9_!NUM $0444_^1_%ADC (START-MES9)_^1_%NUM 3_^1_%ADC MSG13B-MES9_^1_%ADC MSG13F-MSG13B_^1_%ADC M15BB-MES9_^1_%ADC MSG15E-M15BB_^1MSGPTR ADC 0_€€^1_%ADC 0_^1_%LDA* MISAVE_^1_%STA- I_^1_%JMP* (MSGOUT)_^1*_]_^1INIMSG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAN INIMS0_(CHK FOR PREVIOUS INTERRUPTS_^1_%JMP* INIMS1_^1INIMS0 LDA TNUM_^1_%SUB =A2_^1_%SAN NOTT2-*-1_^1_%LDA TRPSAV_'LOAD WITH ORGINAL TRAP ADDRESS_^1_%LDQ INTLNE_'GET INTERRUPT LINE_^1_%QLS 2_,MULT BY 4_^1_%SQZ NOTT2_(ZERO IN€€TERRUPT LINE, BYPASS_^1_%IIN_]_^1_%STA+ $103,Q_^1_%EIN_]_^1*_]_^1NOTT2 JMP ENDMSG_^1INIMS1 LDA FLAG_^1_%AND- ONEBIT+7_$CHECK FOR NO PRINTOUT FLAG_^1_%SAN INIMS2-*-1_^1_%RAO* INIMSG_^1_%LDA REPEAT_^1_%INA 1_-RUNS HASN T BEEN UPDATED YET_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1INIMS2 JMP* (INIMSG)_^1*_]_^1ERRCTR NUM 0_^1MISAVE NUM 0_^1_%SPC 2_€€^1************************************************************************_^1*_]_'*_^1*_,ROUTINE TO OUTPUT ACTUAL AND EXPECTED VALUES_,*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ACTEXP 0_"0_^1_%RTJ (RHXASC)_^1_%ADC (ACTUAL-*)_^1_%TRQ A_^1_%RTJ (RHXASC)_^1_%ADC (EXPCTD-*)_^1_%LDA* (ACTEXP)_^1_%STA* MSGLOC_^1_%RAO* ACTEXP_^€€1_%LDA* (ACTEXP)_^1_%STA* MSGLOC+1_^1_%LDA CTWEMS,I_^1_%RTJ (RHXASC)_^1_%ADC (CTRASC-*)_^1_%RAO* ACTEXP_^1_%LDA- I_^1_%STA* MISAVE_^1_%RTJ* INIMSG_^1_%JMP* (ACTEXP)_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES10 NUM $0444_^1_%ADC (START-MES10)_^1_%NUM 3_^1_%ADC MSG13B-MES10_^1_%ADC MSG13F-MSG13B_^1MSGLOC ADC 0_^1_%ADC 0_^1_%ADC MSG15B-MES10_^1_%ADC MSG15E-MSG15B_^1_%LDA* MI€€SAVE_^1_%STA- I_^1_%JMP* (ACTEXP)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5OUTPUT TO 1553/1555 UNITS_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1DIGRLY 0_"0_^1_%STA* IMAGE_^1_%LDA- I_^1_%STA* ISAVE_^1_%LDQ OUWEMS,I_^1*_]_^1_%LDA* IMAGE_(GET PATTERN_^1_%RTJ OUTPUT_^1D€€IG2_!RTJ- (AMONI)_%SCH TO LEVEL 3 TO LET OTHERS RUN_^1_%ADC 9*FRC+FX+3*FCP_^1_%ADC 3_^1_%DISP_^1_%LDQ* ISAVE_^1_%LDA DASHNO,Q_^1_%INA -2_^1_%SAZ DELAY-*-1_#DELAY IF 1547-2_^1_%LDA TYPE,Q_^1_%INA -7_^1_%SAP DELAY-*-1_#DELAY IF 1555-X_^1_%JMP* DLFINI_^1DELAY LDA =N800_(DELAY FOR 4 MILLISEC (1704)_^1DELAY1 INA -1_^1_%QLS 6_^1_%SAZ DLFINI-*-1_^1_%JMP* DELAY1_^1DLFINI RTJ- €€(AMONI)_%SCH BACK UP TO SCMM LEVEL_^1_%ADC 9*FRC+FX+4*FCP_^1_%ADC 3_^1_%DISP_^1GETOUT LDA* ISAVE_^1_%STA- I_^1_%JMP* (DIGRLY)_^1ISAVE NUM 0_^1IMAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8PULSE 1547 INPUTS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1PULSE €€ 0_"0_^1_%STQ* PULSPT_^1_%LDA* PATTRN,Q_^1_%EOR HSTRY,I_^1_%STA HSTRY,I_^1_%RTJ* DIGRLY_'CLEAR RESET SIGNAL,ACTIVATE SET SIGNAL_^1_%LDQ* PULSPT_^1_%LDA* PATTRN,Q_^1_%EOR HSTRY,I_^1_%STA HSTRY,I_^1_%RTJ* DIGRLY_'CLEAR SET SIGNAL,ACTIVATE RESET SIGNAL_^1_%JMP* (PULSE)_^1PATTRN NUM $30,$C,$3C,1_^1PULSPT NUM 0_^1INTLOC NUM 0_^1_%SPC 2_^1*****************************************€€*******************************_^1*_]_'*_^1*_.SECTION 2_!COUNT, INTERRUPT, SYNC TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CHK LDA TESTS_^1_%AND- ONEBIT+2_$IS TEST 2 REQUESTED_^1_%SAN TEST2-*-1_^1_%JMP ENDTST_^1TEST2 LDA =A2_^1_%STA TNUM_^1_%LDA =XINTRES-HERE_^1_%ADD HERE_^1_%STA* INTLOC_^1_%LDQ INTLNE_^1_%QL€€S 2_,MULT BY 4_^1_%SQZ T2A1_^1_%IIN_]_^1_%LDA+ $103,Q_^1_%STA TRPSAV_^1_%LDA* INTLOC_^1_%STA+ $103,Q_^1_%EIN_]_^1_%JMP* T2A1_^1*_]_^1*_]_^1TMRMSG NUM 0_^1T2ISAV NUM 0_^1TIMEMS NUM 0_-1572-1 TIMER WEMS CODE_^1TIMLNE NUM 0_,1572-1 INTERRUPT LINE_^1*_]_^1T2A1_!CLR A_^1_%STA- I_^1*_]_^1_%LDA TMRTYP_D***********_^1_%INA -3_+CHECK IF 1572-1 IS THE SYSTEM TIMER_^1_%SAN T2A2-*-1€€_^1_%JMP* T2A5_^1T2A2_!LDA* TMRMSG_^1_%SAN T2A3-*-1_^1_%RTJ (MESAGE)_$NO TIMER MESSAGE_^1MES13 NUM $8244_^1_%ADC (START-MES13)_^1_%NUM 3_^1_%ADC MSG17B-MES13_^1_%ADC MSG17E-MSG17B_^1T2A3_!LDA TESTS_(CHECK IF TEST 2 ONLY TEST REQUESTED_^1_%AND- ZROBIT+2_^1_%SAN T2A4-*-1_^1_%LDA FLAG_^1_%AND- NZERO+1_^1_%EOR- ONEBIT_'SET STOP FLAG_^1T2A4_!JMP T2END1_^1T2A5_!LDA+ E15721_^1€€_%STA* TIMEMS_^1_%LDA+ $120_^1_%SAN T2A5A-*-1_^1_%JMP* T2A2_^1T2A5A LDQ- I_^1_%STQ* T2ISAV_^1_%LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ OUTPUT_'CLEAR CARD_^1T2A7B ENA $3B_*ENABLE LST TO SYNC LINE 2, ACKNOWLEDGE_^1_%LDQ* TIMEMS_'TIMER WMES_^1_%RTJ OUTPUT_'ENABLE SRG INTERRUPT AND SYNC_^1_%TRQ A_^1_%AND- ZROBIT+7_^1_%TRA Q_^1_%ENA 1_^1_%RTJ OUTPUT_'LOAD SRG_^1_%II€€N_]_^1_%RTJ- (AMONI)_%TIMER REQUEST - WAIT FOR NEXT CLOCK PULSE_^1_%ADC 8*FRC+FX+4*FCP_^1_%ADC T2A5B-*+1_^1_%NUM 1_^1_%JMP- (ADISP)_^1T2A5B LDQ* T2ISAV_^1_%STQ- I_^1_%ENQ 3_^1_%RTJ* PULSE_(SET EXTERNAL SYNC INPUT_^1_%ENA $A_+ENABLE BOTH COUNTER INTERRUPTS_^1_%LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%RTJ OUTPUT_'ENABLE INTERRUPT_^1_%CLR A_^1_%STA* ISTAT,I_^1_%STA* INTRCV,I_^1_%ST€€A* PULSCT_^1T2A8_!ENQ 2_^1_%RTJ PULSE_(COUNT BOTH COUNTERS AS 8 BIT_^1_%LDA JUMPER,I_^1_%AND =N$84_^1_%SAZ NOSYC1_^1_%IIN_]_^1_%LDQ* TIMEMS_^1_%ENA 7_,ENABLE LST SYNC,INT_^1_%RTJ OUTPUT_^1_%RTJ- ($F4)_^1_%NUM $1104_^1_%ADC NOSYC1-*+1_^1_%NUM 1_^1_%JMP- ($EA)_^1*_]_^1NOSYC1 LDA* T2ISAV_^1_%STA- I_^1_%LDA* PULSCT_'COUNT TO 256 TO CAUSE OVERFLOW_^1_%SUB- LPMSK+8_^1_%SAZ T2A€€10_^1_%RAO* PULSCT_^1_%JMP* T2A8_^1T2A10 LDA INTLNE_'GET 1547 INTERUPT LINE_^1_%SAZ T2A13_^1_%LDA* INTRCV,I_$CHECK FOR INTERRUPT RECEIVED_^1_%SAZ T2A12_^1_%JMP* T2A13_^1T2A12 LDA JUMPER,I_^1_%AND* H0210_^1_%SAZ NOINT-*-1_^1_%EOR* H0210_^1_%SAZ T2A13_^1NOINT RTJ MSGOUT_'NO INTERRUPT_^1_%ADC MSG16B-MES9_^1_%ADC MSG16E-MSG16B_^1T2A13 LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%RT€€J INPUT_(GET OVERFLOW STATUS_^1_%STA* ISTAT,I_^1_%LDA JUMPER,I_^1_%ALS 1_^1_%LDQ- ONEBIT+14_#IF 16 BIT, LOW OVER FLOW STATUS WILL BE SET_^1_%SAM 1_^1_%ADQ- ONEBIT+15_#IF 8 BIT, BOTH COUNTERS WILL OVER FLOW_^1_%LDA* ISTAT,I_^1_%EAQ A_^1_%SAZ T2A14_^1_%LDA* ISTAT,I_^1_%RTJ ACTEXP_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T2A14 LDQ CTWEMS,I_^1_%RTJ INPUT_(GET COUNTER STATU€€S_^1_%STA* CSTAT_^1_%ENQ 0_^1_%LDA JUMPER,I_^1_%ALS 1_^1_%SAP 1_,IS IT A 16 BIT_^1_%LDQ- ONEBIT+8_^1_%LDA* CSTAT_^1_%EAQ A_^1_%SAZ T2A16_^1_%LDA* CSTAT_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T2A16 JMP T2END_^1*_]_^1H0210 NUM $0210_^1PULSCT NUM 0_^1INTRCV BZS INTRCV(4)_^1ISTAT BZS ISTAT(4)_^1H0084 NUM $0084_^1CSTAT NUM 0_^1*_]_^1T2END LDA- I_^€€1_%SUB NUMCTR_^1_%SAZ T2END1-*-1_^1_%RAO- I_^1_%JMP T2A5A_S***_^1T2END1 LDQ INTLNE_^1_%QLS 2_^1_%SQZ T2END2_'IF ZERO , BYPASS_^1_%LDA TRPSAV_^1_%IIN_]_^1_%STA+ $103,Q_^1_%EIN_]_^1T2END2 JMP* ENDTST_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_6INTERRUPT RESPONSE ROUTINE_4*_^1*_]_'*_^1***************************************€€*********************************_^1_%SPC 2_^1INTRES CLR A_^1_%STA* INTIND_^1INTR1 LDQ* INTIND_^1_%LDA CTWEMS,Q_^1_%CLR Q_^1_%LLS 12_^1_%QLS 4_^1_%ALS 4_^1_%STA- I_^1_%ADQ- ONEBIT+7_^1_%INP 1_^1_%NOP 0_,GET MODULE STATUS_^1_%AND- ONEBIT,I_^1_%SAZ INTR2-*-1_^1_%ADQ- I_,FOUND INTERRUPT FLAG_^1_%INP 1_,GET CARD STATUS_^1_%NOP 0_^1_%LDQ* INTIND_^1_%STA ISTAT,Q_^1_%RAO IN€€TRCV,Q_^1_%SAN INTR2-*-1_#CHECK IF ANY INTERRUPT STATUS_^1_%LDQ CTWEMS,Q_$NO, MUST BE A ERS INTERRUPT - READ DATA_^1_%INP 1_/TO RESET INTERRUPT_^1_%NOP 0_^1INTR2 LDA* INTIND_^1_%SAZ INTR3-*-1_^1_%RAO* INTIND_^1_%JMP* INTR1_^1INTR3 JMP- (ADISP)_^1*_]_^1INTIND NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION €€SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* REPEAT_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAN ENDMSG-*-1_^1_%LDA* REPEAT_^1_%SAM END1-*-1_$CHECK FOR INFINITE RUNS REQUESTED_^1_%SAZ ENDMSG-*-1_"CHECK FOR ZERO RUNS REQUESTED_^1_%SUB RUNS_^1_%SAZ ENDMSG-*-1_"CHECK FOR NUMBER OF RUNS REQUE€€STED, COMPLETED_^1END1_!JMP TSTSEQ_^1ENDMSG LDA* REPEAT_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESAGE_^1MES12 NUM $8144_^1_%ADC MSG12B-MES12_^1_%ADC MSG12E-MSG12B_^1_%LDA FLAG_^1_%AND- ONEBIT+6_$CHECK FOR STOP TO RE-ENTER PARAMET€€ERS_^1_%SAZ END2-*-1_^1_%LDA- ONEBIT+15_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!STA FLAG_^1_%LDA START+1_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1_%SPC 2_^1MSG1B ALF $,BEGIN IOM 1547-1/2 OFF LINE TEST$_^1_%NUM $D00_^1_%EQU€€ MSG1E(*)_^1MSG2B ALF $,TESTS,RUNS,1547 INT LINE,COMPUTER TYPE$_^1_%EQU MSG2E(*)_^1MSG3B ALF 18,ENTER - H/W TEST CONFIGURATION INFO._^1_%NUM $D00_^1_%ALF 23,_)1547 EVENT COUNTER_$OUTPUT UNIT_^1_%NUM $D00_^1_%ALF $, 1547-WEMS, DASH-NO, JUMPER, D/OUT WEMS, TYPE D/OUT$_^1_%EQU MSG3E(*)_^1MSG4B ALF 3, #01_^1_%EQU MSG4E(*)_^1MSG5B ALF 5, STATUS ER_^1_%EQU MSG5E(*)_^1MS€€G6B ALF 5, COUNT ERR_^1_%EQU MSG6E(*)_^1MSG7B ALF 7, NO READ CLEAR_^1_%EQU MSG7E(*)_^1MSG8B ALF 6, READ CLEAR_^1_%EQU MSG8E(*)_^1MSG9B ALF 14, INTERRUPT ASSIGNMENT ERROR_^1_%EQU MSG9E(*)_^1MSG10B ALF 9,OUTPUT TYPE ERROR_^1_%EQU MSG10E(*)_^1MSG11B ALF 7,DASH NO. ERROR_^1_%EQU MSG11E(*)_^1************************************************************************_^1MSG12€€B ALF 10,END IOM 1547 TEST,_^1RUNASC NUM 0,0_^1_%ALF 3, RUNS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG12E(*)_^1MSG13B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 2,RUN_^1ERRPAS NUM 0,0,$2020_^1_%EQU MSG13F(*)_^1REJTYP ALF 6, INT REJECT_^1_%ALF 2,Q =_^1QREG_!NUM 0,0_^1_%ALF 3, A =_^1AREG_!NUM 0,0_^1_%ALF 3, X =_^1XREG_!NUM 0,0_^1_%EQU MSG14E(*)_^1MSG15B ALF $,_!ACTU€(AL $_^1ACTUAL NUM 0,0_^1_%ALF $, EXPECTED $_^1EXPCTD NUM 0,0_^1M15BB ALF $, CTR WEMS $_^1CTRASC NUM 0,0_^1_%NUM $2020,$2020_^1_%EQU MSG15E(*)_^1MSG16B ALF 7, NO INTERRUPT_^1_%EQU MSG16E(*)_^1MSG17B ALF 14, 1572-1 STU NOT SYSTEM TIMER_^1_%EQU MSG17E(*)_^1_%EQU END(*)_^1_%END_]_^__ (PSCMDAC CSY/ B66 P€1_%NAM SCMDAC_'DECK-ID B66 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1****_]_^1*_$1 5 6 6_"D / A_"C O N V E R T E R_"T E S T_^1*_]_^1*_]_^1*_$FUNCTION -_^1*_$--------_^1*_$THIS ROUTINE TESTS THE 1566 DIGITAL TO ANALOG CONVERTER_^1*_$IN THE FOLLOWING CONF€€IGURATIONS_^1*_*LOCAL OR REMOTE ON 1590_^1*_*OPEN LOOP OR CLOSED LOOP THROUGH ANALOG INPUTS_^1*_*LOW SPEED OR HIGH SPEED ANALOG INPUTS_^1*_*VOLTAGE OR CURRENT OUTPUT_^1*_$THIS TEST OPERATES UNDER CONTROL OF THE SMALL COMPUTER_^1*_$MAINTENANCE MONITOR SCMEXC._^1*_]_^1*_]_^1*_$ENTRY POINTS -_^1*_$----- ------_^1*_$NONE_^1*_]_^1*_]_^1*_$EXTERNALS -_^1*_$---------_^1_%EXT AISB_)HIGH S€€PEED ANALOG INPUT DRIVER_^1_%EXT LOG1A_(LOGICAL UNIT TABLE_^1*_]_^1*_]_^1*_$EQUIVALENCES -_^1*_$------------_^1_%EQU ZERO($22)_#LOW CORE TABLES_^1_%EQU ONEBIT($23)_^1_%EQU ONEMSK(3)_^1_%EQU CHNBIT($2F)_^1_%EQU AMONI($F4)_"MONITOR ENTRY_^1_%EQU ADISP($EA)_"DISPATCHER ENTRY_^1_%EQU DCHNL(1)_$POINT PARAMETER LIST POINTERS_^1_%EQU ACHNL(2)_^1_%EQU ERR(3)_^1_%EQU ESTAT2(12)_"€€PDT POINTER_^1_%EJT_]_^1*_$GENERAL DESCRIPTION -_^1*_$------- -----------_^1*_$SCMDAC EXECUTES ONE OR MORE OF THE THREE TEST SECTIONS_^1*_$THE NUMBER OF TIMES SPECIFIED BY OPERATOR INPUT. THE STOP_^1*_$FLAG IS CHECKED AFTER EACH ERROR AND AFTER EACH EXECUTION_^1*_$OF A TEST SECTION._^1*_]_^1*_]_^1*_$ENTRY/EXIT -_^1*_$----- ----_^1*_$ENTRY AND EXIT CONDITIONS ARE IN ACCORDANCE WITH_€€^1*_$THE SCMEXC INTERFACE._^1*_]_^1*_]_^1*_$INPUT REQUIREMENTS-_^1*_$----- ------------_^1*_$OPERATOR PARAMETER ENTRY_^1*_]_^1*_*SECTIONS,RUNS,MODE,LOCATION,ECHO_^1*_-SECTIONS -_^1*_/BIT 0=1 TEST 1, 0,50,AND 100 PC FS OUTPUT_^1*_/BIT 1=1 TEST 2, BIT WEIGHT TEST_^1*_/BIT 2=1 TEST 3, INCREMENT 10 P.C. FS TEST_^1*_-RUNS IN DECIMAL_^1*_/NON TERMINATING IF ENTERED AS 8000_^1*_-MODE_^€€1*_/0=CURRENT MODE DAC_^1*_/1=VOLTAGE MODE DAC_^1*_-LOCATION_^1*_/0=CONNECTED TO LOCAL CIU_^1*_/1=CONNECTED TO REMOTE CIU (1590)_^1*_-ECHO_^1*_/0=OPEN LOOP_^1*_/1=DACS CONNECTED TO ANALOG INPUTS_^1*_*ANALOG INPUT TYPE_^1*_-REQUESTED IF CLOSED LOOP TEST_^1*_/0=1536 RELAY MULTIPLEXER_^1*_/1=1501 SOLID STATE MULTIPLEXER_^1*_*ANALOG INPUT LU IN DECIMAL_^1*_-REQUESTED IF CLOSED LOOP TES€€T_^1*_-AND(1536 OR REMOTE LOCATION)_^1*_*ADC RANGE_^1*_-REQUESTED IF CLOSED LOOP_^1*_/0= 5.00 VDC_^1*_/1= 10.00 VDC_^1*_*DAC LU IN DECIMAL_^1*_-REQUESTED IF REMOTE LOCATION_^1*_*DAC WEMS,DAC CHANNEL,AI CHANNEL,ALLOWABLE ADC ERROR_^1*_-DAC WEMS_^1*_/MODULE-STATION ADDRESS OF THE 1566_^1*_-DAC CHANNEL_^1*_/DAC CHANNEL NUMBER (0-3)_^1*_-AI CHANNEL_^1*_/REQUESTED IF CLOSED LOOP_^1*_/C€€HANNEL NUMBER (0-N) OF ASSOCIATED AI CHANNEL_^1*_-ALLOWABLE DAC ERROR MEASURED IN ADC UNITS_^1*_/REQUESTED IF CLOSED LOOP_^1*_,REPEAT INQUIRY UNTIL FFFF ENTERED FOR DAC_^1*_,W-E-M-S OR UNTIL 16 CHANNELS SPECIFIED._^1*_]_^1*_]_^1*_*TEST FUNCTION_^1*_*---- --------_^1*_$SECTION 1 OUTPUTS TO ALL SELECTED DACS IN THE_^1*_$FOLLOWING SEQUENCES._^1*_(1536/VOLTAGE MODE_^1*_-$0000_"0 PC FS €€= 0 VDC_^1*_-*0080 +25 PC FS = 2.5 VDC_^1*_-$0100 +50 PC FS = 5.0 VDC_^1*_(1536-1501/CURRENT MODE_^1*_-$0066 +20 PC FS = 10 MA_^1*_-$0132 +60 PC FS = 30 MA_^1*_-$01FF +100 PC FS = 50 MA_^1*_(1501/VOLTAGE MODE 5.0/ VOLT ADC_^1*_-$0000_"0 PC FS = 0 VDC_^1*_-$0100 +50 PC FS =+5 VDC_^1*_-$0300 -50 PC FS =-5 VDC_^1*_(1501/VOLTAGE MODE 10.00 VOLT ADC_^1*_-$0000_"0 PC FS = 0 VDC_€€^1*_-$01FF +100 PC FS =+10 VDC_^1*_-$0200 -100 PC FS =-10 VDC_^1*_(OPEN LOOP/VOLTAGE_^1*_-$0000_"0 PC FS =_!0 VDC_^1*_-$01FF +100 PC FS = +10 VDC_^1*_-$0200 -100 PC FS = -10 VDC_^1*_(OPEN LOOP/CURRENT_^1*_-$0066 +20 PC FS = 10 MA_^1*_-$0132 +60 PC FS = 30 MA_^1*_-$01FF +100 PC FS = 50 MA_^1*_$IF CLOSED LOOP AND NO OUTPUT ERRORS WERE DETECTED THE_^1*_$CORRESPONDING ANALOG INPUTS€€ ARE READ AND THE EXPECTED_^1*_$DATA COMPARED TO ACTUAL._^1*_]_^1*_]_^1*_$SECTION 2 OUTPUTS TO ALL SELECTED DACS IN THE_^1*_$FOLLOWING SEQUENCE -_^1*_'DAC VALUE_^1*_'---------_^1*_($0001_#START ONE-BIT LEFT SHIFT_^1*_($0002_^1*_($0004_^1*_*-_^1*_*-_^1*_($0100_!IF ECHO(STOP HERE IF 1536,SKIP TO (A) IF 5 VOLT ADC)_^1*_($0200_"-_^1*_($0200_"-START ONE-BIT RIGHT SHIFT SIGN EXTENDED_^1*€€_($0300_!(A)_^1*_($0380_^1*_($03C0_^1*_*-_^1*_*-_^1*_($03F8_^1*_($03FC_^1*_($03FE_^1*_]_^1*_$IF CLOSED LOOP AND NO OUTPUT ERRORS WERE DETECTED THE_^1*_$CORRESPONDING ANALOG CHANNELS ARE INPUT AND THE_^1*_$EXPECTED DATA COMPARED TO ACTUAL._^1*_]_^1*_]_^1*_$SECTION THREE OUTPUTS TO ALL SELECTED DACS IN THE_^1*_$FOLLOWING SEQUENCE ._^1*_$IF VOLTAGE OUTPUT DACS ARE TESTED IN ECHO MODE €€WITH_^1*_$A 5 VOLT ADC THE FULL SCALE OUTPUT IS SET AT 50 PC_^1*_$DAC OUTPUT._^1*_$NEGATIVE VALUES ARE OMITTED IF ECHO MODE AND A 1536_^1*_$IS SPECIFIED OR IF OUTPUT IS CURRENT._^1*_+0 PC FS_^1*_)+10 PC FS_^1*_)-10_!-_^1*_)+20_!-_^1*_)-20_!-_^1*_*--_!-_^1*_*--_!-_^1*_(+100_!-_^1*_(-100 PC FS_^1*_]_^1*_]_^1*_]_^1*_$ALL CURRENT MODE ECHO TESTING ASSUMES THAT THE DAC_^1*_$SHUNT RESIS€€TOR IS SIZED TO PRODUCE FULL SCALE ADC INPUT_^1*_$AT UNITY GAIN. THIS WILL BE 5.00 VDC EXCEPT FOR A 10.00 VDC_^1*_$1501/1525 SUBSYSTEM._^1****_]_^1_%EQU TSTDAC(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTDAC_^1_%EJT_]_^1* **************************************************_^1*_*COMMUNICATION REGION_2*_^1* **************************************************_^1START ALF 3,TSTDAC_$TEST MNE€€UMONIC_^1_%ADC START-END_#TEST LENGTH_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1FLAG_!NUM 0_,EXECUTION CONTROL WORD_^1INFOIN NUM 0_,SUBROUTINE LOCATION TABLE_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 4_^1* **************************************************_^1*_*INITIALIZE AND GET PARAMETERS_)*_^1* **********************€€****************************_^1ENTER CLR A_^1_%STA ERRCTR_'CLEAR TEST ERROR COUNTER_^1_%RTJ* HERE_^1HERE_!NUM 0_^1ENT4_!RTJ* (MESAGE)_$TEST TITLE_^1_%NUM $8144_^1_%ADC SMSG1-ENT4-1_^1_%ADC EMSG1-SMSG1_^1ENT8_!RTJ* (MESAGE)_$TESTS,RUNS,MODE,LOCATION,ECHO_^1_%NUM $8144_^1_%ADC SMSG2-ENT8-1_^1_%ADC EMSG2-SMSG2_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$READ PARAMETERS_^1ENT16 RTJ* (GETF€€LD)_$STORE PARAMETERS_^1_%SQP ENT20_^1_%JMP ENDMSG_'TERMINATE TEST_^1ENT20 INQ -1_^1_%STA TESTS,Q_^1_%INQ -4_^1_%SQZ ENT24_^1_%JMP* ENT16_^1ENT24 LDA* RUNS_^1_%SAM ENT26_^1_%RTJ* (RDECHX)_$CONVERT RUNS TO HEX_^1ENT26 STA* RUNS_^1_%LDA* ECHO_)IS CLOSED LOOP TEST_^1_%SAN ENT28_(YES_^1_%JMP* ENT64_(NO_^1ENT28 RTJ* (MESAGE)_$GET AI TYPE 1536=0 ,1501=1_^1_%NUM $8144_^1_%AD€€C SMSG3-ENT28-1_^1_%ADC EMSG3-SMSG3_^1_%ENQ 1_^1_%RTJ* (INFOIN)_^1_%RTJ* (GETFLD)_^1_%SQP ENT40_^1_%JMP ENDMSG_^1ENT40 STA* AITYPE_^1_%SAN ENT44_)NOT 1536_^1_%JMP* ENT48_^1ENT44 LDA* LOCATN_'IS REMOTE_^1_%SAN ENT48_(YES_^1_%JMP* ENT56_(NO_^1ENT48 RTJ* (MESAGE)_$GET AI LU_^1_%NUM $8144_^1_%ADC SMSG4-ENT48-1_^1_%ADC EMSG4-SMSG4_^1_%ENQ 1_^1_%RTJ* (INFOIN)_^1_%RTJ* (GETFL€€D)_^1_%SQP ENT52_^1_%JMP ENDMSG_^1ENT52 RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA* AILU_^1ENT56 RTJ* (MESAGE)_$GET ADC RANGE_!0=5 VDC 1=10 VDC_^1_%NUM $8144_^1_%ADC SMSG5-ENT56-1_^1_%ADC EMSG5-SMSG5_^1_%ENQ 1_^1_%RTJ* (INFOIN)_^1_%RTJ* (GETFLD)_^1_%SQP ENT60_^1_%JMP ENDMSG_^1ENT60 STA* AIFS_^1ENT64 LDA LOCATN_'IS REMOTE_^1_%SAN ENT68_(YES_^1_%JMP* ENT76_(NO_^1ENT68 RT€€J* (MESAGE)_$GET DAC LU_^1_%NUM $8144_^1_%ADC SMSG6-ENT68-1_^1_%ADC EMSG6-SMSG6_^1_%ENQ 1_^1_%RTJ* (INFOIN)_^1_%RTJ* (GETFLD)_^1_%SQP ENT72_^1_%JMP ENDMSG_^1ENT72 RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA* DACLU_^1ENT76 ENA 0_^1_%STA* IDX_^1ENT80 LDA* ECHO_)IS CLOSED LOOP_^1_%SAN ENT84_(YES_^1_%JMP* ENT100_'NO_^1ENT84 RTJ* (MESAGE)_$GET DAC WEMS,DAC CHANL, AI CHNL, ERROR€€_^1_%NUM $8244_^1_%ADC SMSG7-ENT84-1_^1_%ADC EMSG7-SMSG7_^1_%ADC SMSG8-ENT84-1_^1_%ADC EMSG8-SMSG8_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1ENT88 RTJ* (GETFLD)_$GET/STORE PARAMETERS_^1_%SQP ENT92_^1_%JMP ENDMSG_^1ENT92 STA* TEMP_^1_%LDA* IDX_*MAKE ARRAY INDEX_^1_%ALS 2_,X4_^1_%STA- I_^1_%INQ -1_+PARAMETER POSITION IN ARRAY_^1_%LDA* TEMP_^1_%STA* ARAY1,B_%STORE PARAMETER VALUE_^1_%€€INQ -3_+HAVE 4 BEEN PROCESSED_^1_%SQN ENT96_(NO_^1_%JMP* ENT112_'YES_^1ENT96 JMP* ENT88_^1ENT100 RTJ (MESAGE)_$REQUEST DAC WEMS, DAC CHANNEL_^1_%NUM $8144_^1_%ADC SMSG7-ENT100-2_^1_%ADC EMSG7-SMSG7_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1ENT104 RTJ (GETFLD)_$GET/STORE PARAMETERS_^1_%SQP ENT108_^1_%JMP ENDMSG_^1ENT108 STA* TEMP_^1_%LDA* IDX_*MAKE ARRAY INDEX_^1_%ALS 2_,X4_^1_%STA-€€ I_^1_%INQ -1_+PARAMETER POSITION IN ARRAY_^1_%LDA* TEMP_^1_%STA* ARAY1,B_^1_%INQ -1_+HAVE 2 PARAMETERS BEEN PROCESSED_^1_%SQZ ENT112_'YES_^1_%JMP* ENT104_'NO_^1ENT112 LDA* ARAY1,I_%IS LAST DAC WEMS = $FFFF_^1_%EOR =N-0_^1_%SAN ENT116_'NO_^1_%JMP* ENT120_^1ENT116 RAO* IDX_*BUMP ARRAY INDEX_^1_%LDA* IDX_*HAVE 16 CHANNELS BEEN SPECIFIED_^1_%INA -16_^1_%SAZ ENT120_'YES_^1_%JMP*€€ ENT80_^1ENT120 JMP* ONE_*START TEST 1_^1_%SPC 2_^1REPEAT NUM 0_^1ERRCTR NUM 0_^1TESTS NUM 0_^1RUNS_!NUM 0_^1MODE_!NUM 0_^1LOCATN NUM 0_^1ECHO_!NUM 0_^1AITYPE NUM 0_^1AILU_!NUM 0_^1AIFS_!NUM 0_^1DACLU NUM 0_^1IDX_"NUM 0_^1TEMP_!NUM 0_^1ARAY1 NUM 0_,DAC WEMS_"----FIRST CHANNEL_^1_%NUM 0_,DAC CHANNEL_^1_%NUM 0_,AI CHANNEL_^1_%NUM 0_,DAC ERROR_^1ARRAYS BZS ARRAYS€€(60)_/----REMAINING CHANNELS_^1_%EJT_]_^1* **************************************************_^1*_$SECTION ONE_!- ZERO AND FULL SCALE OUTPUT *_^1* **************************************************_^1ONE_"LDA* TESTS_(IS TEST 1 SELECTED_^1_%AND- ONEBIT+1_^1_%SAN ON2_*YES_^1_%JMP* TWO_*NO_^1ON2_"ENA 0_,CLEAR REPEAT COUNTER_^1_%STA* REPEAT_^1_%LDA =A1_*SET SECTION NUMBER_^1_%STA €€MSG9A_^1_%LDA* MODE_)IS CURRENT_^1_%SAN ON3_*NO_^1_%LDA =XTABLE1-HERE YES, USE TABLE 1_^1_%ADD HERE_^1_%STA* TBLPTR_^1_%JMP* ON7_^1ON3_"LDA* ECHO_)IS ECHO_^1_%SAN ON4_*YES_^1_%LDA =XTABLE4-HERE_#USE TABLE 4_^1_%ADD HERE_^1_%STA* TBLPTR_^1_%JMP* ON7_^1ON4_"LDA* AITYPE_'IS 1536_^1_%SAN ON5_*NO_^1_%LDA =XTABLE3-HERE YES, USE TABLE 3_^1_%ADD HERE_^1_%STA* TBLPTR_^1_%JMP* ON7_^€€1ON5_"LDA* AIFS_)IS 5 VOLT ADC_^1_%SAN ON6_*NO_^1_%LDA =XTABLE2-HERE YES, USE TABLE 2_^1_%ADD HERE_^1_%STA* TBLPTR_^1_%JMP* ON7_^1ON6_"LDA =XTABLE4-HERE 10 VOLT ADC, USE TABLE 4_^1_%ADD HERE_^1_%STA* TBLPTR_^1ON7_"ENA 0_^1_%STA* IDX1_^1ON8_"LDQ* IDX1_)GET NEXT DAC VALUE_^1_%LDA* (TBLPTR),Q_^1_%RTJ DACOUT_^1_%STQ* ERR11_^1ON12_!RTJ- (AMONI)_%10 SEC DELAY_^1_%NUM $1124_^1_%AD€€C ON16-ON12-1_^1_%NUM 10_^1_%JMP- (ADISP)_^1ON16_!LDA ECHO_)IS OPEN LOOP_^1_%SAZ ON20_)YES_^1_%LDA* ERR11_(ANY DAC OUTPUT ERRORS_^1_%SAN ON20_)YES_^1_%RTJ AICHEK_'READ AI AND CHECK_^1ON20_!LDA* IDX1_)IS END OF ONE PASS_^1_%INA -2_^1_%SAZ ON24_)YES_^1_%RAO* IDX1_)NO_^1_%JMP* ON8_^1ON24_!RTJ ENDTST_'YES, IS END OF RUNS_^1_%JMP* ON7_*NO_^1_%JMP* TWO_*YES_^1_%SPC 2_^1ERR11 N€€UM 0_^1IDX1_!NUM 0_^1TABLE1 NUM $66_*CURRENT MODE_"0 PC_^1_%NUM $132_7+50 PC_^1_%NUM $1FF_6+100 PC_^1TABLE2 NUM 0_,ECHO,VOLTAGE,5 VOLT ADC_"0 PC_^1_%NUM $100_B+50 PC_^1_%NUM $300_B-50 PC_^1TABLE3 NUM 0_,ECHO,VOLTAGE,1536_!0 PC_^1_%NUM $80_<+25 PC_^1_%NUM $100_;+50 PC_^1TABLE4 NUM 0_,ECHO,VOLTAGE,10 VOLT ADC_"0 PC_^1_%NUM $1FF_1OR_.+100 PC_^1_%NUM $200_)OPEN LOOP_/-100€€ PC_^1TBLPTR NUM 0_^1_%EJT_]_^1* **************************************************_^1*_$SECTION TWO - DAC BIT WEIGHT TEST_^1* **************************************************_^1TWO_"LDA TESTS_(IS TEST 2 SELECTED_^1_%AND- ONEBIT+2_^1_%SAN TW4_^1_%JMP* THREE_^1TW4_"ENA 0_,CLEAR REPEAT COUNTER_^1_%STA REPEAT_^1_%LDA =A2_*SET SECTION NUMBER_^1_%STA MSG9A_^1TW8_"ENA 1_^1_%STA€€* SHIFT_^1_%STA* ONELFT_^1TW12_!LDA* SHIFT_^1_%RTJ DACOUT_'OUTPUT TO DACS_^1_%STQ* ERR21_^1TW16_!RTJ- (AMONI)_%5 SEC DELAY_^1_%NUM $1124_^1_%ADC TW20-TW16-1_^1_%NUM 5_^1_%JMP- (ADISP)_^1TW20_!LDA ECHO_)IS OPEN LOOP_^1_%SAZ TW24_)YES_^1_%LDA* ERR21_(ANY OUTPUT ERRORS_^1_%SAN TW24_*YES_^1_%RTJ AICHEK_'READ ANALOG INPUT AND CHECK_^1TW24_!LDA* ONELFT_'IS ONE-BIT LEFT SHIFT SEQ A€€CTIVE_^1_%SAN TW28_)YES_^1_%JMP* TW52_)NO_^1TW28_!LDA* SHIFT_^1_%AND- ONEBIT+8_$IS END OF POSITIVE SEGMENT_^1_%SAN TW32_)YES_^1_%JMP* TW40_)NO_^1TW32_!LDA ECHO_)IS ECHO_^1_%SAZ TW40_)NO_^1_%LDA AITYPE_'YES, IS 1536_^1_%SAN TW36_)NO_^1_%JMP* TW56_)YES, STOP HERE_^1TW36_!LDA AIFS_)IS 5 VOLT ADC_^1_%SAN TW40_)NO_^1_%LDA- ONEMSK+25_#EXCLUDE -100 PC FS_^1_%JMP* TW48_^1TW40_!LDA*€€ SHIFT_^1_%ALS 1_^1_%STA* SHIFT_^1_%AND- ONEBIT+10_#IS END OF ONE-BIT LEFT SHIFT_^1_%SAN TW44_)YES_^1_%JMP* TW12_)NO_^1TW44_!LDA- ONEMSK+24_#SET UP FOR ONE-BIT RIGHT SHIFT SEQ_^1TW48_!STA* SHIFT_^1_%CLR A_^1_%STA* ONELFT_^1_%JMP* TW12_^1TW52_!LDA* SHIFT_^1_%ARS 1_^1_%STA* SHIFT_^1_%INA 0_,IS END OF RIGHT SHIFT SEQUENCE_^1_%SAZ TW56_)YES_^1_%JMP* TW12_^1TW56_!RTJ ENDTST_^1_%J€€MP* TW8_^1_%JMP* THREE_^1_%SPC 2_^1SHIFT NUM 0_^1ONELFT NUM 0_^1ERR21 NUM 0_^1_%EJT_]_^1* **************************************************_^1*_$SECTION THREE - 10 PERCENT INCREMENT TEST_!*_^1* **************************************************_^1THREE LDA TESTS_(IS TEST 3 SELECTED_^1_%AND- ONEBIT+3_^1_%SAN TH4_*YES_^1_%JMP ENDMSG_^1TH4_"ENA 0_^1_%STA REPEAT_'CLEAR RUN€€ COUNTER_^1_%LDA =A3_^1_%STA MSG9A_^1_%LDA =N$200_'SET DAC F.S. VALUE_^1_%STA* DACFS2_^1_%LDA ECHO_)IS ECHO_^1_%SAZ TH8_*NO_^1_%LDA MODE_)YES ,IS VOLTAGE_^1_%SAZ TH8_*NO_^1_%LDA AIFS_)YES ,IS 5 VOLT ADC_^1_%SAN TH8_*NO_^1_%LDA =N$100_'ECHO,VOLTAGE,5 V ADC, RESET FS_^1_%STA* DACFS2_^1TH6_"ENA 0_^1_%STA* FACTOR_'INITIALIZE INCREMENT CONSTANT_^1TH8_"LDA* FACTOR_'CALCULATE €€DAC OUTPUT VALUE_^1_%CLR Q_^1_%MUI* DACFS2_'FACTOR/100 * DAC FS_^1_%DVI =N100_^1_%STA* DACVA1_^1_%LDA MODE_)IS CURRENT MODE_^1_%SAN TH12_)NO_^1_%LDA* DACVA1_'SCALE OUTPUT FOR CURRENT_^1_%CLR Q_^1_%MUI =N8_^1_%DVI =N10_^1_%ADD =N$66_^1_%STA* DACVA1_^1TH12_!LDA* DACVA1_'IS OUTPUT AT PLUS F.S._^1_%SUB =N$200_^1_%SAM TH14_)NO_^1_%JMP* TH24_)YES SKIP OUTPUT_^1TH14_!LDA* DACVA€€1_^1_%RTJ DACOUT_'OUTPUT POSITIVE INCREMENT TO DACS_^1_%STQ* ERR31_^1TH16_!RTJ- (AMONI)_%5 SEC DELAY_^1_%NUM $1124_^1_%ADC TH20-TH16-1_^1_%NUM 5_^1_%JMP- (ADISP)_^1TH20_!LDA* ERR31_(WAS ERROR ON OUTPUT TO DACS_^1_%SAN TH24_)YES_^1_%LDA ECHO_)NO,IS ECHO_^1_%SAZ TH24_)NO_^1_%RTJ AICHEK_^1TH24_!LDA MODE_)IS CURRENT_^1_%SAZ TH36_)YES_^1_%LDA ECHO_)IS ECHO_^1_%SAZ TH32_)NO_^€€1_%LDA AITYPE_'IS 1536_^1_%SAZ TH36_)YES_^1TH32_!LDA* DACVA1_'IS DAC VALUE POSITIVE_^1_%SAM TH36_)NO_^1_%SAZ TH36_^1_%TCA A_^1_%INA 1_,MAKE TWOS COMPLEMENT_^1_%STA* DACVA1_^1_%JMP* TH14_^1TH36_!LDA* FACTOR_'BUMP FACTOR TO NEXT OUTPUT VALUE_^1_%INA 10_^1_%STA* FACTOR_^1_%SUB =N110_(IS 100NPC FC DONE_^1_%SAP TH40_)YES_^1_%JMP* TH8_^1TH40_!RTJ ENDTST_^1_%JMP* TH6_^1_%JMP EN€€DMSG_'FINISHED WITH TSTDAC_^1DACFS2 NUM 0_^1DACVA1 NUM 0_^1FACTOR NUM 0_^1ERR31 NUM 0_^1_%EJT 0_^1* **************************************************_^1*_*DAC OUTPUT ROUTINE_4*_^1* **************************************************_^1DACOUT NUM 0_^1_%AND- ONEMSK+9_$SAVE DAC VALUE_^1_%STA* TMPDO1_^1_%ENA 0_,CLEAR ERROR COUNTER_^1_%STA DACERR_^1_%ENA 0_,BUILD DAC OUTPUT RE€€QUEST BUFFER_^1_%STA- I_,DAC OUTPUT TABLE INDEX_^1_%LDQ =XARAY1-HERE ARRAY INDEX_^1_%ADQ HERE_^1_%STQ* IDXDO_^1DAC12 LDQ- DCHNL,Q_%DAC CHNL NUMBER PARAMETER_^1_%LDA- CHNBIT,Q_$CHANL ADDRESS BITS 12-13_^1_%ADD* TMPDO1_'ADD DAC VALUE TO CHANL ADDRESS_^1_%LDQ IDX_^1_%STA* DACADD,B_^1_%LDQ* IDXDO_^1_%LDA- (ZERO),Q_$GET/STORE DAC WEMS_^1_%AND =N$FF7F_^1_%STA* DACADD,I_^1_%INQ 4_€€,BUMP ARRAY INDEX_^1_%STQ* IDXDO_^1_%RAO- I_^1_%LDA- I_,IS LAST DONE_^1_%SUB IDX_^1_%SAZ DAC16_(YES_^1_%JMP* DAC12_(NO_^1DAC16 LDA LOCATN_'IS REMOTE_^1_%SAN DAC20_(YES_^1_%JMP* DAC36_(NO_^1DAC20 LDA DACLU_(OUTPUT TO DAC ON REMOTE IOM_^1_%STA* DLU_*LU_^1_%LDA IDX_^1_%STA* NDACS_(N_^1DAC24 RTJ- (AMONI)_%WRITE_^1_%NUM $0544_(RC_^1_%ADC DAC28-DAC24-1 C_^1_%NUM 0_,T_^1DLU_"N€€UM 0_,LU_^1NDACS NUM 0_.N_^1_%ADC DACADD-DAC24-1 S_^1_%JMP- (ADISP)_^1DAC28 SQP DAC32_^1_%RAO* DACERR_'BUMP DAC OUTPUT ERROR COUNTER_^1_%ENA 0_^1_%RTJ RIOERR_'REPORT ERROR_^1DAC32 LDQ* DACERR_'RETURN ERROR COUNT_^1_%JMP* (DACOUT)_^1DAC36 ENA 0_,OUTPUT TO LOCAL DACS_^1_%STA* IDXDO_(OUTPUT BUFFER INDEX_^1DAC40 LDA* IDXDO_^1_%STA- I_^1_%LDQ IDX_^1_%LDA* DACADD,B_^1_%LDQ€€* DACADD,I_^1_%OUT REJ1-*_^1DAC42 RAO* IDXDO_^1_%LDA* IDXDO_(IS LAST_^1_%SUB IDX_^1_%SAN DAC43_(NO_^1_%JMP* DAC32_(YES_^1DAC43 JMP* DAC40_^1REJ1_!JMP* DAC44_(INTERNAL REJECT_^1_%LDA =XSMSG15-DAC52-2 EXTERNAL REJECT_^1_%STA* DAC52+7_^1_%LDA =XEMSG15-SMSG15_^1_%STA* DAC52+8_^1_%JMP* DAC48_^1DAC44 LDA =XSMSG14-DAC52-2_^1_%STA* DAC52+7_^1_%LDA =XEMSG14-SMSG14_^1_%STA* DAC52+€€8_^1DAC48 RTJ INIMSG_^1_%JMP* DAC56_(SKIP ERROR MESSAGE_^1_%LDA* DACADD,I_$SET UP WEMS IN MESSAGE_^1_%RTJ (RHXASC)_^1_%ADC (MSG13A-*)_^1DAC52 RTJ (MESAGE)_$REJECT MESSAGE_^1_%NUM $444_^1_%ADC (START-DAC52-2)_^1_%NUM 3_^1_%ADC SMSG9-DAC52-2_^1_%ADC EMSG9-SMSG9_^1_%ADC 0_^1_%ADC 0_^1_%ADC SMSG13-DAC52-2_^1_%ADC EMSG13-SMSG13_^1DAC56 RAO* DACERR_^1_%JMP* DAC42_^1_%SPC €€ 2_^1TMPDO1 NUM 0_^1IDXDO NUM 0_^1_%BZS DACADD(32)_"DAC REQUEST BUFFER_^1DACERR NUM 0_^1_%EJT_]_^1* **************************************************_^1*_*READ ANALOG INPUTS - CHECK READINGS_"*_^1* **************************************************_^1AICHEK NUM 0_^1_%ENA 0_^1_%STA* SIGN_^1_%STA* AIERR_^1_%LDA =N$200_'SET DAC F.S._^1_%STA* DACFS1_^1_%LDA MODE_)IS CURRENT_^€€1_%SAZ AI2_*YES_^1_%LDA AIFS_)IS 5 VOLT ADC_^1_%SAN AI2_*NO_^1_%LDA =N$100_^1_%STA* DACFS1_'RESET DAC FS VALUE TO 50 PC FS_^1AI2_"LDQ IDX_^1_%LDQ* DACADD,Q_$DAC OUTPUT VALUE_^1_%TRQ A_^1_%AND- ONEBIT+9_$IS OUTPUT NEGATIVE_^1_%SAZ AI4_*NO_^1_%INQ -1_+YES, MAKE ONES COMPLEMENT_^1_%TCQ Q_,MAKE POSITIVE_^1_%RAO* SIGN_^1AI4_"TRQ A_^1_%AND- ONEMSK+9_^1_%CLR Q_^1_%MUI =N$7D00€€_%ANALOG INPUT FULL SCALE_^1_%DVI* DACFS1_'DAC FULL SCALE -LEFT JUSTIFIED_^1_%TRA Q_^1_%LDA* SIGN_)IS NEGATIVE_^1_%SAZ AI8_*NO_^1_%TCQ Q_,YES_^1AI8_"STQ* EXPVAL_'EXPECTED ANALOG INPUT VALUE_^1_%ENQ 0_,BUILD ANALOG INPUT REQUEST BUFFER_^1_%LDA =XARAY1-HERE_^1_%ADD HERE_^1_%STA- I_,PARAMETER ARRAY INDEX_^1AI12_!LDA- ACHNL,I_%AI CHANNEL_^1_%STA* AIADDR,Q_^1_%LDA- I_,BUMP ARRAY I€€NDEX_^1_%INA 4_^1_%STA- I_^1_%INQ 1_^1_%TRQ A_^1_%SUB IDX_*IS DONE_^1_%SAZ AI16_)YES_^1_%JMP* AI12_)NO_^1_%SPC 1_^1EXPVAL NUM 0_^1SIGN_!NUM 0_^1AIERR NUM 0_^1DACFS1 NUM 0_^1_%SPC 1_^1AI16_!LDA AILU_)SET LU_^1_%STA* ALU_^1_%LDA IDX_*SET N_^1_%STA* NAIS_^1_%LDA LOCATN_'IS LOCAL_^1_%SAN AI20_)NO_^1_%LDA AITYPE_'YES, IS 1501_^1_%SAZ AI20_)NO_^1_%JMP* AI32_)LOCAL 15O1_€€^1AI20_!RTJ- (AMONI)_%READ ANALOG INPUTS- 1536 OR REMOTE 1501_^1_%NUM $344_)R/C_^1_%ADC AI24-AI20-1_!C_^1_%NUM 0_,T_^1ALU_"NUM 0_,LU_^1NAIS_!NUM 0_-N_^1_%ADC AIADDR-AI20-1 S_^1_%JMP- (ADISP)_^1AI24_!SQP AI28_^1_%LDA LOCATN_'IS REMOTE_^1_%SAZ AI28_)NO - PICK UP ERROR IN DATA VALUE_^1_%ENA 1_^1_%RTJ RIOERR_^1_%JMP* (AICHEK)_^1AI28_!JMP* AI64_)CHECK DATA_^1AI32_!ENA 0_,RE€€AD ANALOG INPUTS - LOCAL 1501_^1_%STA- I_^1AI36_!LDQ* AIADDR,I_^1_%INQ 1_,CONVERT TO LOGICAL INDEX_^1_%RTJ AISB_^1_%SQM AI44_)ERROR_^1AI38_!LDQ* NAIS_^1_%STA* AIADDR,B_$STORE VALUE_^1_%RAO- I_^1_%LDA- I_^1_%SUB IDX_*IS END_^1_%SAN AI40_)NO_^1_%JMP* AI64_)YES, CHECK DATA_^1AI40_!JMP* AI36_^1AI44_!LDA- I_^1_%STA* ISAV1_^1_%STQ* QSAV1_^1_%RAO* AIERR_^1_%RTJ INIMSG_^1_%JMP* AI38_€€)SKIP ERROR MESSAGE_^1_%LDA* AIADDR,I_$SET UP CHANNEL ADDRESS_^1_%RTJ (RHXASC)_^1_%ADC (MSG28A-*)_^1_%LDA* QSAV1_^1_%AND- ONEBIT_'IS REJECT_^1_%SAN AI48_)YES_^1_%JMP* AI56_)NO, ILLEGAL INDEX_^1AI48_!RTJ (MESAGE)_$REJECT MESSAGE_^1_%NUM $444_^1_%ADC (START-AI48-2)_^1_%NUM 3_^1_%ADC SMSG9-AI48-2_^1_%ADC EMSG9-SMSG9_^1_%ADC SMSG25-AI48-2_^1_%ADC EMSG25-SMSG25_^1_%ADC SMSG2€€8-AI48-2_^1_%ADC EMSG28-SMSG28_^1_%JMP* AI60_^1_%SPC 1_^1ISAV1 NUM 0_^1ISAV2 NUM 0_^1TMPAI NUM 0_^1QSAV1 NUM 0_^1_%BZS AIADDR(32)_"REQUEST BUFFER_^1_%SPC 1_^1AI56_!RTJ (MESAGE)_$ILLEGAL CHANNEL MESSAGE_^1_%NUM $444_^1_%ADC (START-AI56-2)_^1_%NUM 3_^1_%ADC SMSG9-AI56-2_^1_%ADC EMSG9-SMSG9_^1_%ADC SMSG24-AI56-2_^1_%ADC EMSG24-SMSG24_^1_%ADC SMSG28-AI56-2_^1_%ADC €€ EMSG28-SMSG28_^1AI60_!LDA* ISAV1_^1_%STA- I_^1_%JMP* AI38_^1AI64_!LDA* AIERR_(WAS AI ERROR_^1_%SAZ AI68_)NO_^1_%JMP* AI104_(YES - RETURN_^1AI68_!ENA 0_,CHECK ANALOG INPUT READINGS WITH EXPTD_^1_%STA- I_,AI VALUE TABLE INDEX_^1AI72_!LDQ* NAIS_^1_%LDA* AIADDR,B_$GET NEXT VALUE_^1_%STA* VALUE_^1_%TRA Q_^1_%SUB- ONEBIT+15_#IS TIMEOUT VALUE ($8000)_^1_%SAN AI76_)NO_^1_%LDA =XSMSG€€27-AI88-2_^1_%STA* AI88+7_^1_%LDA =XEMSG27-SMSG27_^1_%STA* AI88+8_^1_%JMP* AI84_^1AI76_!TRQ A_^1_%SUB =N$8001_%IS REJECT_^1_%SAZ AI80_)YES_^1_%TRQ A_^1_%SUB =N$8002_^1_%SAZ AI80_)YES_^1_%JMP* AI92_)NO,GOOD DATA_^1AI80_!LDA =XSMSG25-AI88-2_^1_%STA* AI88+7_^1_%LDA =XEMSG25-SMSG25_^1_%STA* AI88+8_^1AI84_!LDA- I_^1_%STA* ISAV2_^1_%RTJ INIMSG_^1_%JMP* AI100_(SKIP ERROR MESSAGE€€_^1_%LDA* AIADDR,I_$SET CHANNEL ADDRESS_^1_%RTJ (RHXASC)_^1_%ADC (MSG28A-*)_^1AI88_!RTJ (MESAGE)_$TIMEOUT OR REJECT MESSAGE_^1_%NUM $444_^1_%ADC (START-AI88-2)_^1_%NUM 3_^1_%ADC SMSG9-AI88-2_^1_%ADC EMSG9-SMSG9_^1_%NUM 0_^1_%NUM 0_^1_%ADC SMSG28-AI88-2_^1_%ADC EMSG28-SMSG28_^1_%LDA* ISAV2_^1_%STA- I_^1_%JMP* AI100_^1AI92_!LDQ- I_,SET INDEX TO PARAMETER ARRAY_^1_%QLS 2_€€,X4_^1_%ADQ =XARAY1-HERE_^1_%ADQ HERE_^1_%LDA- ERR,Q_(ALLOWABLE ERROR IN ADC BITS_^1_%ALS 4_^1_%STA* TMPAI_^1_%LDA* VALUE_(ACTUAL-EXPECTED_^1_%SUB EXPVAL_^1_%SAM AI96_^1_%TCA A_^1AI96_!ADD* TMPAI_(IS WITHIN ALLOWABLE ERROR_^1_%SAM AI108_(NO_^1AI100 RAO- I_,IS DONE_^1_%LDA- I_^1_%SUB IDX_^1_%SAZ AI104_(YES_^1_%JMP* AI72_)NO, CHECK NEXT VALUE_^1AI104 JMP (AICHEK)_^1AI108 €€ LDA- I_^1_%STA ISAV2_(SAVE INDEX_^1_%LDA* VALUE_(ERROR- OUTPUT ACTUAL AND EXPECTED_^1_%RTJ* CVADC_(CONVERT TO VOLTS IN ASCII_^1_%ADC MSG26B-*_^1_%LDA EXPVAL_^1_%RTJ* CVADC_(CONVERT TO VOLTS IN ASCII_^1_%ADC MSG26A-*_^1_%LDA ISAV2_^1_%STA- I_^1_%LDA AIADDR,I_^1_%RTJ (RHXASC)_^1_%ADC (MSG28A-*)_^1_%RTJ INIMSG_^1_%JMP* AI116_^1AI112 RTJ (MESAGE)_$ECHO DATA ERROR_^1_%NUM $€€444_^1_%ADC (START-AI112-2)_^1_%NUM 3_^1_%ADC SMSG9-AI112-2_^1_%ADC EMSG9-SMSG9_^1_%ADC SMSG28-AI112-2_^1_%ADC EMSG28-SMSG28_^1_%ADC SMSG26-AI112-2_^1_%ADC EMSG26-SMSG26_^1AI116 LDA ISAV2_(RESTORE INDEX_^1_%STA- I_^1_%JMP* AI100_^1VALUE NUM 0_^1_%EJT_]_^1* **************************************************_^1*_*CONVERT ADC READING TO ASCII VOLTS_#*_^1*_-FORMAT IS +NN.NN€€N_2*_^1*_-CALL IS_<*_^1*_/A-REG = ADC VALUE_0*_^1*_/RTJ CVADC_7*_^1*_/ADC BUFFER-*_$4 WORD BUFFER *_^1* **************************************************_^1CVADC NUM 0_^1_%LDQ =N$2B00_%SET SIGN_^1_%SAP CV4_^1_%LDQ =N$2D00_^1_%TCA A_,MAKE VALUE POSITIVE_^1CV4_"STQ* SGN_^1_%STA* TMPVAL_^1_%LDA =N5000_'SET ADC RANGE_^1_%LDQ AIFS_^1_%SQZ CV8_^1_%LDA =N10000_^1CV8_"STA* RA€€NGE_^1_%LDA* TMPVAL_'VALUE/ADC FULL SCALE * MILLIVOLTS FS_^1_%CLR Q_^1_%MUI* RANGE_^1_%DVI =N$7D00_%ADC FS_^1_%STA* TMPVAL_'READING IN MILLIVOLTS_^1_%LDA =N10000_%CONVERT TO DECIMAL_^1_%STA* MODULS_^1_%ENA 0_^1_%STA- I_^1CV12_!LDA* TMPVAL_^1_%CLR Q_^1_%DVI* MODULS_'CALC MS DECIMAL DIGIT_^1_%TRA Q_^1_%ADD =N$30_^1_%STA* TBUF,I_'SAVE_^1_%TRQ A_^1_%CLR Q_^1_%MUI* MODULS_'CALC€€ REMAINDER_^1_%TCA A_^1_%ADD* TMPVAL_^1_%STA* TMPVAL_'SAVE REMAINDER_^1_%LDA* MODULS_'RESCALE MODULUS FOR NEXT DIGIT_^1_%CLR Q_^1_%DVI =N10_^1_%STA* MODULS_^1_%LDA- I_^1_%INA -4_+HAVE 5 DIGITS BEEN CALCULATED_^1_%SAZ CV16_)YES_^1_%RAO- I_,NO_^1_%JMP* CV12_^1CV16_!LDA* (CVADC)_%GET CALLERS BUFFER LOCATION_^1_%ADD* CVADC_^1_%STA* BFLOC_^1_%RAO* CVADC_(BUMP RETURN_^1_%LDA* TBUF_)€€CONVERT DECIMAL IN TBUF TO ASCII_^1_%EOR* SGN_*FORMAT IS +12.345_^1_%STA* (BFLOC)_%+1_^1_%RAO* BFLOC_^1_%LDA* TBUF+1_^1_%ALS 8_^1_%ADD =N$2E_(PUT IN DECIMAL POINT_^1_%STA* (BFLOC)_%2._^1_%RAO* BFLOC_^1_%LDA* TBUF+2_^1_%ALS 8_^1_%EOR* TBUF+3_^1_%STA* (BFLOC)_%34_^1_%RAO* BFLOC_^1_%LDA* TBUF+4_^1_%ALS 8_^1_%EOR =N$20_^1_%STA* (BFLOC)_%5 SPACE_^1_%JMP* (CVADC)_^1BFLOC NUM 0_^1T€€MPVAL NUM 0_^1SGN_"NUM 0_^1MODULS NUM 0_^1RANGE NUM 0_^1TBUF_!NUM 0,0,0,0,0_^1_%EJT 0_^1* **************************************************_^1*_*REMOTE I/0 ERROR PROCESSING ROUTINE_"*_^1* **************************************************_^1RIOERR NUM 0_^1_%STA* OPCD_)SAVE OP CODE 0=DAC OUT 1=AI_^1_%RTJ INIMSG_^1_%JMP* (RIOERR)_$RETURN IF ERROR MESSAGES TURNED OFF_^1_%L€€DQ DACLU_(OUTPUT TO DAC ON 1590_^1_%SAZ RIO8_^1_%LDQ AILU_)INPUT FROM ANALOG INPUT ON 1590_^1RIO8_!LDQ LOG1A,Q_^1_%LDA- ESTAT2,Q_$1590 STATUS WORD_^1_%STA* TMPRO1_'SAVE STATUS_^1_%TRA Q_^1_%AND- ONEBIT+13_#IS LOCAL RECEIVE ERROR_^1_%SAZ RIO12_.NO_^1_%LDA =XSMSG18-RIOMSG-2_!YES_^1_%STA* RIOMSG+8_^1_%LDA =XEMSG18-SMSG18_^1_%STA* RIOMSG+10_^1_%JMP* RIO44_^1RIO12 TRQ A_^1_%AN€€D- ONEBIT+12_#IS REMOTE RECEIVE ERROR_^1_%SAZ RIO16_.NO_^1_%LDA =XSMSG19-RIOMSG-2_!YES_^1_%STA* RIOMSG+9_^1_%LDA =XEMSG19-SMSG19_^1_%STA* RIOMSG+10_^1_%JMP* RIO44_^1RIO16 TRQ A_^1_%AND =N$600_^1_%SUB =N$400_'IS END DEVICE INTERNAL REJ._^1_%SAZ RIO18_(YES_^1_%JMP RIO24_^1RIO18 LDA* OPCD_)IS DAC OUTPUT_^1_%SAZ RIO20_.YES_^1_%LDA =XSMSG16-RIOMSG-2_!NO - AI INT REJ_^1_%STA*€€ RIOMSG+9_^1_%LDA =XEMSG16-SMSG16_^1_%STA* RIOMSG+10_^1_%JMP* RIO44_^1RIO20 LDA =XSMSG14-RIOMSG-2_!DAC INT REJ_^1_%STA* RIOMSG+9_^1_%LDA =XEMSG14-SMSG14_^1_%STA* RIOMSG+10_^1_%JMP* RIO44_^1RIO24 TRQ A_^1_%AND =N$600_^1_%SUB =N$200_'IS END DEVICE EXTERNAL REJECT_^1_%SAZ RIO28_(YES_^1_%JMP* RIO36_(NO_^1RIO28 LDA* OPCD_)IS DAC OPERATION_^1_%SAZ RIO32_.YES_^1_%LDA =XSMSG17-€€RIOMSG-2_!NO - AI EXT REJ_^1_%STA* RIOMSG+9_^1_%LDA =XEMSG17-SMSG17_^1_%STA* RIOMSG+10_^1_%JMP* RIO44_^1RIO32 LDA =XSMSG15-RIOMSG-2_!DAC EXT REJ_^1_%STA* RIOMSG+9_^1_%LDA =XEMSG15-SMSG15_^1_%STA* RIOMSG+10_^1_%JMP* RIO44_^1RIO36 TRQ A_^1_%SUB =N$7FFF_%IS 1590 REJECT_^1_%SAN RIO40_.NO_^1_%LDA =XSMSG20-RIOMSG-2_!YES_^1_%STA* RIOMSG+9_^1_%LDA =XEMSG20-SMSG20_^1_%STA* RIOMSG+€€10_^1_%JMP* RIO44_^1RIO40 LDA =XSMSG22-RIOMSG-2_!ASSUME TIMEOUT_^1_%STA* RIOMSG+9_^1_%LDA =XEMSG22-SMSG22_^1_%STA* RIOMSG+10_^1RIO44 LDA* TMPRO1_'SET STATUS INTO MESSAGE_^1_%RTJ (RHXASC)_^1_%ADC (MSG23A-*)_^1RIOMSG RTJ (MESAGE)_$1590 ERROR MESSAGE_^1_%NUM $444_^1_%ADC (START-RIOMSG-2)_^1_%NUM 3_^1_%ADC SMSG9-RIOMSG-2_^1_%ADC EMSG9-SMSG9_^1_%ADC SMSG23-RIOMSG-2_^1_%ADC €€ EMSG23-SMSG23_^1_%ADC 0_^1_%ADC 0_^1_%JMP* (RIOERR)_^1_%SPC 2_^1TMPRO1 NUM 0_^1OPCD_!NUM 0_^1_%EJT_]_^1* **************************************************_^1*_*ERROR MESSAGE GATE_4*_^1* **************************************************_^1INIMSG NUM 0_^1_%RAO ERRCTR_^1_%LDA FLAG_)IS ERROR PRINTOUT DESIRED_^1_%AND- ONEBIT+7_^1_%SAN INI8_)NO_^1_%LDA FLAG_)IS STOP SET_^1_%€€AND- ONEBIT_^1_%SAZ INI4_)NO_^1_%JMP* ENDMSG_^1INI4_!LDA REPEAT_^1_%RTJ (RHXASC)_^1_%ADC (MSG9B-*)_^1_%RAO* INIMSG_^1INI8_!JMP* (INIMSG)_^1_%EJT 0_^1* **************************************************_^1*_*TERMINATION SEQUENCE_2*_^1* **************************************************_^1ENDTST NUM 0_^1_%RAO REPEAT_^1_%LDA FLAG_)IS STOP SET (BIT 0)_^1_%AND- ONEBIT_^1_%SAN E€€NDMSG_'YES_^1_%LDA RUNS_^1_%SAZ END4_)ZERO RUNS_^1_%SAM END8_)INFINIYE RUNS_^1_%SUB REPEAT_^1_%SAN END8_)NOT END OF RUNS_^1END4_!RAO* ENDTST_^1END8_!JMP* (ENDTST)_^1ENDMSG LDA REPEAT_'SET NBR OF RUNS_^1_%RTJ (ROCDEC)_$CONVERT RUNS TO DECIMAL_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (MSG29A-*)_^1_%LDA ERRCTR_'SET NBR OF ERRORS_^1_%RTJ (ROCDEC)_$CONVERT ERRORS TO DECIMAL_^1€€_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (MSG29B-*)_^1END12 RTJ (MESAGE)_^1_%NUM $8144_^1_%ADC SMSG29-END12-2_^1_%ADC EMSG29-SMSG29_^1_%LDA FLAG_)CHECK FOR RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END16_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END16 LDA START+1_%CLEAR TEST NAME FROM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$EXIT TEST_^1_%ADC (START-*)_^1_%EJT_]_^1* *€€*************************************************_^1*_*MESSAGE BUFFERS_7*_^1* **************************************************_^1SMSG1 ALF *,BEGIN 1566 DAC TEST*_^1_%EQU EMSG1(*)_^1SMSG2 ALF *,SECTIONS,RUNS,MODE,LOCATION,ECHO *_^1_%EQU EMSG2(*)_^1SMSG3 ALF *,AI TYPE= *_^1_%EQU EMSG3(*)_^1SMSG4 ALF *,AI LU= *_^1_%EQU EMSG4(*)_^1SMSG5 ALF *,ADC RANGE= *_^1_%EQU EMSG5€€(*)_^1SMSG6 ALF *,DAC LU= *_^1_%EQU EMSG6(*)_^1SMSG7 ALF *,DAC WEMS,DAC CHANNEL *_^1_%EQU EMSG7(*)_^1SMSG8 ALF *,,AI CHANNEL,DAC ERROR *_^1_%EQU EMSG8(*)_^1SMSG9 ALF *,,SECTION *_^1MSG9A NUM 0_^1_%ALF *,,RUN *_^1MSG9B NUM 0,0_^1_%EQU EMSG9(*)_^1SMSG13 ALF *,,WEMS *_^1MSG13A NUM 0,0_^1_%EQU EMSG13(*)_^1SMSG14 ALF *,,DAC INTERNAL REJECT *_^1_%EQU EMSG14(*)_^1SMS€€G15 ALF *,,DAC EXTERNAL REJECT *_^1_%EQU EMSG15(*)_^1SMSG16 ALF *,,AI INTERNAL REJECT *_^1_%EQU EMSG16(*)_^1SMSG17 ALF *,,AI EXTERNAL REJECT *_^1_%EQU EMSG17(*)_^1SMSG18 ALF *,,LOCAL RECEIVE ERROR *_^1_%EQU EMSG18(*)_^1SMSG19 ALF *,,REMOTE RECEIVE ERROR *_^1_%EQU EMSG19(*)_^1SMSG20 ALF *,,1590 REJECT *_^1_%EQU EMSG20(*)_^1SMSG22 ALF *,,1590 TIMEOUT *_^1_%EQU EMSG22(*)€€_^1SMSG23 ALF *,,1590 STATUS = *_^1MSG23A NUM 0,0_^1_%EQU EMSG23(*)_^1SMSG24 ALF *,,AI CHANNEL NBR ILLEGAL *_^1_%EQU EMSG24(*)_^1SMSG25 ALF *,,AI REJECT *_^1_%EQU EMSG25(*)_^1SMSG26 ALF *,,ECHO ERROR EXPTD= *_^1MSG26A NUM 0,0,0,0_^1_%ALF *, VOLTS*_^1_%ALF *, ACTUAL= *_^1MSG26B NUM 0,0,0,0_^1_%ALF *, VOLTS*_^1_%EQU EMSG26(*)_^1SMSG27 ALF *,,AI TIMEOUT *_^1_%EQU EMS€ξG27(*)_^1SMSG28 ALF *,,CHANNEL NBR *_^1MSG28A NUM 0,0_^1_%EQU EMSG28(*)_^1SMSG29 ALF *,END 1566 DAC TEST, *_^1MSG29A NUM 0,0_^1_%ALF *, RUNS, *_^1MSG29B NUM 0,0_^1_%ALF *, ERRORS *_^1_%EQU EMSG29(*)_^1_%EQU END(*)_^1_%END_]_^__ ξPSCMLLV CSY/ B67 P€1_%NAM SCMLLV_'DECK-ID B67 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^€€1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_$SCMLLV IS A DIAGNOSTIC EXERCISER FOR THE 1553/1544_^1*_$DIGITAL_^1*_$I/O SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAG-_^1*_$NOSTIC SUPERVISOR "SCMEXC". BEFORE TEST EXECUTION IS STARTED, THE_^1*_$USER IS REQUESTED TO INPUT THE TEST PARAMETERS -- LOGICAL€€ UNIT OF_^1*_$THE 1553, LOGICAL UNIT OF THE 1544, TEST SECTIONS TO BE EXECUTED_^1*_$AND THE NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED._^1*_$LOGICAL UNIT 0 IS USED IF THIS IS A LOCAL TEST. LOGICAL_^1*_$UNIT NON 0 INDICATES TO THE TEST THIS IS A REMOTE TEST._^1*_RTHE LOGICAL UNIT IS_^1*_$CHECKED FOR ITS VALIDITY. IF IVALID, THE USER IS REQUESTED_^1*_$TO RE-ENTER THE TEST PA€€RAMETERS. IF THE LOGICAL UNIT IS_^1*_$ENTERED INCORRECTLY THREE TIMES, THE TEST IS TERMINATED._^1*_$NEXT THE USER IS REQUESTED TO INPUT THE CABLING INFORMATION._^1*_$(IE. WHICH 1553 CHNLS ARE CABLED TO WHICH 1544 CHNLS) IF NO_^1*_$CHANNEL INFORMATION IS ENTERED, THE REQUEST IS REPEATED._^1*_$ONLY 16 SETS OF CHANNELS CAN BE TESTED AT ONE TIME._^1*_$SCMLLV_^1*_$IS DIVIDED INTO FIVE T€€EST SECTIONS (TESTS) AS FOLLOWS:_^1*_*SECTION 1_!$FFFF ON ONE CHANNEL, ALL OTHERS $0000_^1*_*SECTION 2_!$0000 ONE ONE CHANNEL, ALL OTHERS $FFFF_^1*_*SECTION 3_!USER INPUT ON ONE CHANNEL, ALL OTHERS $0000_^1*_*SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL,_^1*_6ALL OTHERS $0000_^1*_*SECTION 5_!LEFT SHIFTING ZERO BIT ON ONE CHANNEL,_^1*_6ALL OTHERS $FFFF_^1*_$THE SECTION NUMBER IS €€EQUIVALENT TO THE BIT NUMBER,_^1*_1BIT 1 = 1 DO SECTION 1_^1*_1BIT 2 = 1 DO SECTION 2_^1*_1BIT 3 = 1 DO SECTION 3_^1*_1BIT 4 = 1 DO SECTION 4_^1*_1BIT 5 = 1 DO SECTION 5_^1*_$IF SECTION THREE IS REQUESTED, THE USER IS REQUESTED TO_^1*_$INPUT THE SPECIAL PATTERN TO BE USED WHEN THAT SECTION IS_^1*_$EXECUTED. AFTER EACH I/O OPERATION THE HARDWARE IS CHECKED_^1*_$FOR ERRORS. IF ERRORS€€ OCCURRED, A MESSAGE IS OUTPUT. AFTER_^1*_$THE COMPLETION OF THE INPUT OPERATION, A DATA COMPARE CHECK_^1*_$IS DONE IF NO HARDWARE ERRORS OCCURRED. A MESSAGE IS OUTPUT_^1*_$FOR EACH DATA ERROR. AT THE END OF EACH TEST SEQUENCE, A_^1*_$PASS COUNTER IS UPDATED AND COMPARED AGAINST THE NUMBER OF_^1*_$TIMES REQUESTED BY THE USER. IF EQUAL, THE TEST IS TERM-_^1*_$INATED. THE STOP FLAG I€€S ALSO CHECKED AND IF SET THE TEST_^1*_$IS TERMINATED. IF $8000 IS ENTERED FOR THE NUMBER OF EXECU-_^1*_$TIONS, THE TEST SEQUENCE WILL BE EXECUTED INDEFINITELY._^1*_$AN ERROR DETECTED BY THE DRIVER PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_$SCMLLV TEST (1) RUN(2) 15XX CHL (3) STATUS ERROR (4)_^1*_]_^1*_$WHEREAS A DATA ERROR PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_%SCMLLV TEST (1) R€€UN(2) OUT CHNL (5) IS (6) IN CHNL (7) IS (8)_^1*_]_^1*_$WHERE ,_^1*_]_^1*_$(1) DECIMAL NUMBER OF TEST CURRENTLY BEING EXECUTED._^1*_$(2) HEXADECIMAL NUMBER OF CURRENT PASS._^1*_$(3) CHANNEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(4) PRINTOUT OF STATUS (EXPLAINED BELOW)_^1*_$(5) 1553 CHANNEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(6) IMAGE OUTPUT._^1*_$€€(7) 1544 CHANNEL INDEX IF LOCAL , OR CHANNEL ADDRESS IF REMOTE._^1*_$(8) DIGITAL INPUT._^1*_$XX_!44 OR 53 TO DESIGNATE EQUIPMENT._^1*_]_^1*_$THE STATUS (4) HAS THE FOLLOWING MEANINGS_^1*_]_^1*_$DIRECT IOM SYSTEM_^1*_,8001 = INTERNAL OR EXTERNAL REJECT_^1*_]_^1*_$REMOTE IOM SYSTEM_^1*_,7FFF = EXTERNAL OR INTERNAL REJECT ON LOCAL UNIT._^1*_,BIT 13 = RECEIVE ERROR ON LOCAL CONTROL U€€NIT._^1*_,BIT 12 = RECEIVE ERROR ON REMOTE CONTROL INPUT UNIT._^1*_,BIT 10 = INTERNAL REJECT ON REMOTE CONTROL UNIT._^1*_,BIT 9 = EXTERNAL REJECT ON REMOTE CONTROL UNIT._^1************************************************************************_^1*_]_^1*_$TEST SET UP WILL BE AS FOLLOWS_!***********_^1*_$SCMM FILE FOR 1553/1544_^1*_]_^1*_]_^1*_$SCMM LLV TEST_^1*_$1553 DRIVER_^1*_$1€€544 DRIVER_^1*_$CONTROL TABLE_^1*_]_^1*_]_^1*_$DONE TO ALLOW EASIER OPERATION OF THE TEST BY THE OPERATOR_^1*_]_^1************************************************************************_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1*****************************************************************€€*******_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%E€€QU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU ZROBIT($33)_!START OF ZERO BIT TABLE_^1_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATOR_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1_%EXT* DISB_)DIGITAL INPUT€€ DRIVER_^1_%EXT* DOSB_)DIGITAL OUTPUT DRIVER_^1_%EXT* INILZ_^1*_]_^1_%EQU DIAGLU(25)_"LOCATION IN PHYTAB OF DIAGNOSTIC L.U._^1_%EQU ERCODE(26)_"LOCATION IN PHYTAB FOR ALTDEV ERROR CODE_^1_%EQU TSTLLV(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTLLV_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATION REGION_8*_^1*_]_'*_^1******€€******************************************************************_^1_%SPC 2_^1START ALF 3,TSTLLV_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0€€_^1MESAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:INPUT PARAMETERS_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1*_#GO INITIALIZE CONTROL TABLE WHICH IS IN THIS FILE_^1*_]_^1_%RTJ INILZ_(GO INITILIZE CONTROL TABLE_^1*_]_^1ENTER1 R€€TJ* (MESAGE)_$OUTPUT INITIAL MSG_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET FIRST SET OF PARAMETERS_^1INI11 RTJ* (GETFLD)_^1_%INQ -1_^1_%STA LU,Q_)SAVE CONTROL WORDS_^1_%INQ -4_^1_%SQZ INI12-*-1_^1_%JMP* INI11_^1INI12 LDA RUNS_^1_%SAM 1_,IF 8000 SKIP CONVERT_^1_%RTJ* (RDECHX)_^1_%STA RUNS_^1_%LDA LU2_^1_%RTJ* (RDECHX)_$CO€€NVERT LU TO HEX_^1_%STA LU1544_^1_%LDA LU_+CONVERT LU IN_^1_%RTJ* (RDECHX)_^1_%STA LU1553_^1_%SAZ INI20_(SEE IF REMOTE OR LOCAL UNIT_^1_%LDA LU1544_'THIS UNIT HAS TO BE REMOTE_^1_%SAN INI121_'BOTH LU'S ARE REMOTE_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE LOCAL_^1INI20 LDA LU1544_^1_%SAZ INI120_'BOTH LU'S ARE LOCAL_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE LOCAL_^1INI€€120 JMP* INI15_(LOCALS DON'T HAVE A PHYSTAB_^1INI121 TRA Q_^1_%LDQ+ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$2F0_'TYPE CODE FOR 1544_^1_%SAZ INI13_^1_%JMP* INI14_^1INI13 LDQ LU1553_'PICK UP LU NUMBER_^1_%LDQ+ LOG1A,Q_%PICKUP PHYSTAB ADDRESS_^1_%STQ* PHYLO2_'SAVE PHYSTAB ADDRESS_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$300_'TYPE CODE FOR A 155€€3_^1_%SAN 1_^1_%JMP* INI15_^1INI14 RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG10B-MES2_^1_%ADC MSG10E-MSG10B_^1_%LDA* INPERR_%IS THIS THE THIRD L.U. ERROR_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1PHYLOC NUM 0_^1INPERR NUM 0_^1PHYLO2 NUM 0_,TEMP HOLD FOR PHYSTAB ADDRESS_€€^1*_]_^1INI15 CLR A_^1_%STA NUMCHN_^1_%RTJ* (MESAGE)_^1MES3_!NUM $8144_^1_%ADC MSG2B-MES3_^1_%ADC MSG2E-MSG2B_^1INI21 ENQ 0_^1_%RTJ* (INFOIN)_$GET CHNL INFORMATION_^1_%SQP INI22-*-1_^1_%JMP* INI15_^1INI22 RTJ* (GETFLD)_^1_%INQ -2_+CK FOR SECOND FIELD._^1_%SQZ INI23-*-1_^1_%SAP ANDOFF_^1_%JMP* INI24_)RECEIVED A FFFF MEANING NO MORE CHANLS_^1ANDOFF AND =N$00FF_%SAVE ONL€€Y THE STATION AND MODULE_^1_%LDQ NUMCHN_^1_%STA OUTCHN,Q_'CHANNEL NUMBER._^1_%JMP* INI22_^1INI23 LDQ NUMCHN_'TO HERE IF SECOND FIELD_^1_%STA INCHN,Q_%STORE INPUT CHNL NUM._^1_%RAO NUMCHN_^1_%INQ -15_*CK FOR 16 CHANNELS._^1_%SQZ INI24-*-1_^1_%JMP* INI21_^1INI24 LDA NUMCHN_'CK FOR NO CHNLS SPECIFIED._^1_%INA -1_^1_%STA NUMCHN_^1_%SAP INCNR1_^1_%JMP ENDMSG_'NO CHANNELS S€€PECIFIED EXIT_^1INCNR1 TRA Q_,Q=NUM OF CHANNELS_^1_%LDA LU1544_^1_%SAN INI31_(REMOTE UNITS DON'T DO ANYTHING TO MODULE_^1INI30 LDA OUTCHN,Q_^1_%INA 1_,INCREASE STATION BY 1_^1_%STA OUTCHN,Q_^1_%LDA INCHN,Q_^1_%INA 1_,INCREASE STATION BY 1_^1_%STA INCHN,Q_^1_%INQ -1_^1_%SQM INI31_^1_%JMP* INI30_(NOT DONE_^1INI31 LDA* TESTS_(IF TEST 3 IS REQUESTED GET SPECIAL PATTERN_^1_€€%AND- ONEBIT+3_^1_%SAZ INI32-*-1_^1_%RTJ (MESAGE)_$INPUT SPECIAL PATTERN_^1MES4_!NUM $8144_^1_%ADC MSG7B-MES4_^1_%ADC MSG7E-MSG7B_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1_%RTJ (GETFLD)_$INPUT SPECIAL PATTERN_^1_%STA* SPCPAT_^1INI32 CLR A_^1_%STA PASSES_^1_%STA ERRCTR_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_)SECTION 1_!$FFF€€F ON ONE CHANNEL, ALL OTHERS $0000_)*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TESTS_(IS TEST 1 REQUESTED_^1_%AND- ONEBIT+1_^1_%SAZ T2CK-*-1_^1TEST1 LDA =N$2031_%BEGIN TEST 1_^1_%STA TNUM_^1_%CLR A_^1_%RTJ* FXIMAG_'SET ALL REGISTERS TO ZERO._^1_%SET A_,FIX IMAGE PARAMETERS_^1_%STA PATT1_^1_%CLR A_.SAMPAT._^€€1_%STA PATT2_^1_%RTJ SAMPAT_^1************************************************************************_^1*_]_'*_^1*_)SECTION 2_!$0000 ON ONE CHANNEL, ALL OTHERS $FFFF_)*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* TESTS_(IS TEST 2 REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEG€€IN TEST 2_^1_%STA TNUM_^1_%SET A_,SET ALL REGISTERS_^1_%RTJ* FXIMAG_)TO FFFF._^1_%CLR A_,FIX IMAGE_^1_%STA* PATT1_*PARAMETERS_^1_%SET A_.FOR SAMPAT._^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_!SECTION 3_!USER INPUT PATTERN ON ONE CHANNEL, ALL OTHERS $0000_"*_^1*_]_'*_^1***********************€€*************************************************_^1_%SPC 2_^1T3CK_!LDA* TESTS_(IS TEST3 REQUESTED_^1_%AND- ONEBIT+3_^1_%SAN TEST3_^1_%JMP* T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA TNUM_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA* SPCPAT_^1_%STA* PATT1_(FIX IMAGE PARAMETERS FOR_^1_%CLR A_.SAMPAT._^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%EJT_]_^1****************************************€€********************************_^1*_]_'*_^1* SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL, ALL OTHERS $0000 *_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA* TESTS_(IS TEST 4 REQUESTED_^1_%AND- ONEBIT+4_^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1*_]_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA TNUM_^1_%CLR A_,SET ALL REGISTE€€RS_^1_%RTJ* FXIMAG_)TO ZERO._^1_%LDA- ONEBIT+15_#GET FIRST IMAGE, $8000._^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%SET A_^1_%RTJ* FXIMAG_^1_%LDA- ZROBIT+15_#GET SECOND IMAGE, $7FFF._^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1* SECTION 5_!LEFT SHIFTING ZERO BIT ON ONE CHANNEL, ALL OTHERS $FFFF *_^1*_]_€€'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA* TESTS_(IS TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAN TEST5-*-1_^1_%JMP ENDTST_^1TEST5 LDA =N$2035_%BEGIN TEST 5_^1_%STA TNUM_^1_%SET A_^1_%RTJ* FXIMAG_^1_%LDA- ZROBIT+15_#GET FIRST IMAGE, $7FFF_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA- ONEBIT+15_#GE€€T SECOND IMAGE, $8000_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%JMP ENDTST_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1LU2_"NUM 0_,INPUT LU._^1TESTS NUM 0_^1RUNS_!NUM 0_^1SWITCH NUM 0_,1=CLOSED CONTACTS_"0= OPEN CONTACTS_^1SPCPAT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2SET ALL CHNLS TO DESIRED PATTERN_2*_^1*_]_€€'*_^1************************************************************************_^1_%SPC 2_^1FXIMAG 0_"0_^1_%LDQ* NUMCHN_'FILL TABLE OF OUTPUT_^1FX1_"STA PATOUT,Q_'IMAGES WITH PATTERN_^1_%INQ -1_-IN A-REG._^1_%SQM FX2-*-1_^1_%JMP* FX1_^1FX2_"CLR Q_,SET ALL REGISTERS_^1_%TCQ A_^1_%RTJ* DIGIO_^1_%JMP* (FXIMAG)_^1_%SPC 2_^1_%SPC 2_^1***********************************************€€*************************_^1*_]_'*_^1*_.COMMOM ROUTINE FOR SHIFTING PATTERN I/O_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CRCBIT 0_"0_^1CIRC1 RTJ* POUTLD_'SET UP PATOUT._^1_%LDQ* BEGCHN_^1_%LDA TNUM_)SET-UP PARAMETERS FOR_^1_%AND- ONEBIT_)REG. I/O._^1_%SAZ CIRC2-*-1_^1_%TRQ A_,FOR TEST 5._^1_%INA -1_^1_%JMP* CIRC3_^1CIR€€C2 TRQ A_^1CIRC3 RTJ* DIGIO_^1_%RTJ CHKREG_^1_%LDA* BITCTR_'CK FOR LAST BIT POSITION._^1_%INA -16_^1_%SAZ CIRC4-*-1_^1_%JMP* CIRC1_^1CIRC4 STA* BITCTR_^1_%LDQ* BEGCHN_'REINITIALIZE CURRENT_^1_%LDA* IMAGE1_)CHANNEL IMAGE._^1_%AND- LPMSK+15_^1_%SAZ CIRC5-*-1_^1_%SET A_^1CIRC5 STA PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* BEGCHN_'CK FOR LAST CHANNEL_^1_%SUB* NUMCHN_^1_%SA€€Z CIRC6-*-1_#NO, INCREMENT_^1_%RAO* BEGCHN_)COUNTER_^1_%JMP* CIRC1_^1CIRC6 STA* BEGCHN_'YES, ZERO COUNTER._^1_%JMP* (CRCBIT)_^1*_]_^1PATT1 NUM 0_^1PATT2 NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_+SHIFT DATA PATERN AND STORE IN OUTPUT TABLE_.*_^1*_]_'*_^1*************************************************************€€***********_^1_%SPC 2_^1POUTLD 0_"0_^1_%LDA* IMAGE1_'GET OLD IMAGE_^1_%ALS 1_.AND SHIFT LEFT._^1_%STA* IMAGE1_^1_%LDQ* BEGCHN_'GET COUNTER._^1_%STA* PATOUT,Q_$STORE CURRENT IMAGE FOR_^1_%RAO* BITCTR_'INCREMENT BIT COUNTER_^1_%JMP* (POUTLD)_^1*_]_^1_%BZS OUTCHN(16)_^1_%BZS INCHN(16)_^1*_]_^1NUMCHN NUM 0_^1BEGCHN NUM 0_^1CURCHN NUM 0_^1ENDCHN NUM 0_^1BITCTR NUM 0_^1IMAGE1 NUM€€ 0_^1************************************************************************_^1*_]_'*_^1*_0COMMON I/O ROUTINE FOR ALL SECTIONS_1*_^1*_]_'*_^1************************************************************************_^1************************************************************************_^1*_#RELAYS ARE SET UP IN FXIMAG THEN ONE CHANL AT A TIME THE DESIRED_^1*_"PATTERN IS OUTPUT€€TED THEN ALL THE CHANNELS ARE READ IN. SO FOR_^1*_"EXP. CHANLS 1 THROUGH 3 ARE SET TO ZERO BY FXIMAG THEN WHEN THIS_^1*_!ROUTINE (DIGIO) IS ENTERD AGAIN BY SAMPAT OR CRCBIT ONE CHANL IS SET_^1*_"TO A DESIRED PATTERN . SO NOW ONE CHANL IS SET TO THE DESIRED_^1*_"PATTERN AND ALL THE OTHERS ARE STILL SET TO ZERO OR WHATEVER FIXMAG_^1*_"SET THEM TOO. THE CHANL_^1*_"THAT WAS SET TO THE€€ SPECIAL PATTERN IS RESET THEN THE TEST_^1*_"GOES TO THE NEXT CHANL AND SO ON UNTILL ALL THE CHANLS ARE DONE._^1_%SPC 2_^1DIGIO 0_"0_^1_%STQ* CURCHN_'Q-REG. HAS BEG. CHANNEL._^1_%SAP DIO1A-*-1_^1_%LDA* NUMCHN_^1DIO1A STA* ENDCHN_'A-REG. HAS LAST CHANNEL._^1DIO1_!LDQ* CURCHN_'GET CHANNEL INDEX._^1_%LDA* PATOUT,Q_$GET IMAGE FOR OUTPUT._^1_%STA* IMAGE_^1_%LDA* OUTCHN,Q_^1_%AND- LP€€MSK+15_^1_%STA* OUTCHN,Q_$CLEAR ERROR FLAG_^1_%STA* DATABL_^1_%LDA* LU1553_'LU OF DIGITAL OUT._^1_%SAN RIOMO_(SKIP IF LU NOT 0 (REMOTE)._^1_%LDQ* DATABL_'LOCAL._^1_%LDA* IMAGE_^1_%RTJ DOSB_)DIGITAL OUT SUBR._^1_%JMP* COMPL_^1RIOMO RTJ- (AMONI)_%OUTPUT._^1REF1_!ADC 2*FRC+FX+3*FRP+3*FCP_^1_%ADC COMPL-REF1_"TO SPECIFIED REGISTER._^1_%ADC 0_^1LU1553 NUM 0_^1_%NUM 1_^1_%ADC DAT€€ABL-REF1_^1_%JMP- (ADISP)_^1DATABL NUM 0_^1IMAGE NUM 0_,REGISTER BIT IMAGE._^1COMPL RTJ ERRCK1_'CK FOR ERROR ON OUTPUT._^1_%LDA* CURCHN_'CK FOR LAST CHANNEL._^1_%SUB* ENDCHN_^1_%SAN DIO2-*-1_^1_%STA* CURCHN_'ZERO CURCHN ON COMPLETION_^1_%JMP* DIO4_+OUTPUT._^1DIO2_!LDA* CURCHN_'CK FO LAST CHANNEL_^1_%SUB* NUMCHN_)ADDR._^1_%SAN DIO3-*-1_^1_%STA* CURCHN_'ZERO CURCHN AND CONTINU€€E_^1_%JMP* DIO1_+OUTPUT._^1DIO3_!RAO* CURCHN_'INCREMENT CHANNEL_^1_%JMP* DIO1_+COUNTER AND CONTINUE._^1DIO4_!LDQ* CURCHN_^1_%LDA* INCHN,Q_%GET CHANNEL ADDRESS._^1_%AND- LPMSK+15_^1_%STA* INCHN,Q_^1_%STA* TABL2_^1TIMCAL TIMER COMTIM-TIMCAL-1,4,R,2,0_^1_%JMP- (ADISP)_^1COMTIM LDA* LU1544_^1_%SAN RIOMI_(SKIP IF LU NOT 0._^1_%LDQ* TABL2_^1_%RTJ DISB_)DIGITAL IN SUBR._^1_%JMP* COMP3_^€€1RIOMI RTJ- (AMONI)_%INPUT._^1REF2_!ADC 1*FRC+FX+3*FRP+3*FCP_^1_%ADC COMP2-REF2_^1_%ADC 0_^1LU1544 NUM 0_^1_%NUM 1_^1_%ADC TABL2-REF2_^1_%JMP- (ADISP)_^1TABL2 NUM 0_,WES OR INDEX._^1DATAIN NUM 0_,DIGITAL VALUE RETURNED._^1COMP2 LDA* DATAIN_^1COMP3 STQ* SAVEQ_(SAVE ERROR IF ANY._^1_%LDQ* CURCHN_^1_%STA* PATIN,Q_%STORE DIGITAL INPUT._^1_%LDQ* SAVEQ_^1_%RTJ ERRCK2_'CK FOR€€ ERROR ON INPUT._^1_%LDA* CURCHN_'CK FOR LAST CHANNEL._^1_%SUB* NUMCHN_^1_%SAZ DIO5-*-1_^1_%RAO* CURCHN_'INCREMENT COUNTER._^1_%JMP* DIO4_^1DIO5_!JMP* (DIGIO)_'RETURN._^1SAVEQ NUM 0_^1*_]_^1_%BZS PATOUT(16)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_,COMMOM ROUTINE FOR NON-SHIFTING PATTERN I/O_-*_^1*_]_'*_^1***************€€*********************************************************_^1_%SPC 2_^1SAMPAT 0_"0_^1SAM1_!LDQ* SAMCHN_'SET CHANNEL IMAGE._^1_%LDA PATT1_^1_%STA* PATOUT,Q_^1_%TRQ A_,OUTPUT CURRENT_^1_%RTJ* DIGIO_*CHANNEL._^1_%RTJ* CHKREG_^1_%LDQ* SAMCHN_'GET CURRENT CHNL IMAGE._^1_%LDA PATT2_^1_%STA* PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* SAMCHN_'CK FOR LAST CHANNEL._^1_%SUB* NUMCHN_^1_%SA€€Z SAM2-*-1_^1_%RAO* SAMCHN_^1_%JMP* SAM1_^1SAM2_!STA* SAMCHN_^1_%JMP* (SAMPAT)_^1SAMCHN NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7CHECK DATA FOR ERRORS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CHKREG 0_"0_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_$NO DATA CK IF CHL RE€€JECT_^1_%SAM CHK1-*-1_^1_%LDA INCHN,Q_%NO DATA CK IF CHL REJECT_^1_%SAM CHK1_^1_%LDA* PATIN,Q_%GET IMAGE IN_^1_%STQ* QHOLD+1_%SAVE Q_^1_%LDQ SWITCH_'OPEN OR CLOSED CONTACTS_^1_%SQZ QHOLD_(OPEN_^1_%TCA A_,CLOSED_^1QHOLD LDQ =N0_^1_%STA* PATIN,Q_%SAVE COMPLEMENTED OR NORMAL FOR ERROR MSG_^1_%EOR* PATOUT,Q_$COMPARE WITH IMAGE OUT_^1_%SAZ CHK1-*-1_^1_%RTJ* CMPERR_^1CHK1_!LDA* €€CHNCTR_'CK FOR LAST CHANNEL._^1_%SUB NUMCHN_^1_%SAZ CHK2-*-1_^1_%RAO* CHNCTR_'INCREMENT COUNTER_^1_%JMP* CHKREG+1_^1CHK2_!STA* CHNCTR_'ZERO COUNTER._^1_%JMP* (CHKREG)_$RETURN._^1CHNCTR NUM 0_^1*_]_^1_%BZS PATIN(16)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5OUTPUT DATA ERROR MESSAGE_6*_^1*_]_'*_^1**************************€€**********************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%LDA* PATOUT,Q_$GET AND CONVERT_^1_%RTJ (RHXASC)_^1_%ADC (OLDPAT-*)_^1_%LDQ* CHNCTR_'GET AND CONVERT_^1_%LDA* PATIN,Q_(INPUT VALUE._^1_%RTJ (RHXASC)_^1_%ADC (NEWPAT-*)_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_^1_%LDQ LU1553_'IS IT LOCAL_^1_%SQN 1_^1_%INA -1_+SUB 1 BECAUSE ADDED 1 TO MAKE LOCAL SUBT CALL_^1_%€€RTJ (RHXASC)_^1_%ADC (CHAN1-*)_^1_%LDQ* CHNCTR_^1_%LDA INCHN,Q_^1_%LDQ LU1553_'IS IT LOCAL_^1_%SQN 1_^1_%INA -1_+SUB 1 BECAUSE ADDED 1 TO MAKE LOCAL SUBT CALL_^1_%RTJ (RHXASC)_^1_%ADC (CHAN2-*)_^1_%RTJ* INIMSG_^1_%JMP* (CMPERR)_^1_%RTJ (MESAGE)_$OUTPUT COMPARE ERROR MSG_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG11B-MES5_^1_%ADC MSG11E-MSG11B_^1_%ADC €€ MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1CMP1_!JMP* (CMPERR)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3CHECK FOR 1553 HARDWARE ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCK1 0_"0_^1_%LDA LU1553_^1_%SAN RIOM1_(SKIP IF REMOTE._^1_%JMP* LOCL1_^1RIOM1 LDQ PHYLO2_'PH€€YSTAB ADDRESS_^1_%LDA- ESTAT2,Q_$HARDWARE STATUS._^1_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB =N$0600_^1_%SAN FLG1_)SKIP IF ERROR._^1_%JMP* ERR11_^1LOCL1 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR11_^1_%STQ* ERRBIT_^1FLG1_!LDQ CURCHN_^1_%LDA OUTCHN,Q_^1_%EOR- NZERO+15_$SET BIT 15 FOR ERROR FLAG_^1_%STA OUTCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR11_^1_%LDA DATABL€€_^1_%LDQ LU1553_^1_%SQN 1_^1_%INA -1_^1_%RTJ* CHLMSG_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES6_!NUM $0444_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG4B-MES6_^1_%ADC MSG4E-MSG4B_^1_%ADC MSG8B-MES6_^1_%ADC MSG8E-MSG8B_^1ERR11 RTJ* ENDCK_^1_%JMP* (ERRCK1)_^1_%EJT_]_^1******************************************************************€€******_^1*_]_'*_^1*_3CHECK FOR 1544 HARDWARE ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCK2 0_"0_^1_%LDA LU1544_^1_%SAN RIOM2_(SKIP IF REMOTE._^1_%JMP* LOCL2_^1RIOM2 LDQ PHYLOC_'PHYS TAB ADDRESS._^1_%LDA- ESTAT2,Q_$HARDWARE STATUS._^1_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB =N$0600_^1€€_%SAN FLG2_)SKIP IF ERROR._^1_%JMP* ERR22_^1LOCL2 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR22_^1_%STQ* ERRBIT_^1FLG2_!LDQ CURCHN_^1_%LDA INCHN,Q_^1_%EOR- NZERO+15_$SET ERROR BIT_^1_%STA INCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR22_^1_%LDA TABL2_^1_%LDQ LU1544_^1_%SQN 1_^1_%INA -1_^1_%RTJ* CHLMSG_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES7_!NUM $0444_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%€€ADC MSG11B-MES7_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG6B-MES7_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG8B-MES7_^1_%ADC MSG8E-MSG8B_^1ERR22 RTJ* ENDCK_^1_%JMP* (ERRCK2)_^1*_]_^1*_]_^1ENDCK 0_"0_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN 1_^1_%JMP* (ENDCK)_^1_%JMP* ENDMSG_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_1OUTPUT €€CHANNEL PLUS HARDWARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_]_^1CHLMSG 0_"0_^1_%RTJ (RHXASC)_^1_%ADC (REJCHL-*)_^1_%LDA* ERRBIT_^1_%RTJ (RHXASC)_$INSTALL STATUS IN MESSAGE._^1_%ADC (STATUS-*)_^1_%JMP* (CHLMSG)_^1ERRBIT NUM 0_^1_%SPC 2_^1***********************************************************************€€*_^1*_]_'*_^1*_1OUTPUT CURRENT TEST AND PASS NUMBER_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INIMSG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN INIMS1-*-1_^1_%RAO* INIMSG_^1_%LDA PASSES_^1_%INA 1_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1INIMS1 JMP*€€ (INIMSG)_^1ERRCTR NUM 0_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG SET._^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA RUNS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%€€SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_'OUTPUT END MESSAGE_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA* ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES8_!NUM $8144_^1_%ADC MSG3B-MES8_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_)CK FOR STOP TO RE-ENT€€ER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$CLEAR TEST NAME FROM PGM STACK, RELEASE CORE_^1_%ADC (START-*)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_;MESSAGE BUFFERS_:*_^1*_]_'*_^1************€€************************************************************_^1_%SPC 2_^1MSG1B ALF 10,BEGIN 1553/1544 TEST_^1_%NUM $D00_^1_%ALF $,OUT LU,IN LU,TESTS,RUNS,SWITCH$_^1_%EQU MSG1E(*)_^1MSG2B ALF $,OUT CHANL MOD-STAT, IN CHANL MOD-STAT$_^1_%NUM $D00_^1_%EQU MSG2E(*)_^1MSG3B ALF 10,END 1553/1544 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS._€€^1_%EQU MSG3E(*)_^1MSG4B ALF 3, 1553_^1_%EQU MSG4E(*)_^1MSG5B ALF 5, OUT CHNL_^1CHAN1 NUM 0,0_^1_%ALF 2, IS_^1OLDPAT NUM 0,0_^1_%ALF 5, IN CHNL_^1CHAN2 NUM 0,0_^1_%ALF 2, IS_^1NEWPAT NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 3, 1544_^1_%EQU MSG6E(*)_^1MSG7B ALF 13,SPECIAL PATTERN FOR TEST 3_^1_%EQU MSG7E(*)_^1MSG8B ALF 2,CHL_^1REJCHL NUM 0,0_^1_%ALF 7, STATUS E€ΞRROR_^1STATUS NUM 0,0_^1_%EQU MSG8E(*)_^1MSG10B ALF 5, LU ERROR_^1_%EQU MSG10E(*)_^1MSG11B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG11E(*)_^1_%EQU END(*)_^1_%END_]_^__ ΞPSCMMTT CSY/ B68 P€1_%NAM SCMMTT_'DECK-ID B68 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1732/608-609 MAG TAPE TEST_^1*_$1731/601 MAG TAPE TEST_^1*_$1732-2/615-73/93 MAG TAPE TEST_^1*_$1732-3/616-72/616-92/616-95_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^€€1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8PROGRAM DESCRIPTION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1*_$SCMMTT IS A DIAGNOSTIC EXERCISER FOR THE 1732/608-609 MAGNETIC_^1*_$TAPE CONTROLLER AND UNITS. IT OPERATES UNDER THE CONT€€ROL OF THE_^1*_$DIAGNOSTIC SUPERVISOR SCMEXC AND USES THE MSOS DRIVERS FOR_^1*_$ALL COMMUNICATION WITH THE MAGNETIC TAPES. BEFORE TEST EXECUTION_^1*_$IS STARTED, THE USER IS REQUESTED TO INPUT THE TEST PARAMETERS_^1*_$-- LOGICAL UNIT, TEST SECTION TO BE EXECUTED AND THE NUMBER OF_^1*_$TIMES TO EXECUTE THE TEST SECTION --. THE LOGICAL UNIT IS CHECKED_^1*_$FOR VALIDITY AND IF INVALID€€, THE USER IS REQUESTED TO RE-ENTER_^1*_$THE TEST PARAMETERS. THE TEST IS DIVIDED INTO FOUR SECTIONS_^1*_$(TEST) AS FOLLOWS:_^1*_*SECTION 1_#WORST CASE PATTERN_^1*_*SECTION 2_#USER INPUT PATTERN_^1*_*SECTION 3_#ADVANCE AND BACKSPACE RECORDS_^1*_*SECTION 4_#ADVANCE AND BACKSPACE FILES_^1*_$AT THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$DRIVER DETECTED ERRORS. IF AN €€ERROR WAS DETECTED (I.E. -Q_^1*_$NEGATIVE AT I/O COMPLETION ) THE TEST USES DRIVER STATUS (Q REG_^1*_$ON RETURN FROM IO REQUEST) AND HARDWARE STATUS (WORD 12 OF THE_^1*_$PHYSICAL DEVICE TABLE) TO DETERMINE THE ERROR TYPE. AT THE END_^1*_$OF EACH TEST SEQUENCE A PASS COUNTER IS UPDATED AND COMPARED_^1*_$AGAINST THE NUMBER OF TIMES REQUESTED BY TH+ USER. IF EQUAL,_^1*_$THE TEST IS TE€€RMINATED. THE STOP FLAG IS ALSO CHECKED AND IF_^1*_$SET, THE TEST IS TERMINATED. IF $8000 IS ENTERED FOR THE NUMBER_^1*_$OF EXECUTIONS, THE TEST SEQUENCE WILL BE EXECUTED INDEFINITELY_^1_%SPC 2_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1**********************************************************€€**************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ONEBIT($23)_!START OF ONE €€BIT TABLE_^1_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATOR_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1*_]_^1_%EQU TSTMTT(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTMTT_^1_%EQU UNTSEL(16)_"LOCATION IN PHYTAB F€€OR UNIT SELECT CODE_^1_%EQU ERCODE(18)_"LOCATION IN PHYTAB FOR ALT DEV ERROR_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATION REGION_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTMTT_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NU€€M $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATIONS WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:INPUT PARAMETERS_:*_^1*_]_'*_^1**€€**********************************************************************_^1_%SPC 2_^1ENTER RTJ* (MESAGE)_$OUTPUT INITIAL MESSAGE_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENA 0_^1_%STA NUMUNT_^1INI11 ENQ 0_^1_%RTJ* (INFOIN)_$GET TESTS/NO. OF RECORDS/RUNS/_^1_%SQP INI12-*-1_^1_%JMP* INI11_^1INI12 RTJ* (GETFLD)_^1_%SQP FLDOK1_^1_%JMP ENDMSG_'RUBOUT ENTER€€ED--ABANDON TEST_^1FLDOK1 INQ -1_^1_%STA TESTS,Q_^1_%INQ -2_^1_%SQZ INI21-*-1_^1_%JMP* INI12_^1INI21 LDA RECRDS_'CONVERT_^1_%SAM INI21A_4(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%NUMBER OF_^1INI21A STA RECRDS_^1_%LDA RUNS_,AND_^1_%RTJ* (RDECHX)_)RUNS_^1_%STA RUNS_.TO HEX_^1_%RTJ* (MESAGE)_$REQUEST LU AND DENSITY_^1MES2_!NUM $8144_^1_%ADC MSG2B-MES2_^1_%ADC MSG€€2E-MSG2B_^1INI22 ENA 0_^1_%STA INPERR_^1*_]_^1*_$SET BUFFER TO MINUS ONES -1= OTHER, 0= 615, 1=616_^1*_]_^1_%ENQ 7_^1_%ENA -1_^1INI222 STA T616,Q_^1_%INQ -1_^1_%SQM 1_,DONE_^1_%JMP* INI222_'NO,LOOP_^1INI22A ENQ 0_^1_%RTJ* (INFOIN)_$GET LU/DENSITY/_^1INI23 RTJ* (GETFLD)_^1_%SQP FLDOK2_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK2 INQ -2_+CHECK FOR SECOND FIELD_^1€€_%SQN INI24-*-1_^1_%JMP* INI26_(SECOND FIELD_^1INI24 SAP INI24A-*-1_^1_%JMP* INI27_(ALL UNITS SPECIFIED_^1INI24A RTJ* (RDECHX)_$FIRST FIELD - CONVERT L.U. TO HEXADECIMAL_^1_%LDQ NUMUNT_^1_%STA LU,Q_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_^1_%LDA- EREQST,Q_$CK IF LOGICAL UNIT LEGAL_^1_%AND =N$3FF0_^1_%LDQ NUMUNT_^1_%SUB =N$890_'CHECK FOR 1731-601 ($890)_^1_%SAN IN24AA_^1_%JMP* INI23_^€€1IN24AA SUB =N$B0_(CHECK FOR 615-73_"($940)_^1_%SAN INI24B-*-1_^1_%RAO T616,Q_'SET 615 TYPE FLAG_^1_%JMP* INI26E_'YES - DENSITY IS FIXED_^1INI24B INA -$10_)CHECK FOR 615-93_"($950)_^1_%SAN INI241_^1_%RAO T616,Q_'SET 615 TYPE FLAG_^1_%JMP* INI23_^1INI241 INA -$10_)CHECK FOR 1706/608 ($960)_^1_%SAN INI242_^1_%JMP* INI23_^1INI242 INA -$20_)CHECK FOR 608_%($980)_^1_%SAN INI2€€43_^1_%JMP* INI23_^1INI243 INA -$10_)CHECK FOR 609_%($990)_^1_%LDQ NUMUNT_^1_%SAN INI244_^1_%JMP* INI26E_'DENSITY IS FIXED_^1INI244 INA -$50_)CHECK FOR 1706/609 ($9E0)_^1_%SAN INI245_^1_%JMP* INI26E_'DENSITY IS FIXED_^1INI245 SUB =N$A0_(CHECK FOR 1706/601_^1_%SAN INI24C_^1_%JMP* INI23_^1INI24C SUB =N$D0_(CHECK FOR 1732-3/72 ($0B50)_^1_%SAN IN24CC_^1_%ENA 1_^1_%STA T616€€,Q_(SET TYPE FLAG_^1_%JMP* INI23_^1IN24CC INA -$10_)CHECK FOR 1732-3/92_"($0B60)_^1_%SAN IN24DD_^1_%ENA 1_^1_%STA T616,Q_'SET TYPE_^1_%JMP* INI23_^1*_]_^1IN24DD RAO* INPERR_^1_%LDA* INPERR_'IS IT THE THIRD ERROR_^1_%INA -3_^1_%SAN INI24D-*-1_^1_%ENA 5_,YES, ELIMINATE REENTER MESSAGE_^1_%STA* MSG3SZ_^1INI24D RTJ (MESAGE)_$LOGICAL UNIT ERROR_^1MES3_!NUM $8244_^1_%ADC (START€€-MES3)_^1_%NUM 3_^1_%ADC MSG3B-MES3_^1MSG3SZ ADC MSG3E-MSG3B_^1_%LDA* INPERR_'IS IT THE THIRD ERROR_^1_%INA -3_^1_%SAZ INI25-*-1_^1_%JMP* INI22A_^1INI25 JMP ENDMSG_'YES, TERMINATE TEST_^1INI26 LDQ NUMUNT_'TO HERE IF SECOND FIELD_^1_%ALS 3_,SET UP DENSITIES_^1_%SAP INI261_'1600 BPI_^1_%ENA 4_,YES_^1_%JMP* INI26E_^1INI261 ALS 1_^1_%SAP INI26A_(800 BPI_^1_%ENA 1_.YES_^1€€_%JMP* INI26E_^1INI26A ALS 1_^1_%SAP INI26C_(556 BPI_^1INI26B ENA 2_.YES_^1_%JMP* INI26E_^1INI26C ALS 1_^1_%SAM INI26D_(200 BPI_^1_%JMP* INI26B_)NO - FORCE 556 BPI_^1INI26D ENA 3_/YES_^1INI26E STA DENSTY,Q_$STORE MSOS DENSITY VALUE_^1_%RAO NUMUNT_^1_%INQ -7_+CK FOR 8 UNITS_^1_%SQZ INI27-*-1_^1_%JMP INI22A_^1INI27 LDA NUMUNT_'CK FOR ZERO UNITS SPECIFIED_^1_%INA -1_^1_%€€STA NUMUNT_^1_%SAP INI28-*-1_^1_%JMP INI22_^1INI28 LDA TESTS_(CK IF TEST 2 REQUESTED_^1_%AND- ONEBIT+2_^1_%SAZ INI29-*-1_^1_%RTJ (MESAGE)_$GET SPECIAL PATTERN FOR SECTION 2_^1MES4_!NUM $8144_^1_%ADC MSG4B-MES4_^1_%ADC MSG4E-MSG4B_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1_%RTJ (GETFLD)_^1_%SQP FLDOK3_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK3 STA* SPCPAT_^1INI29 CLR A_^1€€_%STA REPEAT_^1_%ENQ +7_^1INI2A STA ERRCTR,Q_$ZERO ERROR COUNTER BLOCK_^1_%SQZ INI2B-*-1_^1_%INQ -1_^1_%JMP* INI2A_^1INI2B LDA =N$3000_^1_%RTJ MOTION_^1_%CLR A_^1_%RTJ MOTION_'SELECT DENSITY ON ALL UNITS_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!WORST CASE PATTERN TEST_1*_^1*_]_'*_^1********************€€****************************************************_^1_%SPC 2_^1BEGIN LDA =N$3000_%REWIND ALL UNITS_^1_%RTJ MOTION_^1_%LDA TESTS_^1_%AND- ONEBIT+1_$IS TEST ONE REQUESTED_^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 LDA =A1_*BEGIN TEST 1_^1_%STA SNUM_^1_%CLR A_^1_%STA* COUNT1_^1WP1_"LDQ* COUNT1_^1_%LDA* WSPAT1,Q_$GET CURRENT WORST PATTERN_^1_%RTJ XFERCD_'EXECUTE XFERS AND CHE€€CKS_^1_%LDA* COUNT1_^1_%INA -3_+CK FOR LAST WORST PATTERN_^1_%SAZ T2CK-*-1_^1_%RAO* COUNT1_^1_%JMP* WP1_^1INPERR NUM 0_^1SPCPAT NUM 0_^1COUNT1 NUM 0_^1WSPAT1 NUM $6969_^1_%NUM $9696_^1WSPAT3 NUM $5A5A_^1_%NUM $A5A5_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0SECTION 2_!USER INPUT PATTERN TEST_1*_^1*_]_'*_^1***********€€*************************************************************_^1_%SPC 2_^1T2CK_!LDA* TESTS_^1_%AND- ONEBIT+2_$IS TEST TWO REQUESTED_^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =A2_*BEGIN TEST 2_^1_%STA SNUM_^1_%LDA* SPCPAT_'GET USER SPECIFIED PATTERN_^1_%RTJ XFERCD_'EXECUTE XFERS AND CHECKS_^1_%SPC 2_^1************************************************************************_€€^1*_]_'*_^1*_+SECTION 3_!ADVANCE AND BACKSPACE RECORDS TEST_+*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* TESTS_^1_%AND- ONEBIT+3_$IS TEST THREE REQUESTED_^1_%SAN TEST3-*-1_^1_%JMP* T4CK_^1TEST3 LDA =A3_*BEGIN TEST 3_^1_%STA SNUM_^1_%CLR A_^1_%STA* PHASE2_^1TST3_!STA* TIMES_^1_%LDA* WSPAT1_^1_%LDQ =N96_^1_%STQ €€NWORDS_^1_%STQ REF4_^1TST3A INQ -1_^1_%STA BLK1K,Q_%SET UP BLOCK_^1_%SQZ TST3B-*-1_^1_%JMP* TST3A_^1TST3B LDA WRITE_^1_%STA REF1_)SET WRITE IN MONITOR CALL_^1TST3C RTJ BLKXFR_^1_%RAO* TIMES_^1_%LDA* TIMES_^1_%SUB =N499_^1_%SAZ TST3D-*-1_^1_%JMP* TST3C_^1TST3D LDA* WSPAT3_'WRITE THE SPECIAL BLOCK_^1_%STA PATTRN_^1_%LDQ NWORDS_^1TST3E INQ -1_^1_%STA BLK1K,Q_^1_%SQZ €€ TST3F-*-1_^1_%JMP* TST3E_^1TST3F RTJ BLKXFR_^1_%LDA* PHASE2_^1_%SAN TST3G_^1_%CLR A_^1_%RAO* PHASE2_^1_%JMP* TST3_^1TST3G LDA =N$9001_%BACKSPACE 999 RECORDS_^1_%STA* INSTR_^1_%LDA =N999_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA =N$F001_%ADVANCE 700 RECORDS_^1_%STA* INSTR_^1_%LDA =N700_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA =N$9001_%BACKSPACE 300 RECORDS_^1_%STA* INSTR_^1_%LDA =N30€€0_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA =N$F001_%ADVANCE 98 RECORDS_^1_%STA* INSTR_^1_%LDA =N98_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA READ_^1_%STA REF1_)SET READ IN MONITOR CALL_^1_%RTJ BLKXFR_^1_%JMP* T4CK_^1TIMES NUM 0_^1PHASE2 NUM 0_^1*_]_^1*_$TEST CONTROL WORDS_^1*_]_^1TESTS NUM 0_^1RECRDS NUM 0_^1RUNS_!NUM 0_^1_%SPC 2_^1COUNTD 0_"0_^1_%TCA A_^1_%STA* CNTDN_(SAVE COUNT_€€^1CTLOOP LDA* INSTR_(PICK UP INSTRUCTION_^1_%RAO* CNTDN_(BUMP COUNT_^1_%RTJ MOTION_^1_%LDA FLAG_)TEST FOR STOP MESSAGE_^1_%AND- ONEBIT_^1_%SAN STOPIT_^1_%LDA* CNTDN_^1_%SAZ CTLP_)CHECK FOR COMPLETION_^1_%JMP* CTLOOP_'CONTINUE_^1CTLP_!JMP* (COUNTD)_$RETURN_^1STOPIT JMP ENDMSG_^1INSTR NUM 0_^1CNTDN NUM 0_^1_%SPC 3_^1**********************************************************€€**************_^1*_]_'*_^1*_,SECTION 4_!ADVANCE AND BACKSPACE FILES TEST_,*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA* TESTS_^1_%AND- ONEBIT+4_$IS TEST FOUR REQUESTED_^1_%SAN TEST4-*-1_^1_%JMP ENDTST_^1TEST4 LDA =A4_*BEGIN TEST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA* PHASE2_^1TST4_!STA* TIMES_^1_%LDA WSPAT1_^1_%LDQ €€=N96_^1_%STQ* NWORDS_^1_%STQ REF4_^1TST4A INQ -1_^1_%STA BLK1K,Q_%SET UP BLOCK_^1_%SQZ TST4B-*-1_^1_%JMP* TST4A_^1TST4B LDA WRITE_(SET WRITE IN MONITOR CALL_^1_%STA REF1_^1TST4C RTJ* BLKXFR_^1_%LDA =N$2000_%WRITE FILE MARK_^1_%RTJ MOTION_^1_%RAO* TIMES_^1_%LDA* TIMES_^1_%SUB =N499_^1_%SAZ TST4D1_^1_%JMP* TST4C_^1*_83 CARDS DELETED_^1TST4D1 LDA WSPAT3_'WRITE SPECIAL BL€€OCK_^1_%STA* PATTRN_^1_%LDQ* NWORDS_^1TST4E INQ -1_^1_%STA BLK1K,Q_^1_%SQZ TST4F-*-1_^1_%JMP* TST4E_^1TST4F RTJ* BLKXFR_^1_%LDA =N$2000_%WRITE FILE MARK_^1_%RTJ MOTION_^1_%LDA* PHASE2_^1_%SAN TST4G_^1_%CLR A_^1_%RAO* PHASE2_^1_%JMP* TST4_^1TST4G LDA =N$E001_%BACKSPACE 999 FILES_^1_%STA* INSTR_^1_%LDA =N999_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA =N$D001_%ADVANCE 700 FILES_^€€1_%STA* INSTR_^1_%LDA =N700_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA =N$E001_%BACKSPACE 300 FILES_^1_%STA* INSTR_^1_%LDA =N300_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA =N$D001_%ADVANCE 98 FILES_^1_%STA* INSTR_^1_%LDA =N98_^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA* READ_^1_%STA* REF1_)SET READ IN MONITOR CALL_^1_%RTJ* BLKXFR_'CK FOR SPECIAL BLOCK_^1_%JMP ENDTST_^1_%SPC 2_^1*********************€€***************************************************_^1*_]_'*_^1*_2LOAD, XFER AND CHECK 1024 WORDS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1XFERCD 0_"0_^1_%STA* PATTRN_^1_%LDQ =N192_^1_%STQ* NWORDS_^1_%STQ* REF4_^1_%LDA* PATTRN_^1XR2_"INQ -1_^1_%STA BLK1K,Q_%LOAD BUFFER_^1_%SQZ XR3-*-1_^1_%JMP* XR2_^1XR3_"LDA* WRITE_^1_%€€STA* REF1_)SET WRITE IN MONITOR CALL_^1_%CLR A_^1_%STA* PHASE_^1XR4_"STA* COUNTR_^1XR5_"RTJ* BLKXFR_^1_%RAO* COUNTR_^1_%LDA* COUNTR_'CK FOR NO. OF RECORDS SPECIFIED_^1_%SUB RECRDS_^1_%SAZ XR6-*-1_^1_%CLR A_^1_%JMP* XR5_*DO ANOTHER XFER ON EACH UNIT_^1XR6_"LDA =N$3000_%REWIND ALL UNITS_^1_%RTJ MOTION_^1_%LDA* PHASE_(CK IF TAPES HAVE BEEN READ_^1_%SAN XR7-*-1_^1_%RAO* PHASE_^1€€_%LDA* READ_^1_%STA* REF1_)SET READ IN MONITOR CALL_^1_%CLR A_^1_%JMP* XR4_^1XR7_"JMP* (XFERCD)_^1*_]_^1LU_#BZS LU(8)_^1DENSTY BZS DENSTY(8)_^1PATTRN NUM 0_^1NWORDS NUM 0_^1PHASE NUM 0_^1COUNTR NUM 0_^1POINTR NUM 0_^1NUMUNT NUM 0_^1T616_!BZS T616(8)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/TRANSFER BLOCKS BETWEEN€€ TAPE AND CORE_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLKXFR 0_"0_^1_%CLR A_^1_%STA* POINTR_^1BLK1_!LDQ* POINTR_^1_%LDA* LU,Q_)PICK UP LOGICAL UNIT NUMBER_^1_%STA* TAPLU1_^1_%LDA* DENSTY,Q_^1_%SAP BLK1A-*-1_#CK IF UNIT MARKED DOWN_^1_%JMP* BLK7_^1BLK1A LDA* REF1_)CK IF DOING A READ_^1_%SUB* WRITE_^1_%SAZ BLK1B-*-1_^1_€€%CLR A_^1_%LDQ* NWORDS_^1CLEAR INQ -1_^1_%STA BLK1K,Q_%YES, CLEAR BUFFER_^1_%SQZ BLK1B-*-1_^1_%JMP* CLEAR_^1BLK1B LDA FLAG_^1_%AND- ONEBIT_'CK FOR STOP FLAG_^1_%SAZ BLK1C-*-1_^1_%JMP ENDMSG_^1BLK1C RTJ- (AMONI)_%CONSTRUCT MONITOR CALL_^1REF1_!ADC 2*FRC+FX+4*FRP+4*FCP_%WRITE REQUEST CODE_^1_%ADC CMPL1-REF1_^1_%ADC 0_^1TAPLU1 NUM 0_^1REF4_!NUM 0_^1_%ADC BLK1K-REF1_^1_€€%JMP- (ADISP)_^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP_%WRITE REQUEST CODE_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_%READ REQUEST CODE_^1CMPL1 RTJ ESTAT_^1_%LDA HSTAT_^1_%AND =N$8241_%CK FOR NON RECOVERABLE ERRORS_^1_%SAZ BLK5-*-1_^1_%JMP* MRKDWN_^1BLK5_!LDA HSTAT_^1_%AND =N$0800_%CHK FOR AN UNEXPECTED END-OF-FILE_^1_%SAZ BLK5B_^1_%LDQ POINTR_^1_%RAO ERRCTR,Q_$INCREMENT PROPER ERROR C€€OUNTER_^1_%LDA FLAG_)CK FOR NO PRINT FLAG_^1_%AND- ONEBIT+7_^1_%SAN BLK5B_^1_%RTJ (MESAGE)_$WRITE UNEXPECTED EOF_^1BLK5A NUM $0244_^1_%ADC (START-BLK5A)_^1_%NUM 3_^1_%ADC MSG28B-BLK5A_^1_%ADC MSG28E-MSG28B_^1*_]_^1*_]_^1BLK5B LDA* REF1_)CHECK IF DOING A READ_^1_%SUB* READ_^1_%SAZ BLK6-*-1_$YES, GO TO COMPARE ROUTINE_^1_%JMP* BLK7_^1BLK6_!CLR A_^1_%STA* CELERR_^1_%LDA* P€€ATTRN_^1_%LDQ* NWORDS_^1_%RTJ* COMPAR_'COMPARE DATA_^1BLK7_!LDA* POINTR_'CK IF ALL UNITS COMPLETED_^1_%SUB* NUMUNT_^1_%SAZ BLK8-*-1_^1_%RAO* POINTR_^1_%JMP* BLK1_^1BLK8_!STQ* QSAV_)SAVE Q_^1_%CLR Q_,CHECK IF ALL UNITS DOWN_^1BLK81 LDA DENSTY,Q_^1_%SAP BLK9_)UNIT UP--RETURN_^1_%TRQ A_^1_%SUB* NUMUNT_^1_%SAN BLK82_^1_%JMP ENDMSG_'ALL UNITS CHECKED-NONE UP_^1BLK82 INQ 1_^1_%€€JMP* BLK81_^1BLK9_!LDQ* QSAV_^1_%CLR A_^1_%JMP* (BLKXFR)_^1MRKDWN LDQ* POINTR_'UNIT HAD IRRECOVERABLE ERROR_^1_%LDA* DENSTY,Q_^1_%AND- LPMSK+15_^1_%EOR- ONEBIT+15_#MARK UNIT DOWN_^1_%STA* DENSTY,Q_^1_%JMP* BLK7_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1COMPARE PRE- AND POST XFER BLOCKS_2*_^1*_]_'*_^1************************€€************************************************_^1_%SPC 2_^1COMPAR 0_"0_^1_%STA* ORIG_^1_%INQ -1_^1_%STQ* XWORDS_^1_%CLR A_^1_%STA* TEMPX_^1CMP1_!LDQ* TEMPX_^1_%LDA BLK1K,Q_%GET POST XFER CELL CONTENTS_^1_%STA* BADCELL_^1_%EOR* ORIG_)COMPARE TO ORIGINAL CELL_^1_%SAZ CK1-*-1_^1_%RTJ* CMPERR_'GO TO CMPERR ON ERROR_^1CK1_"LDA* TEMPX_^1_%SUB* XWORDS_'CK FOR END OF BLK_^1_%SAZ CK€€2-*-1_^1_%RAO* TEMPX_^1_%JMP* CMP1_^1CK2_"LDA* CELERR_'IF ERRORS PRINT OUT TOTAL NUMBER_^1_%SAZ CMP2-*-1_^1_%RTJ* CMP3_^1CMP2_!JMP* (COMPAR)_^1TEMPX NUM 0_^1XWORDS NUM 0_^1ORIG_!NUM 0_^1QSAV_!NUM 0_^1*_]_^1CMP3_!0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CELERR_'COMPARE ERRORS THIS RECORD_^1_%RTJ (RHXASC)_^1_%ADC (TOTAL-*)_^1_%LDQ POINTR_^1_%RTJ FNDUNT_^1_%JMP* CMP3A_^1_%RTJ €€(MESAGE)_^1MES6_!NUM $0344_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG6B-MES6_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1CMP3A LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CMP4-*-1_^1_%JMP ENDMSG_^1CMP4_!JMP* (CMP3)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE E€€RROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%RAO* CELERR_^1_%LDA* CELERR_^1_%INA -4_^1_%SAM CMP5-*-1_^1_%JMP* CMP6_^1CMP5_!LDQ POINTR_^1_%RAO ERRCTR,Q_$INCREMENT PROPER ERROR COUNTER_^1_%RTJ INIMSG_^1_%JMP* CMP6_^1_%LDA* TEMPX_^1_%RTJ (RHXASC)_^1_%ADC (WRDCEL-*)_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%AD€€C (ORIGWD-*)_^1_%LDA* BADCEL_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ (MESAGE)_^1MES7_!NUM $0344_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%ADC MSG5B-MES7_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG8B-MES7_^1_%ADC MSG8E-MSG8B_^1CMP6_!JMP* (CMPERR)_^1BADCEL NUM 0_^1CELERR NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2STATUS MAS€€KS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BITTAB NUM 0_,TAPE UNIT NOT READY_^1_%NUM 6_,LOST DATA_^1_%NUM 8_,PARITY ERROR_^1_%NUM 15_+NO WRITE RING_^1_%NUM $8002_(PE WARNING(616)/CORRECTED DROPOUT(615)_^1_%NUM $8003_(PE LOST DATA(616)/WRONG POSTAMBLE(615)_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1*€€***********************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGTAB ADC MSG13B-MES8_$TAPE UNIT NOT READY_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES8_$LOST DATA_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES8_$PARITY ERROR_^1_%ADC MSG15E-M€€SG15B_^1_%ADC MSG16B-MES8_$NO WRITE RING_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG22B-MES8_!CORRECTED DROPOUT_^1_%ADC MSG22E-MSG22B_^1_%ADC MSG23B-MES8_!WRONG POSTAMBLE_^1_%ADC MSG23E-MSG23B_^1_%ADC MSG24B-MES8_"PE WARNING (616 ONLY)_^1_%ADC MSG24E-MSG24B_^1_%ADC MSG25B-MES8_!PE LOST DATA_"(616 ONLY)_^1_%ADC MSG25E-MSG25B_^1_%ADC MSG17B-MES8_$END OF TAPE_^1_%ADC MSG17E-MSG17B_^€€1_%ADC MSG18B-MES8_!SHORT TRANSFER_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG26B-MES8_"NO ID (615 AND 616)_^1_%ADC MSG26E-MSG26B_^1_%ADC MSG27B-MES8_#ILLEGAL DENSITY (615 AND 616)_^1_%ADC MSG27E-MSG27B_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2CHECK FOR HARDWARE STATUS ERRORS_2*_^1*_]_'*_^1*************************************€€***********************************_^1_%SPC 2_^1ESTAT 0_"0_^1_%STQ* DSTAT_(SAVE DRIVER STATUS_^1*_84 CARDS DELETED_^1ESTAT1 LDQ POINTR_^1_%LDQ LU,Q_^1_%LDQ+ LOG1A,Q_^1_%LDA- ESTAT2,Q_$GET HARDWARE STATUS FROM PHYSTAB_^1_%EOR =N$8001_%COMPLEMENT READY AND WRITE RING STATUSES_^1_%STA* HSTAT_^1_%AND- ONEBIT+9_$CK FOR END OF TAPE_^1_%SAZ EST3_^1_%ENQ 8_^1_%RTJ* ERRMSG_^1*_'8 - C€€ARDS DELETED_^1EST3_!CLR Q_^1_%STQ* BITPTR_^1_%LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQM 1_,CHECK FOR END OF TABLE_^1_%JMP* EST4_^1_%QLS 1_,IS IT A 8001 OR FFFF_^1_%SQP 1_^1_%JMP* EST3XC_'ITS A FFFF GO CHECK ALT DEVICE ERRORS_^1_%QRS 1_,616 OR 615 TYPE ERROR_^1_%STQ* TMERR_(SAVE_^1*_]_^1_%RTJ* TESTTP_'TEST TO SEE IF 615,616,OTHER_^1_%JMP* EST3XB_'615_^1_%JMP* EST3XA_'616_^1_%JMP* €€(ESTAT)_(OTHER_^1*_]_^1EST3XA RAO* F616_'616 TYPE MAF TAPE_^1EST3XB LDQ* TMERR_^1EST4_!LDA* HSTAT_^1_%AND- ONEBIT,Q_$CK FOR ERROR STATUS BIT SET_^1_%SAZ EST5-*-1_^1_%LDA* BITPTR_^1_%LDQ* F616_^1_%SQZ EST4A_(IS IT A 616 TYPE_^1_%INA 2_,YES_^1EST4A TRA Q_^1_%RTJ* ERRMSG_^1EST5_!RAO* BITPTR_^1_%ENA 0_1CLEAR FLAG_^1_%STA* F616_.CLEAR FLAG_^1_%JMP* EST3+2_^1DSTAT NUM 0_^1HSTAT €€NUM 0_^1BITPTR NUM 0_^1TMERR NUM 0_^1F616_!NUM 0_,616 TYPE MAG TAPE FLAG_^1*_]_^1*_]_^1*_$CHECK ALT DEVICE ERRORS_^1*_]_^1*_]_^1EST3XC RTJ* ADEVER_'GET ALT DEVICE ERROR CODE_^1_%STA* ALTSAV+1_*SAVE ALT DEVICE CODE_^1_%INA -37_*SHORT TRANSFER_^1_%SAN 2_^1_%ENQ 9_,SHORT TRANSFER_^1_%JMP* PRINTE_^1_%RTJ* TESTTP_'TEST TO SEE IF 615,616,OTHER_^1_%JMP* ALTSAV_'615_^1_%JMP* ALTSAV€€_'616_^1_%JMP* (ESTAT)_'SHOULD NOT GET HERE_^1ALTSAV LDA =N0_*LOAD ALT DEVICE CODE_^1_%INA -50_*NO ID_^1_%SAN EST3XE_^1_%ENQ 10_,NO ID_^1_%JMP* PRINTE_^1EST3XE INA -1_+ILLEGAL DENSITY_^1_%SAN EEXIT_^1_%ENQ 11_+ILL DENSITY_^1_%JMP* PRINTE_^1*_]_^1PRINTE RTJ* ERRMSG_'PRINT ERROR MSG_^1EEXIT JMP* (ESTAT)_^1*_]_^1*_]_^1*_]_^1* SUBROUTINE TO OBTAIN ALT DEV ERR CODE FOR DEVICE UN€€DER TEST_^1* RETURN ERROR CODE IN A_^1ADEVER NUM 0_^1_%LDQ POINTR_'GET INIT UNDER TEST_^1_%LDQ LU,Q_)GET DLU_^1_%LDQ+ LOG1A,Q_%GET POINTER TO PHYTAB_^1_%LDA- ERCODE,Q_$GET ALT DEV ERROR CODE_^1_%AND- LPMSK+6_^1_%JMP* (ADEVER)_^1*_]_^1* SUBROUTINE TO DETERMINE IF 615 TRANSPORT OR 616 TRANSPORT_^1* RETURN +1 IF 615, +2 IF 616, +3 IF NOT ANY_^1TESTTP NUM 0_^1_%LDQ POINTR_^1_%L€€DA T616,Q_'GET 615 FLAG_^1_%SAZ TTP1_)615 TYPE_^1_%SAM TTP3_-OTHER TYPE_^1_%SAN TTP2_*616_^1TTP3_!RAO* TESTTP_^1TTP2_!RAO* TESTTP_^1TTP1_!JMP* (TESTTP)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_.OUTPUT STATUS ERROR DIAGNOSTIC MESSAGE_0*_^1*_]_'*_^1************************************************************************_^1_€€%SPC 2_^1ERRMSG 0_"0_^1_%QLS 1_,MUI BY 2_^1_%LDA* MSGTAB,Q_$GET MESSAGE POINTER FROM TABLE_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF1_)DETERMINE DIRECTION OF TRANSFER_^1_%AND- ONEBIT+10_^1_%LDQ =XMSG12B-MES8_^1_%SAN ERRMS1-*-1_^1_%LDQ =XMSG11B-MES8_^1ERRMS1 STQ* DTNPTR_^1_%LDQ POINTR_^1_%RAO* ERRCTR,Q_$INCREMENT PROPER ERROR COUNTER_^1_%RTJ* INIMSG_^1€€_%JMP* ERRMS2_^1_%RTJ (MESAGE)_^1MES8_!NUM $0544_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG5B-MES8_^1_%ADC MSG5E-MSG5B_^1MSGPTR NUM 0_^1_%NUM 0_^1DTNPTR NUM 0_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG9B-MES8_^1_%ADC MSG9E-MSG9B_^1ERRMS2 JMP* (ERRMSG)_^1ERRCTR BZS ERRCTR(8)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3INITIA€€LIZE DIAGNOSTIC MESSAGES_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INIMSG 0_"0_^1_%LDQ POINTR_^1_%RTJ* FNDUNT_^1_%JMP* INIMS1_^1_%RAO* INIMSG_^1_%LDA REPEAT_^1_%INA 1_^1_%STQ QSAV_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA COUNTR_'GET CURRENT RECORD NUMBER_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (R€€CDCEL-*)_^1_%LDQ QSAV_^1INIMS1 JMP* (INIMSG)_^1_%SPC 2_^1FNDUNT 0_"0_^1_%LDA LU,Q_)Q REG HAS POINTER TO LU TABLE_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (UNTNUM-*)_^1_%LDA FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN FNDUN1-*-1_^1_%RAO* FNDUNT_^1FNDUN1 JMP* (FNDUNT)_^1_%SPC 5_^1CONVRT NUM 0_,CHECK IF VALUE .GT. 9999_^1_%TRA Q_^1_%SUB =N$270F_€€^1_%SAP GOWAY_(NO--RETURN_^1_%TRQ A_,YES--CONVERT_^1_%RTJ (ROCDEC)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%EJT_]_^1************************************************************************_^1*_$SUBROUTINE FOR REWINDS AND DENSITY SELECTIONS_^1*_)COMMON SUBROUTINE FOR TAPE MOTION CONTROL REQUESTS_)*_^1*_]_'*_^1***********************€€*************************************************_^1_%SPC 2_^1_%SPC 2_^1MOTION 0_"0_^1_%STA* MCODE_(STORE MOTION CODE IN MONITOR CALL_^1_%CLR Q_^1MOTN1 STQ* MCTR_^1_%LDA LU,Q_^1_%STA* TAPLU2_'SET LOGICAL UNIT_^1_%LDQ DENSTY,Q_^1_%SQP MOTN2-*-1_#CK IF UNIT DOWN_^1_%JMP* MOTN5_^1MOTN2 LDA* MCODE_(CK IF SELECT DENSITY REQUEST_^1_%AND- NZERO+4_^1_%SAN MOTN3-*-1_^1_%STQ* MCODE_€€(YES, SET DENSITY_^1MOTN3 RTJ- (AMONI)_%TAPE MOTION REQUEST_^1REF2_!ADC 14*FRC+FX+4*FRP+4*FCP_^1_%ADC CMPL2-REF2_^1_%ADC 0_^1TAPLU2 NUM 0_^1MCODE NUM 0_,MOTION CODE_^1_%JMP- (ADISP)_^1CMPL2 SQM MOTN4-*-1_^1_%JMP* MOTN5_^1MOTN4 LDQ* MCTR_^1_%RAO* ERRCTR,Q_$INCREMENT PROPER ERROR COUNTER_^1_%LDA DENSTY,Q_^1_%AND- LPMSK+15_^1_%EOR- ONEBIT+15_#MARK UNIT DOWN_^1_%STA DENSTY,€€Q_^1_%RTJ FNDUNT_^1_%JMP* MOTN5_^1_%LDA T616,Q_(SEE WHAT TYPE_^1_%SAP 1_*616 OR 615_^1_%JMP* MES4Z_,OTHER_^1_%RTJ ADEVER_(GET ALT DEVICE CODE_^1_%SUB =N51_)IS IT ERROR CODE 51_^1_%SAZ 1_^1_%JMP* MES4Z_^1_%RTJ (MESAGE)_^1MES4A NUM $0344_^1_%ADC (START-MES4A)_^1_%NUM 3_^1_%ADC MSG6B-MES4A_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG27B-MES4A_^1_%ADC MSG27E-MSG27B_^1_%JMP* MOTN5_^1*€€_]_^1MES4Z RTJ (MESAGE)_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG7B-MES5_^1_%ADC MSG7E-MSG7B_^1MOTN5 LDQ* MCTR_^1_%TRQ A_^1_%SUB NUMUNT_'CK IF ALL UNITS COMPLETE_^1_%SAZ MOTN6-*-1_^1_%INQ +1_^1_%JMP* MOTN1_^1MOTN6 CLR Q_,CHECK IF ALL UNITS MARKED DOWN_^1MOTN61 LDA DENSTY,Q_^1_%SAP MOTN7_(UNIT UP-RETURN_^1_%€€TRQ A_^1_%SUB NUMUNT_^1_%SAN MOTN62_^1_%JMP* ENDMSG_^1MOTN62 INQ 1_^1_%JMP* MOTN61_'TRY NEXT UNIT_^1MOTN7 LDQ* MCTR_^1_%JMP* (MOTION)_^1MCTR_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_815- CA€€RDS DELETED_^1ENDTST RAO* REPEAT_^1_%LDA FLAG_^1_%AND- ONEBIT_'CK FOR STOP FLAG_^1_%SAN ENDMSG-*-1_^1_%LDA RUNS_^1_%SAZ ENDMSG-*-1_"CK FOR ZERO RUNS REQUESTED_^1_%SAM END1-*-1_$CK FOR INFINITE RUNS REQUESTED_^1_%SUB* REPEAT_^1_%SAZ ENDMSG-*-1_"CK FOR NUMBER OF RUNS REQUESTED, COMPLETED_^1END1_!JMP BEGIN_^1ENDMSG LDA* REPEAT_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-€€*)_^1_%RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES9_!NUM $8144_^1_%ADC MSG19B-MES9_^1_%ADC MSG19E-MSG19B_^1_%LDA INPERR_'CK IF TERMINATION FROM L.U. ERROR_^1_%INA -3_^1_%SAN END2A-*-1_^1_%JMP* END5_^1END2A CLR Q_^1_%STQ* ENDCTR_^1END2_!LDQ* ENDCTR_^1_%RTJ FNDUNT_'GET UNIT NUMBER_^1_%NOP 0_,THIS NOP MUST BE HERE_^1_%LDQ* ENDCTR_^1_%LDA LU,Q_^1_%STA LNUM_^1_%LDA ERRCTR,Q_^1_€€%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%LDQ* ENDCTR_^1_%LDQ DENSTY,Q_$CK FOR NON RECOVERABLE ERROR_^1_%LDA =XMSG20E-MSG20B_^1_%SQP END3_^1_%LDA =XMSG21E-MSG20B_^1END3_!STA* ENDPTR_^1_%RTJ (MESAGE)_$OUTPUT ERROR COUNTS MESSAGE_^1MES10 NUM $8244_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG20B-MES10_^1ENDPTR ADC 0_^1_%RTJ- (AMONI)_%REWIND ALL TAPES_^1R€€EF3_!ADC 14*FRC+FX+4*FRP+4*FCP_^1_%ADC COMPL3-REF3_^1_%NUM 0_^1LNUM_!NUM 0_^1_%NUM $3000_^1_%JMP- (ADISP)_^1COMPL3 LDA* ENDCTR_^1_%SUB NUMUNT_^1_%SAZ END4-*-1_^1_%RAO* ENDCTR_^1_%JMP* END2_^1END4_!LDA FLAG_^1_%AND- ONEBIT+6_$CK FOR STOP TO REENTER PARAMETERS_^1_%SAZ END5-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END5_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LD€€Q START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1REPEAT NUM 0_^1ENDCTR NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF 10,BEGIN MAG TAPE TEST_^1_%NUM $D00_^1_%ALF $,SECTIONS,NO. OF RECDS,RUNS$_€€^1_%EQU MSG1E(*)_^1MSG2B ALF *,DLU,DENSITY*_^1_%EQU MSG2E(*)_^1MSG3B ALF $, DLU ERROR--REENTER$_^1_%EQU MSG3E(*)_^1MSG4B ALF $,SPECIAL PATTERN FOR SECTION 2$_^1_%EQU MSG4E(*)_^1MSG5B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF 2,RUN_^1RUNASC NUM 0,0_^1MSG6B ALF $, TAPE LU $_^1UNTNUM NUM 0,0_^1_%EQU MSG5E(*)_^1_%EQU MSG6E(*)_^1MSG7B ALF 13, INT/EXT REJ OR NOT RDY_^1_%EQ€€U MSG7E(*)_^1MSG8B ALF 5, COMP ERR_^1MSG9B ALF 4,RECORD_^1RCDCEL NUM 0,0_^1_%EQU MSG9E(*)_^1_%NUM $D00_^1_%ALF 3,WORD_^1WRDCEL NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG8E(*)_^1MSG10B ALF 8, COMP ERR TOTAL_^1TOTAL NUM 0,0_^1_%NUM $D00_^1_%EQU MSG10E(*)_^1MSG11B ALF 5, T-C XFER_^1_%EQU MSG11E(*)_^1MSG12B ALF 5, C-T XFER_^€€1MSG13B ALF 4, NOT RDY_^1_%EQU MSG13E(*)_^1MSG14B ALF 5, LOST DATA_^1_%EQU MSG14E(*)_^1MSG15B ALF 4, PARITY_^1_%EQU MSG15E(*)_^1MSG16B ALF 7, NO WRITE RING_^1_%EQU MSG16E(*)_^1MSG17B ALF 6, END OF TAPE_^1_%EQU MSG17E(*)_^1MSG18B ALF 6, SHORT XFER_^1_%EQU MSG18E(*)_^1MSG19B ALF 10,END MAG TAPE TEST,_^1PASSES NUM 0,0_^1_%ALF 3, RUNS_^1_%EQU MSG19E(*)_^1MSG20B ALF 1,,€€_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG20E(*)_^1MSG21B ALF 10,- NONRECOVERABLE ERROR_^1_%EQU MSG21E(*)_^1MSG22B ALF $, CORRECTED DROPOUT$_^1_%EQU MSG22E(*)_^1MSG23B ALF $, WRONG POSTAMBLE$_^1_%EQU MSG23E(*)_^1MSG24B ALF $, PE WARNING$_^1_%EQU MSG24E(*)_^1MSG25B ALF $, PE LOST DATA$_^1_%EQU MSG25E(*)_^1MSG26B ALF $, NO ID$_^1_%EQU MSG26E(*)_^1MSG27B ALF $, IL€€LEGAL DENSITY SELECTED$_^1_%EQU MSG27E(*)_^1MSG28B ALF $, UNEXPECTED END-OF-FILE$_^1_%EQU MSG28E(*)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:TAPE I/O BUFFER_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLK1K BZS BLK1K(193)_^1_%SPC 2_^1_%EQU END(*)_^1_%END 0_^__ €PSCMPP1 CSY/ B69 P€1_%NAM SCMPP1_'DECK-ID B69 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1720-1 PAPER TAPE PUNCH TEST_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1*******************************************€€*****************************_^1*_]_'*_^1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1* SCMPP1 IS A DIAGNOSTIC EXERCISER FOR THE 1720 PAPER TAPE PUNCH. IT_^1* OPERATES UNDER CONTROL OF THE DIAGNOSTIC EXECUTIVE SCMEXC AND_^1* USES THE M.S.O.S. DRIVERS FOR ALL COMMUNICATIONS WITH THE PUNCH._^1* BEFORE TEST EX€€ECUTION IS STARTED, THE USER IS REQUESTED TO INPUT_^1* THE TEST PARAMETERS -- LOGICAL UNIT, TEST SECTION TO BE EXECUTED,_^1* NUMBER OF TIMES TO EXECUTE THE TEST. EACH PARAMETER IS CHECKED_^1* FOR ITS VALIDITY. IF ANY PARAMETER IS INVALID THE USER IS REQUESTED_^1* TO REENTER THE TEST PARAMETERS. ONLY ONE TEST MAY BE CALLED FOR AT_^1* ONE TIME - THE USER MUST RESTART THE ROUTINE I€€N ORDER TO DO ANOTHER_^1* TEST. SCMPTP IS DIVIDED INTO FOUR SECTIONS (TESTS) AS FOLLOWS_^1*_'SECTION 1_!RANDOM DATA, FORMATTED RECORD TEST_^1*_'SECTION 2_!WORST CASE PATTERN TEST_^1*_'SECTION 3_!USER INPUT PATTERN TEST_^1*_'SECTION 4_!READ SYNC CHECK TEST_^1* FOR EACH RUN OF EACH TEST, A 60 WORD BUFFER IS LOADED WITH THE_^1* APPROPRIATE DATA PATTERN AND THEN PUNCHED ONTO A TAPE. €€AT THE END_^1* OF EACH PASS, A COUNTER IS UPDATED AND COMPARED AGAINST THE NUMBER_^1* OF TIMES REQUESTED BY THE USER. IF EQUAL, THE TEST IS TERMINATED._^1* IF $8000 IS ENTERED FOR THE NUMBER OF EXECUTIONS THE TEST WILL BE_^1* EXECUTED INDEFINITELY. THE TAPES PRODUCED BY THIS ROUTINE CAN THEN_^1* BE USED AS INPUT TO SCMPR1, THE DIAGNOSTIC EXERCISER FOR THE 1720-1_^1* PAPER TAPE RE€€ADER._^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU ERCODE(19)_"PHYTAB ALTDEV ERROR CODE STORAG€€E_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$RE€€QUEST WORD 'REQUEST PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATOR_^1_%EQU TSTPP1(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTPP1_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATIONS REGIONS_7*_^1*_]_'*_^1**********************************************€€**************************_^1_%SPC 2_^1START ALF 3,TSTPP1_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATIONS WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER - FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC €€ 2_^1************************************************************************_^1*_]_'*_^1*_7INPUT TEST PARAMETERS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1ENTER1 RTJ* (MESAGE)_$OUTPUT INITIAL MESSAGE_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1IN€€I1_!RTJ* (GETFLD)_$GET TEST PARAMETERS_^1_%SQP FLDOK1_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK1 INQ -1_^1_%STA LU,Q_^1_%INQ -2_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA RECS_)CONVERT NO. OF RECORDS TO HEX_^1_%SAM INI21A_4(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_^1INI21A STA RECS_^1_%LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LOGICAL UNIT TO HEX_^1_%STA RPLU_^1_%€€STA RPLUA_^1_%TRA Q_^1_%LDQ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_$CHECK IF LOGICAL UNIT LEGAL_^1_%AND =N$3804_%PAPER TAPE CLASS AND WRITE_^1_%SUB =N$2004_%PAPER TAPE CLASS CODE, WRITE ONLY_^1INI2B SAZ INI4_^1_%RAO* INPERR_N84_^1_%RTJ* (MESAGE)_$LU ERROR_>84_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG2B-MES2_^1_%ADC MSG2E-MSG2B_^1_%LDA* INPERR_'IS T€€HIS THE THIRD L.U. ERROR_^1_%INA -3_^1_%SAZ INI3-*-1_^1_%JMP* ENTER1_^1INI3_!JMP ENDMSG_'YES, TERMINATE TEST_^1INI4_!CLR A_^1_%STA REPEAT_^1_%STA ERRCTR_^1_%STA* FIRSTT_'CLEAR FIRST TIME FLAG, SPECIAL PATTERN_^1_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_*SECTION 1_#RANDOM DATA,€€ FORMATTED RECORD TEST_#84_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TEST_^1_%AND- ONEBIT+1_$CHECK IF TEST 1 IS REQUESTED_^1_%SAN T1T5A-*-1_^1_%JMP* T2T6CK_^1T1T5A LDQ =A1_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* FWRITE_^1_%STQ REF1_)SET TYPE OF I/O_^1_%LDA =N$232F_^1_%STA GNATOR_'INITIALIZE€€ RANDOM NUMBER GENERATOR_^1T1T5B CLR A_,SET UP THE BUFFER FOR THE WRITE_^1_%STA- I_^1T1T5C RTJ RANDOM_'GET RANDOM NUMBER_^1_%STA BUFFER,I_^1_%LDA- I_^1_%INA -39_*CHECK IF BUFFER IS FULL_^1_%SAZ T1T5D-*-1_^1_%RAO- I_^1_%JMP* T1T5C_^1T1T5D CLR A_,DATA TYPE_^1_%JMP* FT2468_'GO TO COMMON I/O AND CHECK_^1FWRITE ADC 6*FRC+FX+4*FRP+4*FCP FORMAT WRITE REQUEST_^1_%SPC 2_^1******€€******************************************************************_^1*_]_'*_^1*_*SECTION 2_!$AA, $55 PATTERN TEST_9*_^1*_]_'*_^1***********************************************************************_^1_%SPC 2_^1T2T6CK LDA* TEST_^1_%AND- ONEBIT+2_$CHECK IF TEST 2 REQUESTED_^1_%SAN T2T6A-*-1_^1_%JMP* T3T7CK_^1T2T6A LDQ =A2_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%L€€DQ* WRITE_^1_%STQ REF1_)SET TYPE OF I/O_^1_%LDA* PATTRN_^1_%ENQ 39_^1T2T6D STA BUFFER,Q_^1_%SQZ T2T6F-*-1_^1_%INQ -1_^1_%JMP* T2T6D_^1T2T6F ENA 1_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_^1PATTRN NUM $AA55_^1LU_#NUM 0_^1TEST_!NUM 0_^1RECS_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_*SECTION 3_#USER INPUT PATTERN€€ TEST_/84_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3T7CK LDA* TEST_^1_%AND- ONEBIT+3_$CHECK IF TEST 3 IS REQUESTED_^1_%SAN T3T7A-*-1_^1_%JMP* T4T8CK_^1T3T7A LDQ =A3_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%STQ* REF1_)SET TYPE OF I/O_^1_%LDA* FIRSTT_'FIRST TIME FLAG_^1_%SAN NOTFST_'NO_^1_%RAO* €€FIRSTT_'BUMP FIRST TIME_^1_%RTJ (MESAGE)_$REQUEST SPECIAL PATTERN_^1MES6_!NUM $8144_^1_%ADC MSG9B-MES6_^1_%ADC MSG9E-MSG9B_^1_%ENQ 0_^1_%RTJ (INFOIN)_$GET SPECIAL PATTERN_^1_%RTJ (GETFLD)_^1_%SQP FLDOK2_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK2 STA* SPCPAT_^1NOTFST ENQ 39_^1_%LDA* SPCPAT_^1T3T7C STA* BUFFER,Q_$SET UP THE BUFFER FOR THE WRITE_^1_%SQZ T3T7D-*-1_^1€€_%INQ -1_^1_%JMP* T3T7C_^1T3T7D ENA 2_,TYPE OF DATA COMPARE_^1FT2468 STA* CKTYP_(SET TYPE OF DATA COMPARE_^1T3T7E RTJ* DOIO_)DO TEST I/O_^1_%LDQ* CKTYP_^1_%JMP* TRVEC,Q_%INDEXED JUMP_^1TRVEC JMP* T2T6CK_'0 DONE 1, DO 2_^1_%JMP* T3T7CK_'1 DONE 2, DO 3_^1_%JMP* T4T8CK_'2 DONE 3, DO 4_^1GOCHK RTJ ENDCK_(3 DONE 4, DO ENDCK_^1_%JMP* BEGIN_(NOT DONE, CYCLE ALL TESTS_^1FIRSTT NUM €€0_,FIRST TIME FLAG, SPECIAL PATTERN_^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP WRITE REQUEST_^1SPCPAT NUM 0_^1CKTYP NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_*SECTION 4_#READ SYNC CHECK TEST_284_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4T8CK LDA TEST_^1_%AND- ONEBIT+€€4_$CHECK IF TEST 4 IS REQUESTED_^1_%SAN T4T8A-*-1_^1_%JMP* GOCHK_(CYCLED ALL SECTIONS_^1T4T8A LDQ =A4_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%STQ* REF1_)SET TYPE OF I/O_^1_%ENQ 39_^1_%CLR A_,SET UP THE BUFFER FOR THE WRITE_^1T4T8C STA* BUFFER,Q_^1_%SQZ T4T8D-*-1_^1_%INQ -1_^1_%JMP* T4T8C_^1T4T8D LDQ* TEST_^1_%LDA- NZERO+8_^1_%STA* BUFFER_^1_%S€€QP T4T8E-*-1_#IF TEST PARAMETER IS NEGATIVE, SET CENTER COL_^1_%STA* BUFFER+20_^1T4T8E LDA- LPMSK+8_^1_%STA* BUFFER+39_^1_%SQP T4T8F-*-1_^1_%STA* BUFFER+19_^1T4T8F ENA 3_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_6COMMON DATA I/O ROUTINE_7*_^1*_]_'*_^1*********************************€€***************************************_^1_%SPC 2_^1DOIO_!0_"0_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ DOIOB-*-1_^1_%JMP ENDMSG_^1DOIOB RTJ- (AMONI)_%DATA I/O REQUEST_^1REF1_!ADC 6*FRC+FX+4*FRP+4*FCP_^1_%ADC CMPL1-REF1_^1_%ADC 0_^1RPLU_!NUM 0_^1_%NUM 40_^1_%ADC BUFFER-REF1_^1_%JMP- (ADISP)_^1*_]_^1*_$DATA I/O BUFFER_^1*_]_^1BUFFER BZS BUFFER(40)_^1*_]_€€^1CMPL1 SQP CMPL1B-*-1_"CHECK IF DRIVER DETECTED AN ERROR_^1_%RTJ* ERRCHK_^1CMPL1B RTJ* SPACE_(WRITE OUT BLANK TAPE BEFORE NEXT RECORD_^1_%JMP* (DOIO)_^1*_]_^1SPACE 0_"0_,WRITE OUT 5 WORDS OF ZEROES_^1_%RTJ- (AMONI)_^1REF2_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC CMPL2-REF2_^1_%ADC 0_^1RPLUA NUM 0_^1_%NUM 5_^1_%ADC ZERBUF-REF2_^1_%JMP- (ADISP)_^1*_]_^1_%BZS ZERBUF(5)_^1CMPL2 S€€QP CMPL2B-*-1_^1_%RTJ* ERRCHK_^1CMPL2B JMP* (SPACE)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5CHECK FOR HARDWARE ERRORS_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCHK 0_"0_^1_%LDQ PHYLOC_^1_%LDA- ERCODE,Q_$GET ALTERNATE DEVICE ERROR CODE_^1_%AND- LPMSK+6_^1_%STA* A€€LTERR_^1_%LDA- ESTAT2,Q_$GET HARDWARE STATUS FROM PHYSTB_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* LEV1ST_^1_%CLR A_^1_%STA* FATLER_'CLEAR FATAL ERROR FLAG_^1_%LDQ- 0_^1_%ADC ($1800+STATUS-CKFNC1)_$SET 'SUB' FUNCTION_^1_%STQ* CKFNC1_^1_%LDQ- 0_^1_%SAZ 1_,SET SKIP INSTRUCTION_^1_%STQ* CKFNC2_^1_%ENQ 0_^1_%LDA* ALTERR_^1_%RTJ* ESTAT_(CHECK ALTDEV ERROR CODE FOR ERRORS_^1_€€%LDQ- 0_^1_%ADC ($2800+STATUS-CKFNC1)_$SET 'AND' FUNCTION_^1_%STQ* CKFNC1_^1_%LDQ- 0_^1_%SAN 1_,SET SKIP INSTRUCTION_^1_%STQ* CKFNC2_^1_%ENQ CHKS1-BITTAB INDEX FOR LEVEL 1 STATUS_^1_%LDA* LEV1ST_^1_%RTJ* ESTAT_(CHECK STATUS FOR ERRORS_^1_%LDA* FATLER_'CHECK FOR FATAL ERROR DETECTED_^1_%SAN ERR2-*-1_^1_%JMP* (ERRCHK)_^1ERR2_!JMP ENDMSG_'FATAL ERROR, END TEST_^1ALTERR NUM 0_^1€€LEV1ST NUM 0_^1FATLER NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2HARDWARE STAUS CHECKING ROUTINE_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_^1_%STA* STATUS_^1_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDA* BITTAB,Q_^1_%EOR- NZERO_(CHECK IF END OF TABLE_^1_€€%SAN EST2-*-1_^1_%JMP* (ESTAT)_^1EST2_!LDA* BITTAB,Q_^1_%AND- LPMSK+15_^1CKFNC1 SUB* STATUS_^1CKFNC2 SAZ EST3-*-1_$CHECK FOR ERROR CONDITION_^1_%JMP* EST6_^1EST3_!LDA* BITTAB,Q_$CHECK IF FATAL ERROR_^1_%SAP EST4_^1_%RAO* FATLER_'YES - SET FLAG_^1EST4_!RTJ* CKFLAG_'CHECK IF ERROR PRINTOUT INHIBITED_^1_%JMP* EST6_)YES - DONT PRINT_^1_%LDQ* BITPTR_'GENERATE ERROR_^1_%QLS 1_,MESSAG€€E INDEX_^1_%LDA* MSGTAB,Q_$PICK UP MESSAGE PART POINTER_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA* BITTAB,Q_$CHECK IF RECOVERABLE ERROR_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG34B-MES8_^1_%ADC MSG34E-MSG34B_^1MSGPTR ADC 0_^1_%ADC 0_^1EST6_!RAO* BITPTR_^1_%JMP* EST1_^1BITPTR NUM 0_^1STATUS N€€UM 0_^1*_]_^1CKFLAG 0_"0_,CK FOR STOP FLAG AND IF MESSAGES ARE INHIBITED_^1_%RAO* ERRCTR_'INCREMENT ERROR COUNTER_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ CKFLG1-*-1_^1_%JMP ENDMSG_^1CKFLG1 LDA FLAG_^1_%AND- ONEBIT+7_$CHECK IF INHIBIT ERROR MESSAGES FLAG SET_^1_%SAN CKFLG2-*-1_^1_%RAO* CKFLAG_^1_%LDA REPEAT_'CONVERT PASSES COMPLETED TO ASCII_^1_%INA 1_S84_^€€1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1CKFLG2 JMP* (CKFLAG)_^1ERRCTR NUM 0_^1*_]_^1RANDOM 0_"0_,GENERATE A RANDOM NUMBER_^1_%LDA* GNATOR_^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* GNATOR_^1_%LRS 1_^1_%JMP* (RANDOM)_^1GNATOR NUM 0_^1RNDNUM ADC 5*5*5*5*5_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS€€ FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_4***_!DRIVER ERROR STATUS_!***_^1_%SPC 2_^1BITTAB NUM 0_,TIME OUT_^1_%NUM 2_,ALARM_^1_%NUM 3_,PARITY ERROR_^1_%NUM $8005_(INTERNAL REJECT_^1_%NUM $8006_(EXTERNAL REJECT_^1_%NUM 27_+INVALID DEVICE MSG STATUS_^1_%NUM 30_+VALIDATION, ECHO ERROR_^1_%NUM 32_€€+TAPE SUPPLY LOW_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1*_6***_!LEVEL 1 STATUS_!***_^1_%SPC 2_^1CHKS1 NUM $8001_(NOT READY_^1_%NUM $8002_(BUSY_^1_%NUM $FFFF_(END OF TABLE_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SP€€C 2_^1MSGTAB ADC MSG10B-MES8_!TIME OUT_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES8_!ALARM_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES8_!PARITY ERROR_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES8_!INTERNAL REJECT_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES8_!EXTERNAL REJECT_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG40B-MES8_!INVALID DEVICE MSG STATUS_^1_%ADC MSG40L_^1_%ADC MSG15B-MES8_!VAL€€IDATION, ECHO ERROR_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG41B-MES8_!TAPE SUPPLY LOW_^1_%ADC MSG41L_^1_%ADC 0_^1_%ADC 0_^1_%ADC MSG18B-MES8_!NOT READY_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG19B-MES8_!BUSY_^1_%ADC MSG19E-MSG19B_^1_%ADC 0_^1_%ADC 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_^1*_]_'*_^1*******€€*****************************************************************_^1_%SPC 2_^1ENDCK 0_"0_^1_%RAO* REPEAT_^1_%LDA RECS_^1_%SAM ENDCK1-*-1_"CHECK FOR INFINITE RUNS REQUESTED_^1_%SAZ ENDMSG-*-1_"CHECK FOR ZERO RUNS REQUESTED_^1_%SUB* REPEAT_^1_%SAZ ENDMSG-*-1_"CHECK FOR NUMBER OF RUNS REQUESTED,COMPLETED_^1ENDCK1 JMP* (ENDCK)_^1*_]_^1ENDMSG LDA* REPEAT_^1_%RTJ* CONVRT_^1_%RTJ (€€RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES10 NUM $8144_^1_%ADC MSG3B-MES10_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_^1_%AND- ONEBIT+6_#CHECK FOR STOP TO RE-ENTER PARAMETERS_^1_%SAZ END1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END1_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK,RELEASE €€CORE_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%SPC 5_^1CONVRT NUM 0_,CONVERT A REGISTER TO DECIMAL_^1_%TRA Q_^1_%SUB =N$270F_%CHECK IF VALUE .GT. 9999_^1_%SAP GOWAY_(YES - LEAVE IN HEX FORM_^1_%TRQ A_,NO - GO CONVERT_^1_%RTJ (ROCDEC)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%SPC 3_^1_%SPC 2_^1**€€**********************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF 14,BEGIN PAPER TAPE PUNCH TEST_^1_%NUM $D00_^1_%ALF *,DLU,SECTIONS,RECDS*_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF 13,END PAPER TAPE€€ PUNCH TEST,_^1RUNASC NUM 0,0_^1_%ALF 3, RECS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG3E(*)_^1MSG9B ALF $,SPECIAL PATTERN $_A84_^1_%EQU MSG9E(*)_^1MSG10B ALF 4,TIME OUT_^1_%EQU MSG10E(*)_^1MSG11B ALF 3,ALARM_^1_%EQU MSG11E(*)_^1MSG12B ALF 6,PARITY ERROR_^1_%EQU MSG12E(*)_^1MSG13B ALF $,INTERNAL REJECT$_^1_%EQU MSG13E(*)_^1MSG14B ALF $,EXTERNAL REJECT$_^1_%EQU€€ MSG14E(*)_^1MSG15B ALF $,VALIDATION / ECHO ERROR$_^1_%EQU MSG15E(*)_^1MSG18B ALF 4,NOT RDY_^1_%EQU MSG18E(*)_^1MSG19B ALF 2,BUSY_^1_%EQU MSG19E(*)_^1MSG34B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF 2,REC_^1ERRPAS NUM 0,0,$2020_^1_%EQU MSG34E(*)_^1MSG40B ALF $,INVALID DEVICE MSG. STATUS$_^1MSG40L EQU MSG40L(*-MSG40B)_^1MSG41B ALF $,TAPE SUPPLY LOW$_^1MSG41L EQU MSG41L(*-M€&SG41B)_^1_%EQU END(*)_^1_%END 0_^__ &PSCMPRT CSY/ B70 P€1_%NAM SCMPRT_'DECK-ID B70 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1740/501 - 1742 - 1742/30 - 1742/120 ON-LINE DIAGOSTIC_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1*****************€€*******************************************************_^1*_]_'*_^1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_$SCMPRT IS A DIAGNOSTIC EXERCISER FOR THE 1740/1742 LINE PRIN-_^1*_$TER. IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC SUPERVISOR_^1*_$SCMEXC AND USES THE MSOS DRIVERS FOR ALL COMMUNICATION_^1*€€_$WITH THE LINE PRINTER. BEFORE TEST EXECUTION IS STARTED,_^1*_$THE USER IS REQUESTED TO INPUT THE TEST PARAMETERS -- LOGICAL_^1*_$UNIT, TEST SECTIONS TO BE EXECUTED AND THE NUMBER OF TIMES THE_^1*_$TEST SEQUENCE IS TO BE EXECUTED. THE LOGICAL UNIT IS CHECKED_^1*_$FOR ITS VALIDITY. IF INVALID THE USER IS REQUESTED TO RE-ENTER_^1*_$THE TEST PARAMETERS. IF THE LOGICAL UNIT IS ENTERED€€ INCOR-_^1*_$RECTLY THREE TIMES THE TEST IS TERMINATED BEFORE TEST EXECU-_^1*_$TION, THE ALTERNATE DEVICE FOR THE LINE PRINTER IS CHANGED_^1*_$TO THE DUMMY ALTERNATE DEVICE. UPON COMPLETION OR TERMINATION_^1*_$OF THE TEST SEQUENCE THE ALTERNATE DEVICE IS RESTORED. SCMPRT_^1*_$IS DIVIDED INTO SIX SECTIONS (TESTS) AS FOLLOWS:_^1*_*SECTION 1_!VARIABLE BUFFER TEST_^1*_*SECTION 2_!RIPP€€LE PATTERN TEST_^1*_*SECTION 3_!FULL LINE OF SAME CHARACTER TEST_^1*_*SECTION 4_!ALTERNATE EVEN AND ODD HAMMERS TEST_^1*_*SECTION 5_!LINE SPACING TEST_^1*_*SECTION 6_!6 LINE/8 LINE PER INCH TEST_^1*_$AT THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$DRIVER DETECTED ERRORS. IF AN ERROR OCCURRED, THE TEST_^1*_$USES THE ALTDEV ERROR CODE TO PRINT OUT THE ERROR MESSAGE_^1€€*_$CONTROL IS RETURNED TO THE TEST SEQUENCE AFTER AN ERROR_^1*_$IS DETECTED AND THE TEST IS CONTINUED, AT THE END OF EACH_^1*_$TEST SEQUENCE_^1*_$A PASS COUNTER IS UPDATED AND COMPARED AGAINST THE NUMBER_^1*_$OF TIMES REQUESTED BY THE USER. IF EQUAL, THE TEST IS TERM-_^1*_$INATED. THE STOP FLAG IS ALSO CHECKED AND IF SET, THE TEST_^1*_$IS TERMINATED. IF $8000 IS ENTERED FOR THE NUM€€BER OF EXECU-_^1*_$TIONS, THE TEST SEQUENCE WILL BE EXECUTED INDEFINITELY._^1*_]_^1*_$NOTE: THE M.S.O.S. DRIVER DOES NOT ALLOW THE TESTING OF THE_^1*_$HARDWARE FEATURES LEVELS 1 THRU 7 SHIFTS._^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1**********************************************************************€€**_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU ZROBIT($33)_!START OF ZERO BIT TABLE_^1€€_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORITY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORITY' LOCATOR_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1*_]_^1_%EQU ERCODE(17)_"LOCATION IN PHYTAB FOR ALTDEV ERROR CODE_^1_%EQU TSTPRT(*)_#ENTRY POINT FOR RCOS_^1_%E€€NT TSTPRT_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATIONS REGION_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF $,TSTPRT$_^1_%ADC END-START_^1*_]_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1INFOIN€€ NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7INPUT TEST PARAMETERS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR €€ A_^1_%STA* INPERR_^1ENTER1 RTJ* (MESAGE)_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET TEST PARAMETERS_^1INI1_!RTJ* (GETFLD)_^1_%SQP FLDOK1_^1_%JMP ENDMSG_'RUBOUT ENTERED--ABANDON TEST_^1FLDOK1 INQ -1_^1_%STA LU,Q_^1_%INQ -2_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA RUNS_^1_%SAM INI2A_5(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ€€* (RDECHX)_^1INI2A STA RUNS_^1_%LDA LU_^1_%RTJ* (RDECHX)_$CONVERT LOGICAL UNIT TO HEX_^1_%STA PTRLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_^1_%LDA- EREQST,Q_^1_%STQ* PHYLOC_'SAVE LOCATION OF PHYTAB_^1_%AND =N$3F00_^1_%SUB =N$2900_^1_%SAN NOT120_^1_%LDA TESTS_^1_%AND =N$3F_(INHIBIT SECTION 6 FOR 1742-30/1742-120_^1_%STA TESTS_^1_%JMP* INI4_^1NOT120 SUB =N$100_^1_%SAZ INI4_^1_%RAO* €€INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG11B-MES2_^1_%ADC MSG11E-MSG11B_^1_%LDA* INPERR_^1_%INA -3_+IS THIS THE THIRD ERROR_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1INI4_!CLR A_^1_%STA REPEAT_^1_%LDA FWRITE_'SET FWRITE IN PRINTER OUTPUT REQUEST_^1_%STA REF1_^1_%JMP* BEGIN_^1PHYLOC NUM€€ 0_^1INPERR NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2ROUTINE TO RESTORE OUTPUT BUFFER_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BUFRES 0_"0_^1_%CLR Q_^1_%STQ- I_^1RES1_!LDA SAVSET,Q_^1_%STA CHRBUF,I_^1_%RAO- I_^1_%INQ 1_^1_%LDA- I_^1_%INA -69_^1_%SAZ FI€€NISH_^1_%TRQ A_^1_%INA -32_^1_%SAN RES2-*-1_^1_%CLR Q_^1RES2_!JMP* RES1_^1FINISH JMP* (BUFRES)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2SECTION 1_!VARIABLE BUFFER TEST_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN RTJ* BUFRES_^1_%LDA* TESTS_^1_%AND- ONEBIT+1_^€€1_%SAN TEST1_^1_%JMP* T2CK_^1TEST1 LDA =A 1_)BEGIN TEST 1_^1_%STA SNUM_^1_%ENQ 0_^1_%RTJ TOPAGE_'DO TOP OF FORM_^1_%ENA 1_^1_%STA* PHASE_^1_%ENA 68_^1_%STA* BUFSIZ_^1TST11 RTJ OUTCHR_'OUTPUT CURRENT LINE_^1BUFSIZ NUM 68_^1_%ADC CHRBUF-REF1_^1_%LDQ* BUFSIZ_^1_%LDA* PHASE_^1_%SAZ TST12-*-1_^1_%INQ -4_+DECREASE LENGTH OF BUFFER_^1_%SQN TST13-*-1_^1_%STQ* PHASE_(START IN€€CREASE OF BUFFER SIZE_^1_%JMP* TST11_^1TST12 INQ +4_^1_%ENA -72_*CK IF FULL LINE HAS BEEN PRINTED_^1_%AAQ A_^1_%SAZ T2CK-*-1_^1TST13 STQ* BUFSIZ_^1_%JMP* TST11_^1PHASE NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2SECTION 2_!RIPPLE PATTERN TEST_3*_^1*_]_'*_^1**********************************************************€€**************_^1_%SPC 2_^1T2CK_!LDA* TESTS_(CK IF TEST 2 IS REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2_^1_%JMP* T3CK_^1TEST2 LDA =A 2_)BEGIN TEST 2_^1_%STA SNUM_^1_%ENQ 0_^1_%STQ* LINCTR_^1_%RTJ TOPAGE_'DO TOP OF FORM_^1TST21 RTJ OUTCHR_'OUTPUT CURRENT LINE_^1_%NUM 68_^1_%ADC CHRBUF-REF1_^1_%RAO* LINCTR_^1_%LDA* LINCTR_^1_%SUB* LSTLNE_^1_%SAN TST22-*-1_^1_%JMP* T3CK_^1T€€ST22 CLR Q_^1_%STQ- I_^1_%LDA CHRBUF,I_$SAVE FIRST CHARACTER_^1_%ALS 8_^1_%LLS 8_^1_%ALS 8_^1_%STA* SAV1ST_^1TST23 RAO- I_,SHIFT ALL CHARACTERS_^1_%LDA CHRBUF,I_%LEFT ONE POSITION_^1_%LLS 8_^1_%STQ CHRBUF-1,I_^1_%CLR Q_^1_%LLS 8_^1_%LDA- I_^1_%INA -67_^1_%SAZ TST24-*-1_#LAST WORD OF BUFFER_^1_%JMP* TST23_^1TST24 QLS 8_,LOAD LAST WORD AND_^1_%LDA* SAV1ST_(OUTPUT LINE€€_^1_%EAQ A_^1_%STA CHRBUF+67_^1_%JMP* TST21_^1SAV1ST NUM 0_^1LINCTR NUM 0_^1LSTLNE NUM 137_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1TESTS NUM 0_^1RUNS_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_+SECTION 3_!FULL LINE OF SAME CHARACTER TEST_-*_^1*_]_'*_^1*****************************************************€€*******************_^1_%SPC 2_^1T3CK_!LDA* TESTS_(CK IF TEST 3 IS REQUESTED_^1_%AND- ONEBIT+3_^1_%SAN TEST3_^1_%JMP* T4CK_^1TEST3 LDA =A 3_)BEGIN TEST 3_^1_%STA SNUM_^1_%RTJ HAMNUM_'PRINT HAMMER NUMBERS_^1_%LDA* CHAR1_^1_%STA* CHRSAV_^1TST31 LDA* CHRSAV_'GENERATE NEXT CHARACTER_^1_%ADD* INCRMT_^1_%TRA Q_^1_%STA* CHRSAV_'CHECK FOR LAST LINE_^1_%SUB =N$6060_^1_%SAN TST32-*-€€1_^1_%JMP* T4CK_^1TST32 TRQ A_^1_%ENQ 67_^1TST33 STA CHRBUF,Q_^1_%INQ -1_^1_%SQM TST34-*-1_^1_%JMP* TST33_^1TST34 RTJ OUTCHR_'OUTPUT ONE LINE OF SAME CHARACTER_^1_%NUM 68_^1_%ADC CHRBUF-REF1_^1_%JMP* TST31_^1_%EJT_]_^1CHAR1 NUM $1F1F_^1CHRSAV NUM 0_^1INCRMT NUM $0101_^1EVNHAM ALF 1,A_^1ODDHAM ALF 1, B_^1_%SPC 2_^1***************************************************€€*********************_^1*_]_'*_^1*_+SECTION 4_!ALTERNATE EVEN AND ODD HAMMER TEST_+*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA* TESTS_(CK IF TEST 4 IS REQUESTED_^1_%AND- ONEBIT+4_^1_%SAN TEST4_^1_%JMP* T5CK_^1TEST4 LDA =A 4_)BEGIN TEST 4_^1_%STA SNUM_^1_%RTJ HAMNUM_^1_%CLR A_^1_%STA* LINCTR_^1TST41 LDA* EVNHAM_€€^1TST41A ENQ 67_^1TST42 STA CHRBUF,Q_$LOAD CHARACTER BUFFER_^1_%INQ -1_^1_%SQM TST43-*-1_^1_%JMP* TST42_^1TST43 RTJ* OUTCHR_'OUTPUT CURRENT LINE_^1_%NUM 68_^1_%ADC CHRBUF-REF1_^1_%RAO* LINCTR_^1_%LDA* LINCTR_^1_%INA -40_*CHECK FOR 40 LINES_^1_%SAZ T5CK-*-1_^1_%INA +40_^1_%AND- ONEBIT_'CK IF COUNT IS EVEN OR ODD_^1_%SAN TST44-*-1_^1_%JMP* TST41_^1TST44 LDA* ODDHAM_'COUN€€T WAS ODD_^1_%JMP* TST41A_^1*_]_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3SECTION 5_!LINE SPACING TEST_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA TESTS_(CK IF TEST 5 IS REQUESTED_^1_%AND- ONEBIT+5_^1_%SAN TEST5_^1_%JMP* T6CK_^1TEST5 LDA =A 5_)BEGIN TEST 5_€€^1_%STA SNUM_^1_%ENQ 0_^1_%RTJ* TOPAGE_'DO TOP OF FORM_^1_%LDA* WRITE_(SET WRITE IN PRINT OUTPUT REQUEST_^1_%STA* REF1_^1_%CLR A_^1TST51 STA* NUMINC_^1_%RTJ* OUTCHR_'SINGLE SPACE + MESSAGE_^1_%ADC MSG3E-MSG3B_^1_%ADC MSG3B-REF1_^1_%LDA* NUMINC_^1_%INA -7_^1_%SAZ TST52-*-1_^1_%INA +8_^1_%JMP* TST51_^1TST52 STA* NUMINC_^1_%RTJ* OUTCHR_'DOUBLE SPACE + MESSAGE_^1_%ADC MSG4E-€€MSG4B_^1_%ADC MSG4B-REF1_^1_%LDA* NUMINC_^1_%INA -7_^1_%SAZ TST53-*-1_^1_%INA +8_^1_%JMP* TST52_^1TST53 LDA* FWRITE_'SET FWRITE IN PRINTER OUTPUT REQUEST_^1_%STA* REF1_^1_%JMP* T6CK_^1NUMINC NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_46 LINE/8 LINE PER INCH TEST_5*_^1*_]_'*_^1****************************************€€********************************_^1_%SPC 2_^1T6CK_!LDA TESTS_(CK IF TEST 6 REQUESTED_^1_%AND- ONEBIT+6_^1_%SAN TEST6-*-1_^1_%JMP ENDTST_^1TEST6 LDA =A 6_^1_%STA SNUM_^1_%ENQ 0_,DO TOP OF FORM_^1_%RTJ* TOPAGE_^1_%CLR A_^1_%STA* NUMINC_^1TST61 RTJ* OUTCHR_'OUTPUT MESSAGE_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG12B-REF1_^1_%LDA* NUMINC_^1_%INA -23_^1_%SAZ TST62-*-1_^1_%RAO* NUM€€INC_^1_%JMP* TST61_^1TST62 STA* NUMINC_^1_%LDA* WRITE_(SET WRITE_^1_%STA* REF1_^1_%RTJ OUTCHR_'UPSPACE ONE LINE_^1_%ADC MSG19E-MSG19B_^1_%ADC MSG19B-REF1_^1TST63 RTJ* OUTCHR_'OUTPUT MESSAGE_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG13B-REF1_^1_%LDA* NUMINC_^1_%INA -23_^1_%SAZ TST64-*-1_^1_%RAO* NUMINC_^1_%JMP* TST63_^1TST64 LDA* FWRITE_'RESTORE FWRITE_^1_%STA* REF1_^1_%JMP ENDTST€€_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5ROUTINE FOR PAPER MOVEMENT_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TOPAGE 0_"0_^1_%LDA* FNCTAB,Q_^1_%STA* CONTRL_^1_%RTJ* OUTCHR_^1_%NUM 1_^1_%ADC CONTRL-REF1_^1_%JMP* (TOPAGE)_^1CONTRL NUM 0_^1FNCTAB NUM $C00_^1_%NUM $€€A00_^1_%NUM $A0A_^1*_82-CARDS DELETED_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_,COMMON FORMAT WRITE ROUTINE FOR TEST OUTPUT_-*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1OUTCHR 0_"0_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP BIT SET_^1_%SAZ GOOUT_^1_%JMP END1A_^1GOO€€UT LDA* (OUTCHR)_^1_%STA* SIZE_^1_%RAO* OUTCHR_^1_%LDA* (OUTCHR)_^1_%STA* BUFLOC_^1_%RAO* OUTCHR_^1_%RTJ- (AMONI)_^1REF1_!ADC 6*FRC+FX+4*FRP+4*FCP_^1_%ADC ERRCHK-REF1_^1_%ADC 0_^1PTRLU NUM 0_^1SIZE_!NUM 68_^1BUFLOC ADC CHRBUF-REF1_^1_%JMP- (ADISP)_^1FWRITE ADC 6*FRC+FX+4*FRP+4*FCP_%FORMATTED WRITE REQUEST_^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP_%NON-FORMATTED WRITE REQUEST_^1_%€€EJT_]_^1*_]_^1*_$OUTPUT BUFFER_^1*_]_^1CHRBUF BZS CHRBUF(68)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2ROUTINE TO OUTPUT HAMMER NUMBERS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1HAMNUM 0_"0_^1_%ENQ 0_^1_%RTJ* TOPAGE_'DO TOP OF FORM_^1_%CLR Q_^1_%STQ* NUMCTR_'ZERO N€€UMBER COUNTER_^1HAM1_!LDA* ISTNUM_^1_%STA* CURNUM_^1HAM2_!LDA* CURNUM_^1_%ADD =N$0202_^1_%STA* CURNUM_^1_%STA* CHRBUF,Q_^1_%INQ 1_^1_%RAO* NUMCTR_^1_%TRQ A_^1_%INA -68_^1_%SAZ HAM4_^1_%LDA* NUMCTR_^1_%INA -5_^1_%SAZ HAM3_^1_%JMP* HAM2_^1HAM3_!STA* NUMCTR_^1_%JMP* HAM1_^1HAM4_!RTJ* OUTCHR_'OUTPUT HAMMER NUMBERS_^1_%NUM 68_^1_%ADC CHRBUF-REF1_^1_%ENQ 2_,OUTPUT DOUBLE SPACE_€€^1_%RTJ TOPAGE_^1_%JMP* (HAMNUM)_^1NUMCTR NUM 0_^1CURNUM NUM 0_^1ISTNUM NUM $2E2F_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5CHECK FOR HARDWARE ERRORS_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCHK SQM ERCHKO_'COMPLETION ADDRESS FOR OUTPUT_^1RETURN JMP* (OUTCHR)_€€$NO ERROR--RETURN TO CALLING SEQUENCE_^1ERCHKO LDA FLAG_)CHECK FOR ERROR PRINTOUT INHIBITED_^1_%AND- ONEBIT+7_^1_%SAZ ERCHK2_^1_%JMP* RETURN_'ERROR HANDLED--RETURN TO CALLING_^1*_$SEQUENCE_^1ERCHK2 LDQ PHYLOC_^1_%LDA- ERCODE,Q_$GET ALTDEV ERROR CODE_^1_%AND- LPMSK+6_^1_%STA* ALTERR_^1_%ENQ 0_^1ERCHK3 LDA* BITTAB,Q_^1_%SAM ERCHK6_'SKIP IF END OF TABLE_^1_%SUB* ALTERR_^1_%SAZ E€€RCHK6_'ERROR FOUND IF ZERO_^1_%INQ 1_^1_%JMP* ERCHK3_^1ERCHK6 QLS 1_,MULTIPLY Q REGISTER BY 2_^1_%LDA* MSGPTR,Q_^1_%STA* ERRMSG_^1_%INQ 1_^1_%LDA* MSGPTR,Q_^1_%STA* ERRMSG+1_^1_%LDQ PHYLOC_^1_%LDA- ESTAT2,Q_$GET HARDWARE STATUS_^1_%AND- ONEBIT_^1_%LDQ =XMSG7B-MES3 NOT READY MESSAGE_^1_%SAZ ERCHK7_^1_%LDQ =XMSG8B-MES3 READY MESSAGE_^1ERCHK7 STQ* RDYMSG_^1_%RTJ (MESAGE)_^1MES€€3_!NUM $8444_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG2B-MES3_^1_%ADC MSG2E-MSG2B_^1ERRMSG ADC 0_^1_%NUM 0_^1RDYMSG ADC 0_^1_%NUM 8_^1_%JMP* RETURN_^1ALTERR NUM 0_,ALTERNATE DEVICE HANDER ERROR CODE_^1BITTAB NUM 0_,TIME OUT_^1_%NUM 2_,ALARM_^1_%NUM 3_,PARITY_^1_%NUM 5_,INTERNAL REJECT_^1_%NUM 6_,EXTERNAL REJECT_^1_%NUM $FFFF_(END OF TABLE_^1MSGPTR ADC MSG14B-MES3_€€^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES3_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG16B-MES3_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES3_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG18B-MES3_^1_%ADC MSG18E-MSG18B_^1_%ADC 0_^1_%ADC 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1****************************€€********************************************_^1_%SPC 2_^1ENDTST RAO* REPEAT_^1_%LDA FLAG_)CK FOR STOP BIT SET_^1_%AND- ONEBIT_^1_%SAN END1A-*-1_^1_%LDA RUNS_^1_%SAZ END1A-*-1_^1_%SAM END1-*-1_^1_%SUB* REPEAT_'IS NUMBER OF EXECUTIONS SATISFIED_^1_%SAZ END1A-*-1_^1END1_!JMP BEGIN_^1END1A LDA FLAG_)CLEAR STOP FLAG SO TEST DOES NOT HANG_^1_%AND- ZROBIT_^1_%STA FLAG_^1_%ENQ €€0_,DO FINAL TOP OF FORM_^1_%RTJ TOPAGE_^1ENDMSG RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES4_!NUM $8144_^1_%ADC MSG10B-MES4_^1_%ADC MSG10E-MSG10B_^1_%LDA FLAG_)CK FOR STOP TO RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$CLEAR TEST NAME FROM PG€€M STACK, RELEASE CORE_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN LINE PRINTER TEST $_^1_%NUM $0D00_^1_%ALF $,DLU,SECTIONS,RUNS$_^1_%EQU MSG1E(*)_^1MSG2B €€ ALF *, SECTION*_^1SNUM_!NUM 0_^1_%EQU MSG2E(*)_^1MSG3B NUM $1B31_"(ESCAPE CODE + SINGLE SPACE)_^1_%ALF 6,SINGLE SPACE_^1_%NUM $1B30_"(ESCAPE CODE + PRINT)_^1_%EQU MSG3E(*)_^1MSG4B NUM $1B32_"(ESCAPE CODE + DOUBLE SPACE)_^1_%ALF 6,DOUBLE SPACE_^1_%NUM $1B30_"(ESCAPE CODE + PRINT)_^1_%EQU MSG4E(*)_^1MSG14B ALF *, TIME OUT *_^1_%EQU MSG14E(*)_^1MSG15B ALF $, ALARM$_^1€€_%EQU MSG15E(*)_^1MSG16B ALF *, PARITY *_^1_%EQU MSG16E(*)_^1MSG17B ALF *, INT REJ*_^1_%EQU MSG17E(*)_^1MSG18B ALF *, EXT REJ*_^1_%EQU MSG18E(*)_^1MSG7B ALF 8, CNTRL NOT READY_^1MSG8B ALF 8, CNTRL READY_^1MSG10B ALF 8,END PRINTER TEST_^1_%EQU MSG10E(*)_^1MSG11B ALF *, DLU ERROR*_^1_%EQU MSG11E(*)_^1MSG12B ALF *,SIX LINES/INCH*_^1_%EQU MSG12E(*)_^1MSG13B NUM $1B3F_€€^1_%ALF *,EIGHT LINES/INCH*_^1_%NUM $0D30_^1_%EQU MSG13E(*)_^1MSG19B NUM $1B3F,$2020,$0D30_^1_%EQU MSG19E(*)_^1*_]_^1SAVSET NUM $2122_^1_%NUM $2324_^1_%NUM $2526_^1_%NUM $2728_^1_%NUM $292A_^1_%NUM $2B2C_^1_%NUM $2D2E_^1_%NUM $2F30_^1_%ALF 4,12345678_^1_%NUM $393A_^1_%NUM $3B3C_^1_%NUM $3D3E_^1_%NUM $3F40_^1_%ALF 6,ABCDEFGHIJKL_^1_%ALF 6,MNOPQRSTUVWX_^1_%ALF 1,€NYZ_^1_%NUM $5B5C_^1_%NUM $5D5E_^1_%NUM $5F20_^1_%EQU END(*)_^1_$END_]_^__ NPSCMPR1 CSY/ B71 P€1_%NAM SCMPR1_'DECK-ID B71 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$1720-1 PAPER TAPE READER TEST_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1******************************************€€******************************_^1*_]_'*_^1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1* SCMPR1 IS A DIAGNOSTIC EXERCISER FOR THE 1720 PAPER TAPE READER. IT_^1* OPERATES UNDER CONTROL OF THE DIAGNOSTIC EXECUTIVE SCMEXC AND_^1* USES THE M.S.O.S. DRIVERS FOR ALL COMMUNICATIONS WITH THE RUST RESTART_^1* TEST. €€SCMPTR IS DIVIDED INTO FOUR SECTIONS (TESTS) AS FOLLOWS_^1*_'SECTION 1_!RANDOM DATA, FORMATTED RECORD TEST_^1*_'SECTION 2_!WORST CASE PATTERN TEST_^1*_'SECTION 3_!USER INPUT PATTERN TEST_^1*_'SECTION 4_!RRATES UNDER CONTROL OF THE DIAGNOSTIC EXECUTIVE SC_^1* USES THE M.S.O.S. DRIVERS FOR ALL COMMUNICATIONS WITH THE2@PTP, THE EX_^1* FOR EACH RUN OF EACH TEST, A 60 WORD BUFFER IS LOA€€DED FROM DATA ON THE_^1* TAPE. THE DATA PATTERN IS THEN REGENERATED AND COMPARED AGAINST THE_^1* TAPE. MESSAGES INDICATING ANY ERRORS ENCOUNTERED WILL BE PRINTED_^1* OUT. AT THE END OF EACH PASS, A COUNTER IS UPDATED AND COMPARED_^1* AGAINST THE NUMBER OF TIMES REQUESTED BY THE USER. IF EQUAL, THE_^1* TEST IS TERMINATED._^1* IF $8000 IS ENTERED FOR THE NUMBER OF EXECUTIONS THE T€€EST WILL BE_^1* EXECUTED INDEFINITELY._^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU ERCODE(19)€€_"PHYTAB ALTDEV ERROR CODE STORAGE_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU TEN($46)_$LOCATION CONTAINING TEN_^1_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' L€€OCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATOR_^1_%EQU TSTPR1(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTPR1_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_]_^1*_7C€€OMMUNICATIONS REGION_^1*_]_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTPR1_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATIONS WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER - FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM €€ 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7INPUT TEST PARAMETERS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1ENTER1 RTJ* (MESAGE)_$OUTPUT INITIAL MESSAGE_^1MES1_!NUM $8144€€_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1INI1_!RTJ* (GETFLD)_$GET TEST PARAMETERS_^1_%SQP FLDOK1_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK1 INQ -1_^1_%STA LU,Q_^1_%INQ -2_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA RECS_)CONVERT NO. OF RECORDS TO HEX_^1_%SAM INI21A_4(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_^1INI21A STA RECS_^1€€_%LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LOGICAL UNIT TO HEX_^1_%STA RPLU_^1_%STA RPLUA_^1_%TRA Q_^1_%LDQ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_$CHECK IF LOGICAL UNIT LEGAL_^1_%AND =N$3802_^1_%SUB =N$2002_%PAPER TAPE CLASS CODE, READ ONLY_^1INI2B SAZ INI4_)YES_^1_%RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC €€ MSG2B-MES2_^1_%ADC MSG2E-MSG2B_^1_%LDA* INPERR_'IS THIS THE THIRD L.U. ERROR_^1_%INA -3_^1_%SAZ INI3-*-1_^1_%JMP* ENTER1_^1INI3_!JMP ENDMSG_'YES, TERMINATE TEST_^1INI4_!CLR A_^1_%STA REPEAT_^1_%STA ERRCTR_^1_%STA* FIRSTT_'CLEAR FIRST TIME FLAG, SPECIAL PATTERN_^1_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 0_^1_%EJT_]_^1********************************************************€€****************_^1*_]_'*_^1*_*SECTION 1_#RANDOM DATA, FORMATTED RECORD TEST_#84_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TEST_^1_%AND- ONEBIT+1_$CHECK IF TEST 1 IS REQUESTED_^1_%SAN T1T5A-*-1_^1_%JMP* T2T6CK_^1T1T5A LDQ =A1_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* FREAD_^1_%STQ REF1_)SET TYP€€E OF I/O_^1_%LDA =N$232F_^1_%STA GNATOR_'INITIALIZE RANDOM NUMBER GENERATOR_^1_%CLR A_^1_%JMP* FT2468_'GO TO COMMON I/O AND CHECK_^1FREAD ADC 4*FRC+FX+4*FRP+4*FCP FORMAT READ REQUEST_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_*SECTION 2_!$AA, $55 PATTERN TEST_9*_^1*_]_'*_^1************************************************€€***********************_^1_%SPC 2_^1T2T6CK LDA* TEST_^1_%AND- ONEBIT+2_$CHECK IF TEST 2 REQUESTED_^1_%SAN T2T6A-*-1_^1_%JMP* T3T7CK_^1T2T6A LDQ =A2_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* READ_^1_%STQ REF1_)SET TYPE OF I/O_^1_%ENA 1_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_^1PATTRN NUM $AA55_^1LU_#NUM 0_^1TEST_!NUM 0_^1RECS_!NUM 0_^1_%SPC 2_^1***********€€*************************************************************_^1*_]_'*_^1*_*SECTION 3_#USER INPUT PATTERN TEST_/84_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3T7CK LDA* TEST_^1_%AND- ONEBIT+3_$CHECK IF TEST 3 IS REQUESTED_^1_%SAN T3T7A-*-1_^1_%JMP* T4T8CK_^1T3T7A LDQ =A3_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_€€%LDQ* READ_^1_%STQ* REF1_)SET TYPE OF I/O_^1_%LDA* FIRSTT_'FIRST TIME FLAG_^1_%SAN NOTFST_'NO_^1_%RAO* FIRSTT_'BUMP FIRST TIME_^1_%RTJ (MESAGE)_$REQUEST SPECIAL PATTERN_^1MES6_!NUM $8144_^1_%ADC MSG9B-MES6_^1_%ADC MSG9E-MSG9B_^1_%ENQ 0_^1_%RTJ (INFOIN)_$GET SPECIAL PATTERN_^1_%RTJ (GETFLD)_^1_%SQP FLDOK2_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK2 STA* SPCPAT_^1NOTF€€ST ENA 2_,TYPE OF DATA COMPARE_^1FT2468 STA* CKTYP_(SET TYPE OF DATA COMPARE_^1T3T7E RTJ* DOIO_)DO TEST I/O_^1_%LDQ* CKTYP_^1_%JMP* TRVEC,Q_%INDEXED JUMP_^1TRVEC JMP* T2T6CK_'0 DONE 1, DO 2_^1_%JMP* T3T7CK_'1 DONE 2, DO 3_^1_%JMP* T4T8CK_'2 DONE 3, DO 4_^1GOCHK RTJ ENDCK_(3 DONE 4, DO ENDCK_^1_%JMP* BEGIN_(NOT DONE, CYCLE ALL TESTS_^1FIRSTT NUM 0_,FIRST TIME FLAG, SPECIAL PAT€€TERN_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP READ REQUEST_^1SPCPAT NUM 0_^1CKTYP NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_*SECTION 4_#READ SYNC CHECK TEST_284_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4T8CK LDA TEST_^1_%AND- ONEBIT+4_$CHECK IF TEST 4 IS REQUESTED_^1€€_%SAN T4T8A-*-1_^1_%JMP* GOCHK_(CYCLED ALL SECTIONS_^1T4T8A LDQ =A4_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* READ_^1_%STQ* REF1_)SET TYPE OF I/O_^1_%ENA 3_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_6COMMON DATA I/O ROUTINE_7*_^1*_]_'*_^1******************************€€******************************************_^1_%SPC 2_^1DOIO_!0_"0_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ DOIO1-*-1_^1_%JMP ENDMSG_^1DOIO1 ENQ 39_+CLEAR I/O BUFFER FOR THE READ_^1_%CLR A_^1DOIOA STA* BUFFER,Q_^1_%SQZ DOIOB-*-1_^1_%INQ -1_^1_%JMP* DOIOA_^1DOIOB LDA* CKTYP_(SEE IF TEST 1_^1_%SAZ DOIOC_(YES_^1_%JMP* SPACE_(SPACE OVER LEADER UNTIL FIRST NO€€N ZERO CHAR._^1DOIOC RTJ- (AMONI)_%DATA I/O REQUEST_^1REF1_!ADC 6*FRC+FX+4*FRP+4*FCP_^1_%ADC CMPL1-REF1_^1_%ADC 0_^1RPLU_!NUM 0_^1WORDS NUM 40_^1BUFADC ADC BUFFER-REF1_^1_%JMP- (ADISP)_^1*_]_^1*_$DATA I/O BUFFER_^1*_]_^1_%BZS BUFFER(41)_^1*_]_^1CMPL1 LDA* SET1_^1_%STA* BUFADC_^1_%SQP CMPL1B_^1_%RTJ* ERRCHK_^1CMPL1B RTJ* ALIGN_^1_%RTJ CKDATA_'VERIFY DATA_^1_%JMP* (DOIO)_€€N84_^1SPACE RTJ- (AMONI)_^1REF2_!ADC 1*FRC+FX+4*FRP+4*FCP_#READ_^1_%ADC CMPL2-REF2_^1_%ADC 0_^1RPLUA NUM 0_^1_%NUM 1_^1_%ADC BUFFER-REF2_^1_%JMP- (ADISP)_^1*_]_^1CMPL2 SQP CMPL2B-*-1_^1_%RTJ* ERRCHK_^1CMPL2B LDA* BUFFER_^1_%SAN CMPL2D_'LEADER YET_^1_%JMP* SPACE_(NO TRY AGAIN_^1CMPL2D LDA* SET2_^1_%STA* BUFADC_^1_%JMP* DOIOC_(READ REST OF DATA_^1*_]_^1SET1_!ADC BUFFER-RE€€F1_^1SET2_!ADC BUFFER+1-REF1_^1*_]_^1*_$THE FOLLOWING ROUTINE REALIGNS THE BUFFER SO THAT THE FIRST_^1*_'WORD IS A FULL WORD AND ALL SUCCEDING WORDS ARE FULL WORDS._^1*_'ON CERTAIN READS THE DRIVER DOESN T IGNORE THE LEADER SO THE_^1*_'TEST BYPASSES THE LEADER, BUT THE DRIVER READS TWO FRAMES_^1*_'FOR EVER WORD AND ITS POSSIBLE TO HAVE HALF A WORD OF LEADER_^1*_'AND A HALF OF WORD€€ OF DATA, INSTEAD OF A FULL WORD OF DATA._^1*_]_^1*_]_^1ALIGN NOP 0_^1_%LDA* BUFFER_'CHECK FIRST WORD TO SEE IF FULL OF DATA_^1_%AND- NZERO+8_*($FF00)_^1_%SAZ ALIGN1_^1_%JMP* (ALIGN)_%FULL WORD, EXIT_^1ALIGN1 LDQ- I_^1_%STQ* ISV_*SAVE THE I REGISTER_^1_%STA- I_^1ALIGN2 LDQ* BUFFER,I_^1_%LDA* BUFFER+1,I_^1_%LLS 8_^1_%STQ* BUFFER,I_^1_%ALS 8_^1_%STA* BUFFER+1,I_^1_%RAO- I_^1_%LD€€A- I_^1_%INA -40_^1_%SAZ ALIGN3_^1_%JMP* ALIGN2_^1ALIGN3 LDA* ISV_^1_%STA- I_^1_%JMP* (ALIGN)_^1*_]_^1ISV_"NUM 0_,I REGISTER HOLD AREA_^1*_]_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5CHECK FOR HARDWARE ERRORS_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCHK 0_"0_^1€€_%LDQ PHYLOC_^1_%LDA- ERCODE,Q_$GET ALTERNATE DEVICE ERROR CODE_^1_%AND- LPMSK+6_^1_%STA* ALTERR_^1_%LDA- ESTAT2,Q_$GET HARDWARE STATUS FROM PHYSTB_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* LEV1ST_^1_%CLR A_^1_%STA* FATLER_'CLEAR FATAL ERROR FLAG_^1_%LDQ- 0_^1_%ADC ($1800+STATUS-CKFNC1)_$SET 'SUB' FUNCTION_^1_%STQ* CKFNC1_^1_%LDQ- 0_^1_%SAZ 1_,SET SKIP INSTRUCTION_^1_%S€€TQ* CKFNC2_^1_%ENQ 0_^1_%LDA* ALTERR_^1_%RTJ* ESTAT_(CHECK ALTDEV ERROR CODE FOR ERRORS_^1_%LDQ- 0_^1_%ADC ($2800+STATUS-CKFNC1)_$SET 'AND' FUNCTION_^1_%STQ* CKFNC1_^1_%LDQ- 0_^1_%SAN 1_,SET SKIP INSTRUCTION_^1_%STQ* CKFNC2_^1_%ENQ CHKS1-BITTAB INDEX FOR LEVEL 1 STATUS_^1_%LDA* LEV1ST_^1_%RTJ* ESTAT_(CHECK STATUS FOR ERRORS_^1_%LDA* FATLER_'CHECK FOR FATAL ERROR DETECTED_^1_%S€€AN ERR2-*-1_^1_%JMP* (ERRCHK)_^1ERR2_!JMP ENDMSG_'FATAL ERROR, END TEST_^1ALTERR NUM 0_^1LEV1ST NUM 0_^1FATLER NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2HARDWARE STAUS CHECKING ROUTINE_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_^1_%STA* STATUS_^1_€€%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDA* BITTAB,Q_^1_%EOR- NZERO_(CHECK IF END OF TABLE_^1_%SAN EST2-*-1_^1_%JMP* (ESTAT)_^1EST2_!LDA* BITTAB,Q_^1_%AND- LPMSK+15_^1CKFNC1 SUB* STATUS_^1CKFNC2 SAZ EST3-*-1_$CHECK FOR ERROR CONDITION_^1_%JMP* EST6_^1EST3_!LDA* BITTAB,Q_$CHECK IF FATAL ERROR_^1_%SAP EST4_^1_%RAO* FATLER_'YES - SET FATAL ERROR FLAG_^1_%RAO* ERRCTR_^1EST4_!RTJ* CKFL€€AG_'CHECK IF ERROR PRINTOUT IS INHIBITED_^1_%JMP* EST6_)YES - DON'T PRINT_^1_%LDQ* BITPTR_'GENERATE ERROR_^1_%QLS 1_-MESSAGE INDEX_^1_%LDA* MSGTAB,Q_$PICK UP MESSAGE PART POINTER_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA* BITTAB,Q_$CHECK IF RECOVERABLE ERROR_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC€€ MSG34B-MES8_^1_%ADC MSG34E-MSG34B_^1MSGPTR ADC 0_^1_%ADC 0_^1EST6_!RAO* BITPTR_^1_%JMP* EST1_^1BITPTR NUM 0_^1STATUS NUM 0_^1*_]_^1CKFLAG 0_"0_,CK FOR STOP FLAG AND IF MESSAGES ARE INHIBITED_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ CKFLG1-*-1_^1_%JMP ENDMSG_^1CKFLG1 LDA FLAG_^1_%AND- ONEBIT+7_$CHECK IF INHIBIT ERROR MESSAGES FLAG SET_^1_%SAN CKFLG2-*-1_€€^1_%RAO* CKFLAG_^1_%LDA REPEAT_'CONVERT PASSES COMPLETED TO ASCII_^1_%INA 1_S84_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1CKFLG2 JMP* (CKFLAG)_^1ERRCTR NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1****************************************************************€€********_^1_%SPC 2_^1*_4***_!DRIVER ERROR STATUS_!***_^1_%SPC 2_^1BITTAB NUM 0_,TIME OUT_^1_%NUM 2_,ALARM_^1_%NUM 3_,PARITY ERROR_^1_%NUM 4_,CHECKSUM ERROR_^1_%NUM $8005_(INTERNAL REJECT_^1_%NUM $8006_(EXTERNAL REJECT_^1_%NUM $800E_(NOT READY - 14_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1*_6***_!LEVEL 1 STATUS_!***_^1_%SPC 2_^1CHKS1 EQU CHKS1(*)_^1_%NUM $8002_(BUSY_^1€€_%NUM $8400_(BACKWARD MOTION_^1_%NUM $FFFF_(END OF TABLE_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGTAB ADC MSG10B-MES8_!TIME OUT_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES8_!ALARM_^1_%ADC MSG11E-MSG11B_^1_%A€€DC MSG12B-MES8_!PARITY ERROR_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES8_!CHECKSUM_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES8_!INTERNAL REJECT_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES8_!EXTERNAL REJECT_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG18B-MES8_!NOT READY_^1_%ADC MSG18E-MSG18B_^1_%ADC 0_^1_%ADC 0_^1_%ADC MSG19B-MES8_!BUSY_^1_%ADC MSG19E-MSG19B_^1_%ADC MSG22B-MES8_!BACKWA€€RD MOTION_^1_%ADC 0_^1_%ADC 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7CHECK FOR DATA ERRORS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CKDATA 0_"0_^1_%CLR A_^1_%STA* GRPIND_^1_%STA* FADD1_^1_%STA CMP1_P84_^1_%LDQ CKTYP_(GET TYPE OF DATA COMPARE_^1_%JMP* *+1,Q_(GO€€ TO PROPER ROUTINE_^1_%JMP* TST5CK_^1_%JMP* TST6CK_^1_%JMP* TST7CK_^1_%JMP* TST8CK_^1*_9RANDOM DATA CHECK ROUTINE_^1TST5CK RAO* FADD1_(SET FLAG TO TAKE WORDCOUNT INTO CONSIDERATION_^1TST5A RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD1_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%LDA* GRPIND_^1_%INA -40_^1_%SAZ TST5B-*-1_#DONE_^1_%JMP* TST5A_^1TST5B JMP* (CKDATA)_^1*_8$AA, $55 P€€ATTERN CHECK ROUTINE_^1TST6CK LDA PATTRN_'PICK UP PATTERN_^1_%STA* WORD1_^1TST6B RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%LDA* GRPIND_^1_%INA -40_*CHECK IF DATA CHECK COMPLETE_^1_%SAZ TST6C-*-1_^1_%JMP* TST6B_^1TST6C JMP* (CKDATA)_^1TST7CK LDA SPCPAT_'SPECIAL PATTERN CHECK ROUTINE_^1_%STA* WORD1_^1_%JMP* TST6B_^1*_8READ SYNC PATTERN CHECK ROUTINE_^1TST8CK LDA- NZERO+8_%SET FRA€€ME 1_^1_%STA* WORD1_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%CLR A_^1_%STA* WORD1_^1TST8B RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%LDA TEST_^1_%SAP TST8C-*-1_#IF BIT 15 SET, SET FRAMES 40 AND 41_^1_%LDA* GRPIND_^1_%INA -19_^1_%SAN TST8C-*-1_^1_%LDA- LPMSK+8_%SET FRAME 40_^1_%STA* WORD1_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%CLR A_^1_%JMP* TST8CK_'SET COLUMN 41_^1TST8C L€€DA* GRPIND_^1_%INA -39_^1_%SAZ TST8D-*-1_#CHECK IF DOING FRAMES 79 AND 80_^1_%JMP* TST8B_^1TST8D LDA- LPMSK+8_%SET FRAME 80_^1_%STA* WORD1_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%JMP* (CKDATA)_^1WORD1 NUM 0_^1FADD1 NUM 0_^1*_]_^1RANDOM 0_"0_,GENERATE A RANDOM NUMBER_^1_%LDA* GNATOR_^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* GNATOR_^1_%LRS 1_^1_%JMP* (RANDOM)_^1GNATOR NUM€€ 0_^1RNDNUM ADC 5*5*5*5*5_^1GRPIND NUM 0_,COLUMN GROUP NUMBER_^1_%EJT_]_^1CHKERR 0_"0_,CHECK DATA ON A COLUMN BASIS_^1_%LDA- I_^1_%STA* ISAVE_^1_%LDA* GRPIND_'CALCULATE BUFFER INDEX_^1_%STA- I_,EACH THREE DATA WORDS ARE IN FOUR COLUMNS_^1_%LDA BUFFER,I_$GET COLUMN N+1 WHERE N IS FROM 0 TO 19_^1_%AND- NZERO+8_^1_%ALS 8_^1_%STA* IS_^1_%LDA* WORD1_^1_%AND- NZERO+8_^1_%ALS 8_^1_%€€STA* WAS_^1_%EOR* IS_^1_%SAZ CHK1-*-1_$CHECK COLUMN N+1_^1_%ENQ 1_^1_%RTJ* DATERR_'DATA ERROR COLUMN N+1_^1CHK1_!LDA BUFFER,I_$GET COLUMN N+2_^1_%AND- LPMSK+8_^1_%STA* IS_^1_%LDA* WORD1_^1_%AND- LPMSK+8_^1_%STA* WAS_^1_%EOR* IS_^1_%SAZ CHK2-*-1_$CHECK COLUMN N+2_^1_%ENQ 2_^1_%RTJ* DATERR_'DATA ERROR COLUMN N+2_^1CHK2_!RAO* GRPIND_'INCREMENT WORD COUNTER_^1_%LDA* ISAVE_^1_%STA-€€ I_,RESTORE THE I REGISTER_^1_%JMP* (CHKERR)_^1*_]_^1DATERR 0_"0_,FORM DATA ERROR MESSAGE_^1_%RAO ERRCTR_^1_%RAO* CMP1_P84_^1_%LDA* CMP1_P84_^1_%INA -4_R84_^1_%SAM DATER1_N84_^1_%JMP* DAT1_P84_^1DATER1 LDA* GRPIND_N84_^1_%ADD* FADD1_(EXTRA WORD IF FORMATTED I/O_^1_%ALS 1_,MULT BY 2_^1_%AAQ A_^1_%CLR Q_^1_%DVI- TEN_*CONVERT TO DECIMAL_^1_%ADD =A 0_^1_%STA COLNUM_'SAVE FRAME €€NO._^1_%QLS 8_^1_%ADQ =A0_^1_%STQ COLNUM+1_^1_%LDA* IS_+FORMAT DATA MESSAGE_^1*_81 CARD DELETED_884_^1_%RTJ (RHXASC)_^1_%ADC (ACTUAL-*)_^1_%LDA ACTUAL_^1_%AND- LPMSK+8_^1_%EOR- ONEBIT+13_^1_%STA ACTUAL_^1_%LDA* WAS_^1_%ALS 4_^1_%RTJ (RHXASC)_^1_%ADC (EXPCTD-*)_^1_%LDA EXPCTD+1_^1_%AND- NZERO+8_^1_%EOR- ONEBIT+5_^1_%STA EXPCTD+1_^1_%RTJ CKFLAG_'CHECK IF ERROR MESSAGES I€€NHIBITED_^1_%JMP* DAT1_)YES_^1_%RTJ (MESAGE)_$NO, OUTPUT DATA ERROR MESSAGE_^1MES9_!NUM $0344_^1_%ADC (START-MES9)_^1_%NUM 3_^1_%ADC MSG34B-MES9_^1_%ADC MSG34E-MSG34B_^1_%ADC MSG35B-MES9_^1_%ADC MSG35E-MSG35B_^1DAT1_!LDA* ISAVE_^1_%STA- I_,RESTORE 'I' REGISTER_^1_%JMP* (DATERR)_^1WAS_"NUM 0_^1IS_#NUM 0_^1ISAVE NUM 0_^1CMP1_!NUM 0_,OVER 4 ERROR AN ERROR MSG IS NOT GENER€€ATED_^1_%SPC 5_^1CONVRT NUM 0_,CONVERT A REGISTER TO DECIMAL_^1_%TRA Q_^1_%SUB =N$270F_%CHECK IF VALUE .GT. 9999_^1_%SAP GOWAY_(YES - LEAVE IN HEX FORM_^1_%TRQ A_,NO - GO CONVERT_^1_%RTJ (ROCDEC)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%SPC 3_^1************************************************************************_^1*_]_'*_^€€1*_8TERMINATION SEQUENCE_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDCK 0_"0_^1_%RAO* REPEAT_^1_%LDA RECS_^1_%SAM ENDCK1-*-1_"CHECK FOR INFINITE RUNS REQUESTED_^1_%SAZ ENDMSG-*-1_"CHECK FOR ZERO RUNS REQUESTED_^1_%SUB* REPEAT_^1_%SAZ ENDMSG-*-1_"CHECK FOR NUMBER OF RUNS REQUESTED,COMPLETED_^1ENDCK1 JMP* (ENDCK)_^1*_]_^1EN€€DMSG LDA* REPEAT_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES10 NUM $8144_^1_%ADC MSG3B-MES10_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_^1_%AND- ONEBIT+6_#CHECK FOR STOP TO RE-ENTER PARAMETERS_^1_%SAZ END1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END1_!LDA START€€+1_%CLEAR TEST NAME FROM PGM STACK,RELEASE CORE_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF 14,BEGIN PAPER TAPE READER TEST_^1_%NU€€M $D00_^1_%NUM 0000_)PAD FOR SLAVE PRINTER_^1_%ALF *,DLU,SECTIONS,RECDS*_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF 14,END PAPER TAPE READER TEST,_^1RUNASC NUM 0,0_^1_%ALF 3, RECS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG3E(*)_^1MSG9B ALF $,SPECIAL PATTERN $_A84_^1_%EQU MSG9E(*)_^1MSG10B ALF 4,TIME OUT_^1_%EQU MSG10E(*)_^1MSG11B €€ALF 3,ALARM_^1_%EQU MSG11E(*)_^1MSG12B ALF 6,PARITY ERROR_^1_%EQU MSG12E(*)_^1MSG13B ALF $,CHECKSUM ERROR$_^1_%EQU MSG13E(*)_^1MSG14B ALF $,INTERNAL REJECT$_^1_%EQU MSG14E(*)_^1MSG15B ALF $,EXTERNAL REJECT$_^1_%EQU MSG15E(*)_^1MSG18B ALF 4,NOT RDY_^1_%EQU MSG18E(*)_^1MSG19B ALF 2,BUSY_^1_%EQU MSG19E(*)_^1MSG22B ALF $, BACKWARD MOTION $_^1_%EQU MSG22E(*)_^1MSG34B ALF€ $, SEC $_^1SNUM_!NUM 0_^1_%ALF 2,REC_^1ERRPAS NUM 0,0,$2020_^1_%EQU MSG34E(*)_^1MSG35B ALF 8,DATA ERROR FRAME_^1COLNUM NUM 0,0_^1_%ALF 3,ACTUAL_^1ACTUAL NUM 0,0_^1_%ALF 5, EXPECTED_^1EXPCTD NUM 0,0_^1_%EQU MSG35E(*)_^1_%EQU END(*)_^1_%END 0_^__PSCMRLY CSY/ B72 P€1_%NAM SCMRLY_'DECK-ID B72 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^€€1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_$SCMRLY IS A DIAGNOSTIC EXERCISER FOR THE 1555 REGISTER_^1*_$RELAYS AND/OR 1555 POWER DRIVER OUTPUTS AND THE 1544 DIGITAL_^1*_$INPUT SUBSYSTEMS. IT OPERATES UNDER THE CONTROL OF THE DIAG-_^1*_$NOSTIC SUPERVISOR "SCMEXC". BEFORE TEST EXECUTION IS_^1*_$STARTED, T€€HE USER IS REQUESTED TO INPUT THE TEST PARAMETERS_^1*_$-- LU OF THE 1555, LU OF THE 1544, TEST SECTIONS TO RUN,_^1*_$SWITCH (0 = NORMAL, 1 = REVERSE),_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS_^1*_$TO BE EXECUTED. THE LOGICAL UNIT IS CHECK FOR ITS VALIDITY_^1*_$AND IF INVALID THE REQUEST IS REPEATED. IF THE LOGICAL UNIT IS_^1*_$ENTERED INCORRECTLY THREE TIMES, THE TEST IS TERMINATE€€D._^1*_$LOGICAL UNIT 0 IS USED IF THIS IS A LOCAL TEST. LOGICAL_^1*_$UNIT NON 0 INDICATES TO THE TEST THIS IS A REMOTE TEST._^1*_$NEXT THE USER IS REQUESTED TO INPUT THE CABLING INFORMATION._^1*_$(IE. WHICH 1555 CHNLS ARE CABLED TO WHICH 1544 CHNLS) IF NO_^1*_$CHANNEL INFORMATION IS ENTERED, THE REQUEST IS REPEATED._^1*_$ONLY 16 SETS OF CHANNELS CAN BE TESTED AT ONE TIME._^1*_$SCMR€€LY_^1*_$IS DIVIDED INTO FIVE TEST SECTIONS (TESTS) AS FOLLOWS:_^1*_$SECTION 1_)$FF ON ONE CHANNEL, ALL OTHERS $00_^1*_$SECTION 2_)$00 ON ONE CHANNEL, ALL OTHERS $FF_^1*_*SECTION 3_!USER INPUT ON ONE CHANNEL, ALL OTHERS $0000_^1*_*SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL,_^1*_8ALL OTHERS $00_^1*_*SECTION 5_!LEFT SHIFTING ZERO BIT ON ONE CHANNEL,_^1*_8ALL OTHERS $FF_^1*_$THE S€€ECTION NUMBER IS EQUIVALENT TO THE BIT NUMBER,_^1*_1BIT 1 = 1 DO SECTION 1_^1*_1BIT 2 = 1 DO SECTION 2_^1*_1BIT 3 = 1 DO SECTION 3_^1*_1BIT 4 = 1 DO SECTION 4_^1*_1BIT 5 = 1 DO SECTION 5_^1*_$IF SECTION THREE IS REQUESTED, THE USER IS REQUESTED TO_^1*_$INPUT THE SPECIAL PATTERN TO BE USED WHEN THAT SECTION IS_^1*_$EXECUTED. AFTER EACH I/O OPERATION THE HARDWARE IS CHECKED_^1*_$FOR €€ERRORS. IF ERRORS OCCURRED, A MESSAGE IS OUTPUT. AFTER_^1*_$THE COMPLETION OF THE INPUT OPERATION, A DATA COMPARE CHECK_^1*_$IS DONE IF NO HARDWARE ERRORS OCCURRED. A MESSAGE IS OUTPUT_^1*_$FOR EACH DATA ERROR. AT THE END OF EACH TEST SEQUENCE, A_^1*_$PASS COUNTER IS UPDATED AND COMPARED AGAINST THE NUMBER OF_^1*_$TIMES REQUESTED BY THE USER. IF EQUAL, THE TEST IS TERM-_^1*_$INATED€€. THE STOP FLAG IS ALSO CHECKED AND IF SET THE TEST_^1*_$IS TERMINATED. IF $8000 IS ENTERED FOR THE NUMBER OF EXECU-_^1*_$TIONS, THE TEST SEQUENCE WILL BE EXECUTED INDEFINITELY._^1*_$AN ERROR DETECTED BY THE DRIVER PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_$SCMRLY TEST (1) RUN (2) 15XX CHL (3) STATUS ERROR (4)_^1*_]_^1*_$WHEREAS A DATA ERROR PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_€€$SCMRLY TEST (1) RUN (2) OUT CHNL (5) IS (6) IN CHNL (7) IS (8)_^1*_]_^1*_$WHERE ,_^1*_]_^1*_$(1) DECIMAL NUMBER OF TEST CURRENTLY BEING EXECUTED._^1*_$(2)_$DECIMAL NUMBER OF CURRENT PASS._^1*_$(3) CHANNEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(4) PRINTOUT OF STATUS (EXPLAINED BELOW)_^1*_$(5) 1555 CHANNEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(6) IMAG€€E OUTPUT._^1*_$(7) 1544 CHANNEL INDEX IF LOCAL , OR CHANNEL ADDRESS IF REMOTE._^1*_$(8) DIGITAL INPUT._^1*_$XX_!44 OR 55 TO DESIGNATE EQUIPMENT._^1*_]_^1*_$THE STATUS (4) HAS THE FOLLOWING MEANINGS_^1*_]_^1*_$DIRECT IOM SYSTEM_^1*_,8001 = INTERNAL OR EXTERNAL REJECT_^1*_]_^1*_$REMOTE IOM SYSTEM_^1*_,7FFF = EXTERNAL OR INTERNAL REJECT ON LOCAL UNIT._^1*_,BIT 13 = RECEIVE ERROR ON €€LOCAL CONTROL UNIT._^1*_,BIT 12 = RECEIVE ERROR ON REMOTE CONTROL INPUT UNIT._^1*_,BIT 10 = INTERNAL REJECT ON REMOTE CONTROL UNIT._^1*_,BIT 9 = EXTERNAL REJECT ON REMOTE CONTROL UNIT._^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1******************************************************************€€******_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%EQ€€U ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU ZROBIT($33)_!START OF ZERO BIT TABLE_^1_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATOR_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1*_]_^1_%EQU DIAGLU(25)_"LO€€CATION IN PHYTAB OF DIAGNOSTIC L.U._^1_%EQU ERCODE(26)_"LOCATION IN PHYTAB FOR ALTDEV ERROR CODE_^1_%EQU TSTRLY(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTRLY_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATION REGION_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START AL€€F 3,TSTRLY_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 2_^1***********************************************************€€*************_^1*_]_'*_^1*_:INPUT PARAMETERS_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1ENTER1 RTJ* (MESAGE)_$OUTPUT INITIAL MSG_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET FIRST SET OF PARAMETERS_^1INI11 RTJ* (GETFLD)_^1_%INQ -1_^1_%STA LU,Q€€_)SAVE CONTROL WORDS_^1_%INQ -4_^1_%SQZ INI12-*-1_^1_%JMP* INI11_^1INI12 LDA RUNS_^1_%SAM 1_,IF 8000 SKIP CONVERT_^1_%RTJ* (RDECHX)_^1_%STA RUNS_^1_%LDA LU2_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA LU1544_^1_%LDA LU_+CONVERT LU IN_^1_%RTJ* (RDECHX)_^1_%STA LU1555_^1_%SAZ INI20_(SEE IF REMOTE OR LOCAL UNIT_^1_%LDA LU1544_'THIS LU HAS TO BE REMOTE_^1_%SAN INI121_'BOT€€H LU'S ARE REMOTE_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE LOCAL_^1INI20 LDA LU1544_^1_%SAZ INI120_'BOTH LU'S ARE LOCAL_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE LOCAL_^1INI120 JMP* INI15_(LOCALS DON'T HAVE A PHYSTAB_^1INI121 TRA Q_^1_%LDQ+ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$2F0_'TUPE CODE FOR 1544_^1_%SAZ INI13_^1_%JMP* INI14_^1INI13€€ LDQ LU1555_'PICK UP LU NUMBER_^1_%LDQ+ LOG1A,Q_%PICKUP PHYSTAB ADDRESS_^1_%STQ* PHYLO2_'SAVE PHYSTAB ADDRESS_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$310_(TYPE CODE FOR 1555_^1_%SAN 1_^1_%JMP* INI15_^1INI14 RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG10B-MES2_^1_%ADC MSG10E-MSG10B_^1_%LDA* INPERR_%IS €€THIS THE THIRD L.U. ERROR_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1PHYLOC NUM 0_^1PHYLO2 NUM 0_,TEMP HOLD FOR PHYSTAB ADDRESS_^1INPERR NUM 0_^1*_]_^1INI15 CLR A_^1_%STA NUMCHN_^1_%RTJ* (MESAGE)_^1MES3_!NUM $8144_^1_%ADC MSG2B-MES3_^1_%ADC MSG2E-MSG2B_^1INI21 ENQ 0_^1_%RTJ* (INFOIN)_$GET CHNL INFORMATION_^1_%SQP INI22-*-1_#CK FOR TTY €€ERROR_^1_%JMP* INI15_^1INI22 RTJ* (GETFLD)_^1_%SAP NFFFF_)NOT FFFF_^1_%JMP* INI24_(ITS A FFF NO MORE CHANLS_^1NFFFF STQ- I_,SAVE Q_^1_%LDQ LU_+SEE IF LOCAL_^1_%SQN 3_-REMOTE_^1_%AND =N$0FFF_%WANT EQUIP-MOD-SLOT **LOCAL**_^1_%JMP* CK2_^1_%AND =N$00FF_%REMOTE ONLY WANT MOD-SLOT_^1CK2_"LDQ- I_,RESTORE Q_^1_%INQ -2_+CK FOR SECOND FIELD_^1_%SQZ INI23-*-1_^1_%SAM INI24-*-1_^1_€€%LDQ NUMCHN_^1_%STA OUTCHN,Q_'CHANNEL NUMBER._^1_%JMP* INI22_^1INI23 LDQ NUMCHN_'TO HERE IF SECOND FIELD_^1_%STA INCHN,Q_%STORE INPUT CHNL NUM._^1_%RAO NUMCHN_^1_%INQ -15_*CK FOR 16 CHANNELS._^1_%SQZ INI24-*-1_^1_%JMP* INI21_^1INI24 LDA NUMCHN_'CK FOR NO CHNLS SPECIFIED._^1_%INA -1_^1_%STA NUMCHN_^1_%SAP INI31_^1_%JMP ENDMSG_'NO CHANNELS SPECIFIED EXIT_^1INI31 LDA* T€€ESTS_(IF TEST 3 IS REQUESTED GET SPECIAL PATTERN_^1_%AND- ONEBIT+3_^1_%SAZ INI32-*-1_^1_%RTJ (MESAGE)_$INPUT SPECIAL PATTERN_^1MES4_!NUM $8144_^1_%ADC MSG7B-MES4_^1_%ADC MSG7E-MSG7B_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1_%RTJ (GETFLD)_%INPUT SPECIAL PATTERN_^1_%AND =N$00FF_%AND OFF UPPER BITS ONLY WANT 0 THROUGH 7_^1_%STA* SPCPAT_^1INI32 CLR A_^1_%STA PASSES_^1_%STA ERRCTR_^1_%€€SPC 2_^1************************************************************************_^1*_]_'*_^1*_$SECTION 1_"$FF ON ONE CHANNEL, ALL OTHERS $0000_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TESTS_(IS TEST 1 REQUESTED_^1_%AND- ONEBIT+1_^1_%SAZ T2CK-*-1_^1TEST1 LDA =N$2031_%BEGIN TEST 1_^1_%STA TNUM_^1_%CLR A_^1_%RT€€J* FXIMAG_'SET ALL REGISTERS TO ZERO._^1_%LDA =N$00FF_^1_%STA PATT1_^1_%CLR A_.SAMPAT._^1_%STA PATT2_^1_%RTJ SAMPAT_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$SECTION 2 $0000 ON ONE CHANNEL, ALL OTHERS $FF_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* TESTS_(I€€S TEST 2 REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEGIN TEST 2_^1_%STA TNUM_^1_%SET A_,SET ALL REGISTERS_^1_%RTJ* FXIMAG_)TO FFFF._^1_%CLR A_,FIX IMAGE_^1_%STA* PATT1_*PARAMETERS_^1_%LDA =N$00FF_^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_!SECTION 3_!€€USER INPUT PATTERN ON ONE CHANNEL, ALL OTHERS $0000_"*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* TESTS_(IS TEST3 REQUESTED_^1_%AND- ONEBIT+3_^1_%SAN TEST3_^1_%JMP* T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA TNUM_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA* SPCPAT_'8 BIT PATTERN_^1_%STA* PATT1_(FIX IMAGE PARAMETERS FOR€€_^1_%CLR A_.SAMPAT._^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1* SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL, ALL OTHERS $0000 *_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA* TESTS_(IS TEST 4 REQUESTED_^1_%AND- ONEBIT+4_^1_%SAN TE€€ST4-*-1_^1_%JMP* T5CK_^1*_]_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA TNUM_^1_%CLR A_,SET ALL REGISTERS_^1_%RTJ* FXIMAG_)TO ZERO._^1_%LDA- ONEBIT+15_#GET FIRST IMAGE, $8000._^1_%STA IMAGE1_^1_%RTJ* CRCBIT_^1_%SET A_^1_%RTJ* FXIMAG_^1_%LDA- ZROBIT+15_#GET SECOND IMAGE, $7FFF._^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%SPC 2_^1**********************************************************€€**************_^1*_]_'*_^1* SECTION 5_!LEFT SHIFTING ZERO BIT ON ONE CHANNEL, ALL OTHERS $FFFF *_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA* TESTS_(IS TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAN TEST5-*-1_^1_%JMP ENDTST_^1TEST5 LDA =N$2035_%BEGIN TEST 5_^1_%STA TNUM_^1_%SET A_^1_%RTJ* FXIMAG_^1_%LDA- ZROBIT+15_#G€€ET FIRST IMAGE, $7FFF_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA- ONEBIT+15_#GET SECOND IMAGE, $8000_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%JMP ENDTST_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1LU2_"NUM 0_^1TESTS NUM 0_^1SWITCH NUM 0_^1RUNS_!NUM 0_^1SPCPAT NUM 0_^1_%SPC 2_^1************************************************************************_^€€1*_]_'*_^1*_2SET ALL CHNLS TO DESIRED PATTERN_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1FXIMAG 0_"0_^1_%LDQ* NUMCHN_'FILL TABLE OF OUTPUT_^1FX1_"STA PATOUT,Q_'IMAGES WITH PATTERN_^1_%INQ -1_-IN A-REG._^1_%SQM FX2-*-1_^1_%JMP* FX1_^1FX2_"CLR Q_,SET ALL REGISTERS_^1_%TCQ A_^1_%RTJ* DIGIO_^1_%JMP* (FXIMAG)_^1_%SPC 2_^1_%S€€PC 2_^1************************************************************************_^1*_]_'*_^1*_.COMMOM ROUTINE FOR SHIFTING PATTERN I/O_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CRCBIT 0_"0_^1CIRC1 RTJ* POUTLD_'SET UP PATOUT._^1_%LDQ* BEGCHN_^1_%LDA TNUM_)SET-UP PARAMETERS FOR_^1_%AND- ONEBIT_)REG. I/O._^1_%SAZ CIRC2-*-1_^€€1_%TRQ A_,FOR TEST 5._^1_%INA -1_^1_%JMP* CIRC3_^1CIRC2 TRQ A_^1CIRC3 RTJ* DIGIO_^1_%RTJ CHKREG_^1_%LDA* BITCTR_'CK FOR LAST BIT POSITION._^1_%INA -8_+HAVE WE REACHED THE 8 BIT POSITION_^1_%SAZ CIRC4-*-1_^1_%JMP* CIRC1_^1CIRC4 STA* BITCTR_^1_%LDQ* BEGCHN_'REINITIALIZE CURRENT_^1_%LDA* IMAGE1_)CHANNEL IMAGE._^1_%AND- LPMSK+7_^1_%SAZ CIRC5-*-1_^1_%LDA =N$00FF_%SA_^1CIRC5 €€STA PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* BEGCHN_'CK FOR LAST CHANNEL_^1_%SUB* NUMCHN_^1_%SAZ CIRC6-*-1_#NO, INCREMENT_^1_%RAO* BEGCHN_)COUNTER_^1_%JMP* CIRC1_^1CIRC6 STA* BEGCHN_'YES, ZERO COUNTER._^1_%JMP* (CRCBIT)_^1*_]_^1PATT1 NUM 0_^1PATT2 NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_+SHIFT DATA PATERN AN€€D STORE IN OUTPUT TABLE_.*_^1*_]_'*_^1_%SPC 2_^1POUTLD 0_"0_^1_%LDA* IMAGE1_'GET OLD IMAGE_^1_%ALS 1_.AND SHIFT LEFT._^1_%STA* IMAGE1_^1_%LDQ* BEGCHN_'GET COUNTER._^1_%AND =N$00FF_%SAVE ONLY THE LOWEER 8 BITS_^1_%STA PATOUT,Q_$STORE CURRENT IMAGE FOR_^1_%RAO* BITCTR_'INCREMENT BIT COUNTER_^1_%JMP* (POUTLD)_^1*_]_^1_%BZS OUTCHN(16)_^1_%BZS INCHN(16)_^1*_]_^1NUMCHN NUM 0_^1BEG€€CHN NUM 0_^1CURCHN NUM 0_^1ENDCHN NUM 0_^1BITCTR NUM 0_^1IMAGE1 NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0COMMON I/O ROUTINE FOR ALL SECTIONS_1*_^1*_]_'*_^1************************************************************************_^1************************************************************************_^1*_#RELAYS €€ARE SET UP IN FXIMAG THEN ONE CHANL AT A TIME THE DESIRED_^1*_"PATTERN IS OUTPUTTED THEN ALL THE CHANNELS ARE READ IN. SO FOR_^1*_"EXP. CHANLS 1 THROUGH 3 ARE SET TO ZERO BY FXIMAG THEN WHEN THIS_^1*_!ROUTINE (DIGIO) IS ENTERD AGAIN BY SAMPAT OR CRCBIT ONE CHANL IS SET_^1*_"TO A DESIRED PATTERN . SO NOW ONE CHANL IS SET TO THE DESIRED_^1*_"PATTERN AND ALL THE OTHERS ARE STILL SET €€TO ZERO OR WHATEVER FIXMAG_^1*_"SET THEM TOO. THE CHANL_^1*_"THAT WAS SET TO THE SPECIAL PATTERN IS RESET THEN THE TEST_^1*_"GOES TO THE NEXT CHANL AND SO ON UNTILL ALL THE CHANLS ARE DONE._^1************************************************************************_^1_%SPC 2_^1DIGIO 0_"0_^1_%STQ* CURCHN_'Q-REG. HAS BEG. CHANNEL._^1_%SAP DIO1A-*-1_^1_%LDA* NUMCHN_^1DIO1A STA* EN€€DCHN_'A-REG. HAS LAST CHANNEL._^1DIO1_!LDQ* CURCHN_'GET CHANNEL INDEX._^1_%LDA* PATOUT,Q_$GET IMAGE FOR OUTPUT._^1_%STA* IMAGE_^1_%LDA* OUTCHN,Q_^1_%AND- LPMSK+15_^1_%STA* OUTCHN,Q_$CLEAR ERROR FLAG_^1_%STA* DATABL_^1_%LDA* LU1555_^1_%SAN RIOMO_(SKIP IF REMOTE._^1_%LDQ* DATABL_^1_%LDA* IMAGE_^1*_]_^1_%OUT REJECT-*_^1_%JMP* COMPL_(NO ERRORS LOOK ANYWAY_^1REJECT NOP 0_^1_%LDQ =N$€€8001_%SET AN INT OR EXT ERROR FLAG INDICATION_^1_%JMP* COMPL_(GO PROCESS ERROR_^1*_]_^1RIOMO RTJ- (AMONI)_^1REF1_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMPL-REF1_"TO SPECIFIED REGISTER._^1_%ADC 0_^1LU1555 NUM 0_,LOGICAL UNIT HERE._^1_%NUM 1_^1_%ADC DATABL-REF1_^1_%JMP- (ADISP)_^1DATABL NUM 0_^1IMAGE NUM 0_,REGISTER BIT IMAGE._^1COMPL RTJ ERRCK1_'CK FOR ERROR ON OUTPUT._^1OK€€_#LDA* CURCHN_'CK FOR LAST CHANNEL_^1_%SUB* ENDCHN_^1_%SAN DIO2-*-1_^1_%STA* CURCHN_'ZERO CURCHN ON COMPLETION_^1_%JMP* DIO4_+OUTPUT._^1DIO2_!LDA* CURCHN_'CK FO LAST CHANNEL_^1_%SUB* NUMCHN_)ADDR._^1_%SAN DIO3-*-1_^1_%STA* CURCHN_'ZERO CURCHN AND CONTINUE_^1_%JMP* DIO1_+OUTPUT._^1DIO3_!RAO* CURCHN_'INCREMENT CHANNEL_^1_%JMP* DIO1_+COUNTER AND CONTINUE._^1*_]_^1*_%MAKE A TIMER CAL€€L FOR RELAY TO SET UP_^1*_]_^1DIO4_!RTJ- (AMONI)_%MAKE A TIMER CALL FOR RELAYS TO SET UP_^1TIME_!NUM $1104_^1_%ADC CNTINU-TIME_^1_%NUM 2_^1_%JMP- ($EA)_^1*_]_^1*_]_^1CNTINU LDQ* CURCHN_^1_%LDA* INCHN,Q_%GET CHANNEL ADDRESS._^1_%AND- LPMSK+15_^1_%STA* INCHN,Q_^1_%STA* TABL2_^1_%LDA* LU1544_^1_%SAN RIOMI_(SKIP IF REMOTE_^1_%LDQ* TABL2_^1*_]_^1_%INP REJCT2-*_^1_%JMP* COMP3_^1REJC€€T2 NOP 0_^1_%LDQ =N$8001_%STUFF AN INT OR EXT REJECT INDICATION_^1_%JMP* COMP3_^1*_]_^1RIOMI RTJ- (AMONI)_%CALL FOR REMOTE DIGITAL INPUT._^1REF2_!ADC 1*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP2-REF2_^1_%ADC 0_^1LU1544 NUM 0_^1_%NUM 1_^1_%ADC TABL2-REF2_^1_%JMP- (ADISP)_^1TABL2 NUM 0_,INDEX OR W E S._^1DATAIN NUM 0_,DIGITAL INPUT WORD._^1COMP2 LDA* DATAIN_^1COMP3 STQ* SAVEQ_^1€€_%LDQ SWITCH_'STORE COMPLEMENT OF_^1_%SQZ DIO4A-*-1_%DIGITAL INPUT_^1_%TCA A_.IF SWITCH IS ON._^1DIO4A LDQ* CURCHN_^1_%STA* PATIN,Q_%STORE DIGITAL INPUT._^1_%LDQ* SAVEQ_^1_%RTJ ERRCK2_'CK FOR ERROR ON INPUT._^1_%LDA* CURCHN_'CK FOR LAST CHANNEL._^1_%SUB* NUMCHN_^1_%SAZ DIO5-*-1_^1_%RAO* CURCHN_'INCREMENT COUNTER._^1_%JMP* CNTINU_^1DIO5_!JMP* (DIGIO)_'RETURN._^1SAVEQ NUM 0_^€€1*_]_^1_%BZS PATOUT(16)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_,COMMOM ROUTINE FOR NON-SHIFTING PATTERN I/O_-*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1SAMPAT 0_"0_^1SAM1_!LDQ* SAMCHN_'SET CHANNEL IMAGE._^1_%LDA PATT1_^1_%STA* PATOUT,Q_^1_%TRQ A_,OUTPUT CURRENT_^1_€€%RTJ* DIGIO_*CHANNEL._^1_%RTJ* CHKREG_^1_%LDQ* SAMCHN_'GET CURRENT CHNL IMAGE._^1_%LDA PATT2_^1_%STA* PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* SAMCHN_'CK FOR LAST CHANNEL._^1_%SUB NUMCHN_^1_%SAZ SAM2-*-1_^1_%RAO* SAMCHN_^1_%JMP* SAM1_^1SAM2_!STA* SAMCHN_^1_%JMP* (SAMPAT)_^1SAMCHN NUM 0_^1_%SPC 2_^1************************************************************************_^1*_€€]_'*_^1*_7CHECK DATA FOR ERRORS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CHKREG 0_"0_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_$NO DATA CK IF CHL REJECT_^1_%SAP 1_^1_%JMP* CHK1_^1_%LDA INCHN,Q_%NO DATA CK IF CHL REJECT_^1_%SAP 1_^1_%JMP* CHK1_^1_%LDA* PATOUT,Q_$GET IMAGE OUT_^1_%STA* PAOUT_(STORE IN HOLD_^1_%LDA* PATIN,Q_%GET PA€€TTERN IN_^1_%LDQ =N$00FF_%USED TO HELP SET UP UPPER HALF OF PATTERN_^1_%LLS 8_,GET UPPER HALD OF PATTERN IN IN Q_^1_%TCQ Q_,COMPLEMENT Q BECAUSE TEST LEAD JUMPERS COMP_^1*_8LEMENTS THE UPPER HALF.AFTER COMPLEMENTING_^1*_8Q AND A SHOULD BE EQUAL IF NOT AN ERROR._^1*_]_^1_%ALS 8_^1_%STA* PAIN_)STORE PATTERN IN 8 BITS SAME AS PATTERN OUT_^1_%EAQ A_^1_%SAZ CMPOK_(COMPLEMENT IS O€€K_^1_%LDQ* CHNCTR_'THEY WERE NOT EQUAL_^1_%JMP* ERROR_^1CMPOK LDA* PAOUT_^1_%EOR* PAIN_)DOES PATTERN OUT = PATTERN IN_^1_%SAZ CHK1_)THEY EQUAL_^1_%LDQ* CHNCTR_'THEY DONT EQUAL ERROR CONDITION_^1ERROR RTJ* CMPERR_'COMPARE ERROR_^1CHK1_!LDA* CHNCTR_'CK FOR LAST CHANNEL._^1_%SUB NUMCHN_^1_%SAZ CHK2-*-1_^1_%RAO* CHNCTR_'INCREMENT COUNTER_^1_%JMP* CHKREG+1_^1CHK2_!STA* CHNCTR_'ZERO€€ COUNTER._^1_%JMP* (CHKREG)_$RETURN._^1CHNCTR NUM 0_^1*_]_^1_%BZS PATIN(16)_^1PAOUT NUM 0_,HOLD FOR PATTERN OUT_^1PAIN_!NUM 0_,HOLD FOR PATTERN IN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5OUTPUT DATA ERROR MESSAGE_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR €€0_"0_^1_%LDA* PATOUT,Q_$GET AND CONVERT_^1_%RTJ (RHXASC)_^1_%ADC (OLDPAT-*)_^1_%LDQ* CHNCTR_'GET AND CONVERT_^1_%LDA* PATIN,Q_(INPUT VALUE._^1_%RTJ (RHXASC)_^1_%ADC (NEWPAT-*)_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_^1_%RTJ (RHXASC)_^1_%ADC (CHAN1-*)_^1_%LDQ* CHNCTR_^1_%LDA INCHN,Q_^1_%RTJ (RHXASC)_^1_%ADC (CHAN2-*)_^1_%RTJ* INIMSG_^1_%JMP* (CMPERR)_^1_%RTJ (MESAGE)_$OUTPUT COM€€PARE ERROR MSG_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG11B-MES5_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1CMP1_!JMP* (CMPERR)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3CHECK FOR 1555 HARDWARE ERRORS_3*_^1*_]_'*_^1******************************************************************€€******_^1_%SPC 2_^1ERRCK1 0_"0_^1_%LDA LU1555_^1_%SAN RIOM1_(SKIP IF REMOTE._^1_%JMP* LOCL1_^1RIOM1 LDQ PHYLO2_'PHYSTAB ADDRESS_^1_%LDA- ESTAT2,Q_$HARDWARE STATUS_^1_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB =N$0600_^1_%SAN FLG1_)SKIP IF ERROR._^1_%JMP* ERR11_^1LOCL1 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR11_^1_%STQ* ERRBIT_^1FLG1_!LDQ CURCHN_^1_%LDA €€OUTCHN,Q_^1_%EOR- NZERO+15_$SET BIT 15 FOR ERROR FLAG_^1_%STA OUTCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR11_^1_%LDA DATABL_^1_%RTJ* CHLMSG_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES6_!NUM $0444_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG4B-MES6_^1_%ADC MSG4E-MSG4B_^1_%ADC MSG8B-MES6_^1_%ADC MSG8E-MSG8B_^1ERR11 RTJ* ENDCK_^1_%JMP* (ERRCK1)€€_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3CHECK FOR 1544 HARDWARE ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCK2 0_"0_^1_%LDA LU1544_^1_%SAN RIOM2_(SKIP IF REMOTE._^1_%JMP* LOCL2_^1RIOM2 LDQ PHYLOC_'PHYS TAB ADDRESS._^1_%LDA- ESTAT2,Q_$HARDWARE STATUS._^1€€_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB =N$0600_^1_%SAN FLG2_)SKIP IF ERROR_^1_%JMP* ERR22_^1LOCL2 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR22_^1_%STQ* ERRBIT_^1FLG2_!LDQ CURCHN_'CURRENT CHANNEL INDEX._^1_%LDA INCHN,Q_^1_%EOR- NZERO+15_$SET ERROR BIT._^1_%STA INCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR22_^1_%LDA TABL2_^1_%RTJ* CHLMSG_^1_%RTJ (MESAGE)_$OUTPUT €€MESSAGE_^1MES7_!NUM $0444_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%ADC MSG11B-MES7_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG6B-MES7_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG8B-MES7_^1_%ADC MSG8E-MSG8B_^1ERR22 RTJ* ENDCK_^1_%JMP* (ERRCK2)_^1*_]_^1*_]_^1ENDCK 0_"0_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN 1_^1_%JMP* (ENDCK)_^1_%JMP* ENDMSG_^1_%EJT_]_^1******************************€€******************************************_^1*_]_'*_^1*_1OUTPUT CHANNEL PLUS HARDWARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_]_^1CHLMSG 0_"0_^1_%RTJ (RHXASC)_^1_%ADC (REJCHL-*)_^1_%LDA* ERRBIT_^1_%RTJ (RHXASC)_$INSTALL STATUS IN MESSAGE._^1_%ADC (STATUS-*)_^1_%JMP* (CHLMSG)_^1ERRBIT NUM 0_^1_%SPC 2_^1*******€€*****************************************************************_^1*_]_'*_^1*_1OUTPUT CURRENT TEST AND PASS NUMBER_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INIMSG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN INIMS1-*-1_^1_%RAO* INIMSG_^1_%LDA PASSES_^1_%INA 1_-PASSES HASNT BEEN UP€€DATED YET_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^1ERRCTR NUM 0_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG SET€€._^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA RUNS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_'OUTPUT END MESSAGE_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA* ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESSAGE_^1€€MES8_!NUM $8144_^1_%ADC MSG3B-MES8_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_)CK FOR STOP TO RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$CLEAR TEST NAME FROM PGM STACK, RELEASE CORE_^1_%ADC (START-*)_^1_%EJT_]_^1***********************************€€*************************************_^1*_]_'*_^1*_;MESSAGE BUFFERS_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF 10,BEGIN 1555/1544 TEST_^1_%NUM $D00_^1_%ALF 18,OUT LU,IN LU,TESTS,SWITCH,RUNS_^1_%EQU MSG1E(*)_^1MSG2B ALF $,OUT CHANL EQUIP-MOD-SLOT, IN CHANL EQUIP-MOD-SLOT$_^1_%NUM $D00_^1_%EQU MSG2E(*)_^1MSG€€3B ALF 10,END 1555/1544 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS._^1_%EQU MSG3E(*)_^1MSG4B ALF 3, 1555_^1_%EQU MSG4E(*)_^1MSG5B ALF 5, OUT CHNL_^1CHAN1 NUM 0,0_^1_%ALF 2, IS_^1OLDPAT NUM 0,0_^1_%ALF 5, IN CHNL_^1CHAN2 NUM 0,0_^1_%ALF 2, IS_^1NEWPAT NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 3, 1544_^1_%EQU MSG6E(*)_^1MSG7B ALF €813,SPECIAL PATTERN FOR TEST 3_^1_%EQU MSG7E(*)_^1MSG8B ALF 2,CHL_^1REJCHL NUM 0,0_^1_%ALF 7, STATUS ERROR_^1STATUS NUM 0,0_^1_%EQU MSG8E(*)_^1MSG10B ALF 5, LU ERROR_^1_%EQU MSG10E(*)_^1MSG11B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG11E(*)_^1_%EQU END(*)_^1_%END_]_^__ 8PSCMSAU CSY/ B73 P€1_%NAM SCMSAU_'DECK-ID B73 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1****_]_^1*_$1 5 7 6_"S T A L L_"A L A R M_"T E S T_^1_%SPC 4_^1* ****************************************************************_^1*_]_^1*_5TEST DESCRIPTION_^1*_]_^1* ***************€€*************************************************_^1_%SPC 2_^1*_$SCMSAU IS A DIAGNOSTIC TEST FOR THE 1576-1,2 STALL ALARM UN_^1*_$SCMSAU RUNS UNDER CONTROL OF THE SMALL COMPUTER MAINTENANCE_^1*_$MONITOR SCMEXC._^1*_$OPERATOR PARAMETER ENTRY_^1*_]_^1*_)TESTS,RUNS,CPU TYPE_^1*_8TESTS_^1*_:BIT 1=1 TEST 1 FUNCTION AND STATUS_^1*_:BIT 2=1 TEST 2 COUNTER OVERFLOW STALL_^1*_:BIT 3=1 TE€€ST 3 POWER FAIL STALL_^1*_:BIT 4=1 TEST 4 FIELD STALL_^1*_8RUNS IN DECIMAL_^1*_:NON TERMINATING IF ENTERED AS 8000_^1*_8CPU TYPE_^1*_:0=1704,1714_^1*_:1=1774_^1*_:2=1784-1_^1*_:3=1784-2_^1*_:4=MP17_^1*_)INT LINE,WEMS,JUMPER_^1*_8INT LINE FOR 1576 IN DECIMAL_^1*_8WEMS FOR 1576_^1*_8JUMPER_^1*_:=0 IF OUT_^1*_:=1 IF IN_^1*_]_^1*_$INTERRUPT LINE NUMBER AND CPU TYPE ARE VERIFIED AS BE€€ING_^1*_$WITHIN LEGAL RANGE._^1*_$AT COMPLETION OF TEST SECTIONS AND AT EACH ERROR, A CHECK I_^1*_$MADE FOR STOP FLAG AND IF SET,TEST IS TERMINATED. AT THE E_^1*_$OF EACH SEQUENCE, A PASS COUNTER IS UPDATED AND COMPARED TO_^1*_$THE NUMBER OF TIMES REQUESTED BY USER. IF EQUAL, THE TEST_^1*_$TERMINATED._^1****_]_^1_%EJT_]_^1* ********************************************************€€********_^1*_]_^1*_5EQUIVALENCES_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1_%EQU LPMSK(2)_$START OF LOWER BIT MASKS_^1_%EQU NZERO($12)_"LOCATION OF NEGATIVE ZERO + START OF UPP_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%EQU ONEBIT($23)_!START OF ONE BIT MASKS_^1_%EQU ZROBIT($33)_!START OF ZERO BIT MASKS_^1_%EQU TEN($46)_$LOCATION CON€€TAINING TEN_^1_%EQU ADISP($EA)_"LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"LOCATION OF ADDRESS OF MONITOR_^1_%EQU FRC($200)_#REQUEST WORD -REQUEST CODE- LOCATOR_^1_%EQU FX($100)_$REQUEST WORD -F- BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD -REQUEST PRIORITY- LOCATOR_^1_%EQU FCP($1)_%REQUEST WORD -COMPLETION PRIORITY- LOCAT_^1_%EQU LMSKT($B7)_^1_%EQU TSTSAU(*)_#ENT€€RY POINT FOR RCOS_^1_%ENT TSTSAU_^1_%EJT_]_^1* ****************************************************************_^1*_]_^1*_8COMMUNICATIONS REGION_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1START ALF 3,TSTSAU_$MNEUMONIC_^1_%ADC END-START_#LENGTH_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1FLAG_!NUM 0_,EXECUTION CONTROL WORD_^1INFOIN NUM 0€€_,SUBROUTINE LOCATIONS_^1GETFLD NUM 0_,FILLED AT EXECUTION TIME_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1* ****************************************************************_^1*_]_^1*_8INPUT TEST PARAMETERS_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1ENTER CLR A_,CLEAR COUNTERS AND FLAGS_^1_%STA €€REPEAT_^1_%STA ERRCTR_^1_%STA* INPERR_^1_%RTJ* (MESAGE)_$OUTPUT TEST TITLE_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENA 2_^1_%AND* FLAG_)CHECK FOR SETRUN FLAG_^1_%SAZ INI1-*-1_^1_%JMP* INI4_)USE SAME PARAMETERS_^1INI1_!RTJ* (MESAGE)_$REQUEST TESTS,RUNS,CPU TYPE_^1MES2_!NUM $8144_^1_%ADC MSG2B-MES2_^1_%ADC MSG2E-MSG2B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1INI2€€_!RTJ* (GETFLD)_^1_%INQ -1_^1_%STA* TESTS,Q_%STORE PARAMETERS_^1_%INQ -2_^1_%SQZ INI3-*-1_^1_%JMP* INI2_^1INI3_!LDA* RUNS_^1_%SAM INI3AA_^1_%RTJ* (RDECHX)_$CONVERT RUNS TO HEX_^1INI3AA STA* RUNS_^1_%RTJ* (MESAGE)_$REQUEST INT LINE, WEMS, JUMPER_^1MES3_!NUM $8144_^1_%ADC MSG2AB-MES3_^1_%ADC MSG2AE-MSG2AB_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1INI3A RTJ* (GETFLD)_^1_%INQ -1_^1_%STA*€€ INTLNE,Q_^1_%INQ -2_^1_%SQZ INI3C_^1_%JMP* INI3A_^1INI3C LDA* INTLNE_'CHECK INT LINE 2-15_^1_%RTJ* (RDECHX)_$CONVERT INT LINE TO HEX_^1_%STA* INTLNE_^1_%INA -2_^1_%SAP INI3E_^1_%JMP* INI3G_(BAD_^1INI3E INA -14_^1_%SAP INI3G_(BAD_^1_%JMP* INI3J_(OK_^1INI3G RAO* INPERR_^1_%RTJ* (MESAGE)_$INT LINE ERROR_^1MES4_!NUM $8144_^1_%ADC MSG4B-MES4_^1_%ADC MSG4E-MSG4B_^1_%JMP* IN€€I3P_^1INI3J LDA* CMPUTR_'CHECK CPU TYPE 0-5_^1_%SAP INI3L_^1_%JMP* INI3N_(BAD_^1INI3L INA -5_^1_%SAP INI3N_(BAD_^1_%JMP* INI4_^1INI3N RAO* INPERR_^1_%RTJ* (MESAGE)_$ERROR IN CPU TYPE_^1MES4A NUM $8144_^1_%ADC MSG4AB-MES4A_^1_%ADC MSG4AE-MSG4AB_^1INI3P LDA* INPERR_'IS THIS THIRD ERROR_^1_%INA -3_^1_%SAZ 1_^1_%JMP* INI1_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1*_]_^1*_$ST€€ART HERE IF SETRUN FLAG SET_^1*_]_^1INI4_!LDA* WEMS_)SET UP PROPER EQUIPMENT ADR_^1_%AND- ZROBIT+7_$REMOVE ST/FUNC BIT_^1_%STA DADR_^1_%EOR- ONEBIT+7_$ADD ST/FUNC BIT_^1_%STA FADR_^1_%RTJ* HERE_^1HERE_!NUM 0_^1_%LDA* CMPUTR_^1_%AND- LPMSK+3_^1_%TRA Q_^1_%LDA* ENATBL,Q_$CORRECT DELAY LOOP FOR CPU CYCLE TIME_^1_%STA AGAIN_^1_%LDA* QLSTBL,Q_^1_%STA LOOP_^1_%RTJ INTSAV_'SAVE OLD€€ MASK, DISABLE STALL INT_^1_%LDA- $EF_^1_%ADD =N$1300_^1_%STA* STRT+1_^1STRT_!RTJ- (AMONI)_%ALLOW M-REG TO BE RESET_^1_%NUM 0_^1_%ADC BEGIN-STRT-1_^1_%JMP- (ADISP)_^1*_]_^1TESTS NUM 0_,TEST SECTIONS TO BE RUN_^1RUNS_!NUM 0_,NUMBER OF TIMES FOR TEST TO BE RUN_^1CMPUTR NUM 0_,CPU TYPE_^1INTLNE NUM 0_,INT LINE NBR_^1WEMS_!NUM 0_,MODULE STATION ADDRESS_^1JUMPER NUM 0_,JUMPER€€ FLAG_^1*_]_^1INPERR NUM 0_,INPUT ERRORS_^1*_]_^1ENATBL ENA 98_+1704,1714_^1_%ENA 49_+1774_^1_%ENA 50_+1784-1_^1_%ENA 82_+1784-2_^1_%ENA 55_+MP17 (ASSUMES AVERAGE CYCLE TIME OF 0.9_^1*_]_^1QLSTBL QLS 6_,1704,1714_^1_%QLS 7_,1774_^1_%QLS 14_+1784-1_^1_%QLS 12_+1784-2_^1_%QLS 14_+MP17 (ASSUMES AVERAGE CYCLE TIME OF 0.9_^1_%EJT_]_^1* ****************************************€€************************_^1*_]_^1*_.SECTION 1 - FUNCTION AND STATUS TEST_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1BEGIN LDA* TESTS_^1_%AND- ONEBIT+1_$IS TEST ONE REQUESTED_^1_%SAN TEST1-*-1_^1_%JMP* T2CHK_^1TEST1 LDA =A1_^1_%STA TNUM_^1_%ENA 0_^1_%STA* PNTR_^1T1CN1 LDQ* PNTR_^1*_]_^1_%LDA* T1FN,Q_'PICK UP FUNCTION WORD_^1_%LDQ €€FADR_^1_%RTJ OUTPUT_^1_%RTJ INPUT_(PICK UP STATUS_^1_%STA* SAVST_(SAVE CURRENT STATUS WORD_^1_%LDQ* PNTR_^1_%EOR* T1ST,Q_'IS STATUS CORRECT_^1_%SAN T1CN2-*-1_^1_%JMP* T1CN3_^1T1CN2 LDA* T1FN,Q_'GET CURRENT FUNCTION WORD_^1_%RTJ (RHXASC)_^1_%ADC (CFUNC-*)_^1_%LDA* T1ST,Q_'GET CURRENT EXPECTED STATUS_^1_%RTJ (RHXASC)_^1_%ADC (ESTAT-*)_^1_%LDA* SAVST_^1_%RTJ (RHXASC)_^1_%ADC €€ (CSTAT-*)_^1_%RTJ INIMSG_^1_%JMP* T1CN3_^1_%RTJ (MESAGE)_$FUNCTION/STATUS ERROR_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG12B-MES5_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1T1CN3 LDQ* PNTR_^1_%INQ -$A_*COMPLETED_^1_%SQP T1CN4_^1_%RAO* PNTR_)NO_^1_%JMP* T1CN1_^1T1CN4 JMP* T2CHK_^1*_]_^1T1FN_!NUM 5,8,$10,$20,$40,$80,$100,$200,$400€€,$804,5_^1T1ST_!NUM 0,2,0,4,0,8,0,$10,0,$220,0_^1PNTR_!NUM 0_^1SAVST NUM 0_^1_%SPC 2_^1* ****************************************************************_^1*_]_^1*_.SECTION 2 - COUNTER OVERFLOW TIME TEST_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1T2CHK LDA* TESTS_^1_%AND- ONEBIT+2_$IS TEST TWO REQUESTED_^1_%SAN TEST2-*-1_^1_%JMP €€T3CHK_^1TEST2 LDA =A2_^1_%STA TNUM_^1_%LDQ FADR_^1_%ENA 5_^1_%RTJ OUTPUT_'CLEAR AND RESET STALL_^1_%RTJ INTSEL_'SELECT INTERRUPT_^1_%ADC INTRES-HERE_^1T2IOK LDQ FADR_^1_%LDA- ONEBIT+9_$$200_^1_%RTJ OUTPUT_'ENABLE COUNTER 4_^1_%CLR A_^1_%STA MAXCNT_^1_%STA STL4CT_^1_%LDQ DADR_^1_%LDA- ONEBIT+11_#$800_^1_%RTJ OUTPUT_'LOAD 00 IN COUNTER 4 AND START CLOCK_^1_%LDQ JUMPE€€R_^1_%ENA 1_^1_%SQN 1_^1_%ENA 10_^1_%RTJ DELAY_(WAIT FOR 1 OR 10 MILLISRC DEPENDING ON J_^1_%LDQ FADR_^1_%ENA 5_^1_%RTJ OUTPUT_'CLEAR CARD_^1_%LDA STL4CT_^1_%SAN T2CN1-*-1_^1_%RTJ INIMSG_^1_%JMP* T2END_^1_%RTJ (MESAGE)_$NO STALL INTERRUPT_^1MES16 NUM $0244_^1_%ADC (START-MES16)_^1_%NUM 3_^1_%ADC MSG17B-MES16_^1_%ADC MSG17E-MSG17B_^1_%JMP* T2END_^1T2CN1 CLR A_^1_%€€STA* CYCLE_^1T2CN1A LDQ* CYCLE_(SET RESET TIME FOR EACH COUNTER_^1_%LDA* RSTTYM,Q_^1_%STA STL1RT_^1_%LDA* RSTTYM+2,Q_^1_%STA STL2RT_^1_%LDA* RSTTYM+4,Q_^1_%STA STL3RT_^1_%LDA* BIASTY,Q_$SET COUNTER BIAS IF REQUIRED_^1_%STA BIAS_^1_%LDQ JUMPER_^1_%LDA* INTCNT+3_$CHECK STALL CONDITIONS FOR ONE MINUTE_^1_%SQZ 1_^1_%MUI- TEN_^1_%STA MAXCNT_^1_%LDA =XT2RTN-HERE_^1_%ADD HERE_^1_€€%STA SCHADD_^1_%CLR A_,CLEAR INTERRUPT COUNTERS_^1_%STA STL1CT_^1_%STA STL2CT_^1_%STA STL3CT_^1_%STA STL4CT_^1_%LDQ* FADR_^1_%LDA =N$2A8_^1_%RTJ* OUTPUT_'ENABLE ALL COUNTERS_^1_%LDQ* DADR_^1_%LDA =N$F00_'LOAD 00 INTO ALL COUNTERS_^1_%RTJ* OUTPUT_^1_%JMP- (ADISP)_%WAIT FOR RESCHUDE_^1*_]_^1T2RTN CLR Q_^1_%STQ- I_^1T2CN2 LDQ JUMPER_^1_%LDA- I_^1_%INA -3_+CHECK IF VERIFYI€€NG COUNTER 4_^1_%SAZ T2CN2A-*-1_^1_%LDA* CYCLE_(NO, CHECK IF EXPECTING ZERO STALLS_^1_%SAZ T2CN2B-*-1_^1T2CN2A LDA* INTCNT,I_^1_%SQZ 1_^1_%MUI- TEN_^1T2CN2B STA* EXPINT_^1_%LDA STL1CT,I_$CHECK IF COUNTERS AGREE WITH EXPECTED VA_^1_%SUB* EXPINT_^1_%SAZ T2CN3-*-1_^1_%SAP 1_^1_%TCA A_^1_%STA* INTDEV_'SAVE DEVIATION_^1_%LDA* INTCNT,I_^1_%DVI =N20_)ALLOW A 5 0/0 ERROR OR 1 COUNT€€_^1_%SAN 1_/WHICHEVER IS GREATER_^1_%SUB* INTDEV_^1_%SAZ T2CN3-*-1_^1_%SAP T2CN3-*-1_^1_%JMP* T2CN5_^1T2CN3 LDA- I_^1_%INA -3_^1_%SAZ T2CN4-*-1_#CHECK IF ALL COUNTS VERIFIED_^1_%RAO- I_^1_%JMP* T2CN2_^1T2CN4 LDA* CYCLE_^1_%SAN T2END-*-1_#CHECK IF BOTH STALL CONDITIONS CHECKED_^1_%RAO* CYCLE_^1_%JMP* T2CN1A_^1T2END RTJ INTREL_'RELEASE INTERRUPT LINE_^1_%JMP T3CHK_^1T2CN5 €€ LDA- I_^1_%STA* ISAVE_^1_%ADD =N$2031_^1_%STA CTRNUM_^1_%LDA STL1CT,I_^1_%RTJ (RHXASC)_^1_%ADC (CSTAT-*)_^1_%LDA* EXPINT_^1_%RTJ (RHXASC)_^1_%ADC (ESTAT-*)_^1_%RTJ* INIMSG_^1_%JMP* T2CN3_^1_%RTJ (MESAGE)_$COUNT ERROR_^1MES6_!NUM $0444_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG12B-MES6_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG6B-MES6_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG5BB-MES6_€€^1_%ADC MSG5E-MSG5BB_^1_%LDA* ISAVE_^1_%STA- I_^1_%JMP* T2CN3_^1*_]_^1INTCNT NUM 6_^1_%NUM 60_^1_%NUM 600_^1_%NUM 6000_^1ISAVE NUM 0_^1CYCLE NUM 0_^1RSTTYM NUM 990,1000_$RESET TIMES FOR STALL LEVEL 1_^1_%NUM 95,100_'RESET TIMES FOR STALL LEVEL 2_^1_%NUM 8,10_)RESET TIMES FOR STALL LEVEL 3_^1BIASTY NOP 0_^1_%INA +$10_^1INTDEV NUM 0_^1EXPINT NUM 0_^1_%SPC 2_^1* *****€€***********************************************************_^1*_]_^1*_4COMMON INPUT/OUTPUT ROUTINES_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1OUTPUT 0_"0_^1_%IIN 0_^1_%OUT 3_^1_%EIN 0_^1_%JMP* (OUTPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1*_]_^1INPUT 0_"0_^1_%IIN 0_^1_%CLR A_^1_%INP 3_^1_%EIN 0_^1_%JMP* (INPUT)_^1_%RTJ* INTREJ_^1_%€€RTJ* EXTREJ_^1*_]_^1FADR_!NUM 0_^1DADR_!NUM 0_^1*_]_^1INTREJ 0_"0_,PROCESS REJECTS_^1_%STA* ASAVE_^1_%STQ* QSAVE_^1_%ENQ -4_^1_%LDA* (INTREJ),Q_"GET I/O INSTRUCTION_^1_%ENQ 0_^1_%JMP* FRMINT_^1EXTREJ 0_"0_,EXTERNAL REJECT ENTRY_^1_%STA* ASAVE_^1_%STQ* QSAVE_^1_%ENQ -5_^1_%LDA* (EXTREJ),Q_"GET I/O INSTRUCTION_^1_%ENQ 1_^1FRMINT EIN 0_,ALLOW INTERRUPT_^1_%RTJ (RHXASC)_$CONVER€€T I/0 INSTRUCTION_^1_%ADC (XREG-*)_^1_%LDA* TYPTBL,Q_$SET TYPE OF REJECT_^1_%STA REJTYP_^1_%LDA* TYPTBL+2,Q_^1_%STA REJTYP+1_^1_%LDA* ASAVE_^1_%RTJ (RHXASC)_^1_%ADC (AREG-*)_^1_%LDA* QSAVE_^1_%RTJ (RHXASC)_^1_%ADC (QREG-*)_^1_%RTJ* INIMSG_'CHECK STOP AND NO PRINTOUT FLAGS_^1_%JMP* RJEXIT_^1_%RTJ (MESAGE)_$REJECT_^1MES12 NUM $0364_^1_%ADC (START-MES12)_^1_%NUM 3_^1_%ADC €€ MSG12B-MES12_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES12_^1_%ADC MSG13E-MSG13B_^1RJEXIT LDA TNUM_^1_%SUB =A1_*DO NOT RELEASE INT LINE IF TEST 1_^1_%SAZ RJ2-*-1_^1_%RTJ INTREL_'RELEASE INTERRUPT LINE_^1RJ2_"JMP ENDTST_^1ASAVE NUM 0_^1QSAVE NUM 0_^1TYPTBL ALF 4, I ENTXT_^1_%SPC 2_^1INIMSG 0_"0_,CHECK FOR STOP AND NO PRINTOUT FLAGS_^1_%ENA 1_^1_%AND FLAG_)CHECK FOR STO€€P FLAG_^1_%SAZ INIMS1-*-1_^1_%JMP* RJEXIT_'RELEASE INTERRUPT LINE AND END TEST_^1INIMS1 RAO* ERRCTR_^1_%LDA REPEAT_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1_%LDA FLAG_^1_%AND- ONEBIT+7_$CHECK FOR NO PRINTOUT FLAG_^1_%SAN INIMS2-*-1_^1_%RAO* INIMSG_^1INIMS2 JMP* (INIMSG)_^1ERRCTR NUM 0_^1_%EJT_]_^1* ****************************************************************_^1*_]_^1*_/DELA€€Y IN INCREMENTS OF ONE MILLISECOND_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1DELAY 0_"0_^1_%ALS 1_^1_%TCA A_^1_%STA* DLYCNT_^1_%RTJ- (AMONI)_%SCHEDULE DOWN TO LEVEL 3_^1_%ADC 9*FRC+FX+3*FCP_^1_%NUM 3_^1_%JMP- (ADISP)_^1AGAIN ENA 0_,DELAY FOR 500 MICROSECONDS_^1LOOP_!QLS 0_,LOOP TIME ADJUSTED FOR CPU CYCLE TIME_^1_%SAZ DONE-*-1_€€^1_%INA -1_^1_%JMP* LOOP_^1DONE_!RAO* DLYCNT_^1_%LDA* DLYCNT_^1_%SAZ DONE1-*-1_^1_%JMP* AGAIN_^1DONE1 RTJ- (AMONI)_%SCHEDULE UP TO LEVEL 4_^1_%ADC 9*FRC+FX+4*FCP_^1_%ADC 3_^1_%JMP- (ADISP)_^1_%JMP* (DELAY)_^1*_]_^1DLYCNT NUM 0_^1_%SPC 2_^1* ****************************************************************_^1*_]_^1*_/SECTION 3_!POWER FAIL INTERRUPT TEST_^1*_]_^1* *************€€***************************************************_^1_%SPC 2_^1T3CHK LDA TESTS_^1_%AND- ONEBIT+3_$IS TEST 3 REQUESTED_^1_%SAN TEST3_^1_%JMP* T4CHK_^1TEST3 LDA =A3_*YES_^1_%STA TNUM_^1_%LDQ* FADR_^1_%ENA 5_^1_%RTJ* OUTPUT_'CLEAR CARD_^1_%RTJ INTSEL_'SELECT INTERRUPT LINE_^1_%ADC PFINTR-HERE_^1T3IOK CLR A_^1_%STA* PFIFLG_^1_%RTJ (MESAGE)_$CAUSE POWER FAILURE INSTRUCTION€€_^1MES7_!NUM $8244_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%ADC MSG7B-MES7_^1_%ADC MSG7E-MSG7B_^1_%LDA =N-3000_%DELAY FOR 30 SECONDS_^1_%STA* PFDLY_^1T3CN1 ENA 10_+CHECK FOR INTERRUPT RCVD, EVERY 10 MILLI_^1_%RTJ* DELAY_^1_%LDA* PFIFLG_^1_%SAN T3CN3-*-1_^1_%RAO* PFDLY_^1_%LDA* PFDLY_(IS DELAY COMPLETE_^1_%SAP T3CN2-*-1_^1_%JMP* T3CN1_^1T3CN2 JMP* NOPFI_^1T3CN3 LDQ FADR_)GOT €€INTERRUPT_^1_%RTJ INPUT_(CHECK STATUS_^1_%AND- ONEBIT+15_^1_%SAN T3CN4-*-1_^1_%RTJ (MESAGE)_$NO POWER FAIL STATUS_^1MES13 NUM $8244_^1_%ADC (START-MES13)_^1_%NUM 3_^1_%ADC MSG14B-MES13_^1_%ADC MSG14E-MSG14B_^1T3CN4 LDQ FADR_^1_%ENA 5_^1_%RTJ OUTPUT_'CLEAR CARD_^1_%RTJ (MESAGE)_$RESTORE POWER INSTRUCTION_^1MES14 NUM $8244_^1_%ADC (START-MES14)_^1_%NUM 3_^1_%ADC MS€€G15B-MES14_^1_%ADC MSG15E-MSG15B_^1_%LDA =N5000_^1_%RTJ* DELAY_(DELAY FOR FIVE SECONDS_^1T3CN5 LDA FADR_^1_%AND- NZERO+4_^1_%TRA Q_^1_%RTJ INPUT_(GET MODULE STATUS_^1_%TRA Q_^1_%LDA FADR_^1_%AND- LPMSK+4_^1_%LLS 16_^1_%AND- ONEBIT,Q_$CHECK IF INTERRUPT FLAG STILL SET_^1_%SAZ T3CN6-*-1_^1_%JMP* T3CN4_(YES, NOTIFY USER AGAIN_^1T3CN6 JMP* T4CHK_^1NOPFI RTJ INIMSG_^1_%NOP €€ 0_^1_%RTJ (MESAGE)_$NO POWER FAIL INTERRUPT_^1MES8_!NUM $8244_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG8B-MES8_^1_%ADC MSG8E-MSG8B_^1_%RTJ INTREL_'RELEASE INTERRUPT LINE_^1_%JMP* T3CN3_^1PFINTR RAO* PFIFLG_'POWER FAIL INTERRUPT RESPONSE_^1_%RTJ INTREL_'RELEASE INTERRUPT LINE_^1_%JMP- (ADISP)_^1PFIFLG NUM 0_^1PFDLY NUM 0_^1_%EJT_]_^1* ***********************************€€*****************************_^1*_]_^1*_/SECTION 4_!FIELD STALL INTERRUPT TEST_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1T4CHK LDA TESTS_(IS TEST 4 REQUESTED_^1_%AND- ONEBIT+4_^1_%SAN TEST4-*-1_^1_%JMP* ENDTST_^1TEST4 LDA =A4_*YES_^1_%STA TNUM_^1_%LDQ FADR_^1_%ENA 5_^1_%RTJ OUTPUT_'CLEAR CARD_^1_%RTJ INTSEL_^1_%ADC FSINTR-HER€€E_^1T4IOK CLR A_^1_%STA* FSIFLG_^1_%RTJ (MESAGE)_$CAUSE FIELD STALL INSTRUCTION_^1MES9_!NUM $8244_^1_%ADC (START-MES9)_^1_%NUM 3_^1_%ADC MSG9B-MES9_^1_%ADC MSG9E-MSG9B_^1_%LDA =N-3000_^1_%STA* FSDLY_(WAIT FOR 30 SECONDS FOR INPUT_^1T4CN1 ENA 10_^1_%RTJ DELAY_(DELAY FOR 10 MILLISECONDS_^1_%LDA* FSIFLG_^1_%SAZ T4CN2-*-1_#HAS FIELD STALL INTERRUPT OCCURRED_^1_%JMP* T4CN4_€€^1T4CN2 RAO* FSDLY_^1_%LDA* FSDLY_^1_%SAP T4CN3_^1_%JMP* T4CN1_^1T4CN3 LDQ FADR_^1_%RTJ INPUT_(GET FIELD STALL STATUS_^1_%STA* FSSTAT_^1_%ENA 5_^1_%RTJ OUTPUT_^1_%RAO ERRCTR_^1_%RTJ (MESAGE)_$NO FIELD STALL INTERRUPT_^1MES10 NUM $8244_^1_%ADC (START-MES10)_^1_%NUM 3_^1_%ADC MSG10B-MES10_^1_%ADC MSG10E-MSG10B_^1T4CN4 LDA* FSSTAT_^1_%AND- ONEBIT+10_^1_%SAN T4CN5-*-1_€€^1_%RAO ERRCTR_^1_%RTJ (MESAGE)_$NO FIELD STALL STATUS_^1MES15 NUM $8244_^1_%ADC (START-MES15)_^1_%NUM 3_^1_%ADC MSG16B-MES15_^1_%ADC MSG16E-MSG16B_^1T4CN5 RTJ INTREL_'RELEASE INTERRUPT LINE_^1T4CN6 LDQ FADR_^1_%ENA 5_^1_%RTJ OUTPUT_'CLEAR CARD BEFORE STATUS CHECK_^1_%RTJ INPUT_(GET STATUS_^1_%AND- ONEBIT+10_#CHECK IF FIELD STALL STATUS STILL SET_^1_%SAN T4CN7-*-1_^€€1_%JMP* ENDTST_^1T4CN7 RTJ (MESAGE)_$REMOVE FIELD STALL_^1MES17 NUM $8244_^1_%ADC (START-MES17)_^1_%NUM 3_^1_%ADC MSG18B-MES17_^1_%ADC MSG18E-MSG18B_^1_%LDA =N5000_^1_%RTJ DELAY_(DELAY FOR 5 SECONDS_^1_%JMP* T4CN6_^1*_]_^1FSINTR RAO* FSIFLG_'FIELD STALL INTERRUPT RESPONSE_^1_%LDQ FADR_^1_%RTJ INPUT_(GET STATUS_^1_%STA* FSSTAT_^1_%ENA 5_^1_%RTJ OUTPUT_'CLEAR CARD_^1_%J€€MP- (ADISP)_^1*_]_^1FSIFLG NUM 0_^1FSDLY NUM 0_^1FSSTAT NUM 0_^1_%EJT_]_^1* ****************************************************************_^1*_]_^1*_9TERMINATION SEQUENCE_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1ENDTST RAO* REPEAT_^1_%LDA FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA RUNS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-€€1_^1_%SUB* REPEAT_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG RTJ RESINT_'RESTORE ORIGINAL MASK_^1_%LDA* REPEAT_^1_%RTJ (ROCDEC)_$CONVERT RUNS TO DECIMAL_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ (ROCDEC)_$CONVERT ERRORS TO DECIMAL_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RTJ (MESAGE)_$END TEST MESSAGE_^1MES11 NUM $8144_^€€1_%ADC MSG11B-MES11_^1_%ADC MSG11E-MSG11B_^1_%LDA FLAG_^1_%AND- ONEBIT+6_$CHECK FOR STOP TO REENTER PARAMETERS_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1_%JMP- (ADISP)_%EXIT PROGRAM_^1REPEAT NUM 0_^1_%EJT_]_^1_%SPC 2_^1* ****************************************************************_€€^1*_]_^1*_5INTERRUPT RESPONSE ROUTINE_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1INTRES LDQ FADR_^1_%RTJ INPUT_(GET STATUS_^1_%STA* SAVIST_'SAVE INTERRUPT STATUS_^1_%LDA FLAG_)CHECK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ NOTSTP-*-1_^1_%JMP* CLREX_^1NOTSTP LDA* SAVIST_'CHECK STATUS FOR TYPE OF INTERRUPT_^1_%SAP INTR1-*-1_^1_%RAO* PFLC€€T_(GOT POWER FAIL INTERRUPT_^1_%JMP* CLREX_^1INTR1 ENQ 0_^1_%ALS 1_^1_%SAP INTR2-*-1_^1_%RAO* STL1CT_'LEVEL 1 STALL SET_^1_%ADQ- ONEBIT+8_$$100_^1INTR2 ALS 1_^1_%SAP INTR3-*-1_^1_%RAO* STL2CT_'LEVEL 2 STALL SET_^1_%ADQ- ONEBIT+9_$$200_^1INTR3 ALS 1_^1_%SAP INTR4-*-1_^1_%RAO* STL3CT_'LEVEL 3 STALL SET_^1_%ADQ- ONEBIT+10_#$400_^1INTR4 ALS 1_^1_%SAP INTR5-*-1_^1_%RAO* STL€€4CT_'LEVEL 4 STALL SET_^1_%LDA* MAXCNT_'CHECK FOR TIME RESCHEDULE_^1_%SAZ INTR5-*-1_^1_%EOR* STL4CT_^1_%SAN INTR5-*-1_^1_%JMP* CLREX_^1INTR5 LDA* SAVIST_^1_%AND- ONEBIT+10_#CHECK FOR FIELD STALL_^1_%SAZ SETEX-*-1_^1_%RAO* FSTLCT_^1SETEX STQ* SAVFNC_^1_%LDA* STL4CT_'CHECK IF STALL 1 SHOULD BE RESET_^1_%CLR Q_^1_%DVI* STL1RT_^1_%SQN CKSTL2-*-1_^1_%LDA* SAVFNC_^1_%AND- ZROBIT+8€€_^1_%EOR- ONEBIT+8_$SET RELOAD STALL 1 BIT_^1_%STA* SAVFNC_^1CKSTL2 LDA* STL4CT_'CHECK IF STALL 2 SHOULD BE RESET_^1_%CLR Q_^1_%DVI* STL2RT_^1_%SQN CKSTL3-*-1_^1_%LDA* SAVFNC_^1_%AND- ZROBIT+9_^1_%EOR- ONEBIT+9_$SET RELOAD STALL 2 BIT_^1_%STA* SAVFNC_^1CKSTL3 LDA* STL4CT_'CHECK IF STALL 3 SHOULD BE RESET_^1_%CLR Q_^1_%DVI* STL3RT_^1_%SQN OUTFNC-*-1_^1_%LDA* SAVFNC_^1_%AND- ZROB€€IT+10_^1_%EOR- ONEBIT+10_#SET RELOAD STALL 3 BIT_^1_%STA* SAVFNC_^1OUTFNC LDA* SAVFNC_'ADD BIAS IF CKING FOR STALL CONDITIONS_^1BIAS_!NOP 0_,'NOP' OR 'INA +$10'_^1_%LDQ DADR_^1_%RTJ OUTPUT_'OUTPUT FUNCTION_^1_%LDQ FADR_^1_%ENA 6_,SEE ECR_^1_%RTJ OUTPUT_'RESET STALL_^1_%JMP- (ADISP)_^1*_]_^1STL1CT NUM 0_,STALL LEVEL 1 COUNTER_^1STL2CT NUM 0_,STALL LEVEL 2 COUNTER_^1STL3CT N€€UM 0_,STALL LEVEL 3 COUNTER_^1STL4CT NUM 0_,STALL LEVEL 4 COUNTER_^1STL1RT NUM 0_^1STL2RT NUM 0_^1STL3RT NUM 0_^1PFLCT NUM 0_,POWER FAILURE COUNTER_^1FSTLCT NUM 0_,FIELD STALL COUNTER_^1MAXCNT NUM 0_^1SAVIST NUM 0_^1SAVFNC NUM 0_^1*_]_^1CLREX LDQ FADR_^1_%ENA 5_^1_%RTJ OUTPUT_'CLEAR CARD_^1_%LDA FLAG_^1_%AND- ONEBIT_^1_%SAZ CKSCH-*-1_^1_%JMP RJEXIT_'STOP FLAG SET,€€ RELEASE INTERUPT LINE_^1CKSCH LDA* SCHADD_^1_%SAZ NOSCH-*-1_^1SCHDLE RTJ- (AMONI)_%SCHEDULE REQUEST_^1_%ADC 9*FRC+4*FCP_^1SCHADD NUM 0_^1_%CLR A_^1_%STA* SCHADD_^1NOSCH JMP- (ADISP)_^1_%SPC 4_^1* **************************************************_^1*_*SELECT INTERRUPT LINE_1*_^1* **************************************************_^1INTSEL NUM 0_^1_%IIN 0_^1_%LDQ INTLNE_'€€GET TRAP LOCATION_^1_%QLS 2_^1_%ADQ =N$102_^1_%LDA =N14_^1_%STA- (ZERO),Q_$PUT IN PL=14_^1_%LDA* (INTSEL)_^1_%ADD HERE_^1_%STA- (ONEBIT),Q_"PUT IN NEW RESPONSE LOCATION_^1_%RAO* INTSEL_^1INT8_!LDA INTLNE_^1_%STA- I_^1_%ENQ -1_^1INT12 LDA- (LMSKT),Q_#SET UP MASK FOR PL=14_^1_%AND- ZROBIT,I_^1_%ADD- ONEBIT,I_^1_%STA- (LMSKT),Q_^1_%INQ 1_^1_%TRQ A_^1_%SUB =N14_^1_%SAZ INT16€€_^1_%JMP* INT12_^1INT16 EIN 0_^1_%JMP* (INTSEL)_^1_%SPC 4_^1* **************************************************_^1*_$SAVE MASK,PL,RES LOCN, DISABLE STALL INT_"*_^1* **************************************************_^1INTSAV NUM 0_^1_%IIN 0_^1_%LDQ INTLNE_^1_%STQ- I_^1_%QLS 2_^1_%ADQ =N$102_^1_%LDA- (ZERO),Q_$SAVE PL_^1_%STA* OLDPL_^1_%LDA- (ONEBIT),Q_"SAVE RESPONSE LOCATI€€ON_^1_%STA* OLDRES_^1_%ENQ 15_^1INS4_!LDA- (LMSKT),Q_#SAVE OLD MASK_^1_%STA* MASK+1,Q_^1_%AND- ZROBIT,I_^1_%STA- (LMSKT),Q_#CLEAR STALL INT BIT_^1_%SQM INS8_^1_%INQ -1_^1_%JMP* INS4_^1INS8_!EIN 0_^1_%JMP* (INTSAV)_^1OLDPL NUM 0_^1OLDRES NUM 0_^1_%BZS MASK(17)_^1_%SPC 4_^1* **************************************************_^1*_$TURN OFF STALL INTERRUPT_3*_^1* *************€€*************************************_^1INTREL NUM 0_^1_%IIN 0_^1_%LDA INTLNE_^1_%STA- I_^1_%ENQ 15_^1INR4_!LDA- (LMSKT),Q_#CLEAR STALL INT MASK BITS_^1_%AND- ZROBIT,I_^1_%STA- (LMSKT),Q_^1_%SQM INR8_^1_%INQ -1_^1_%JMP* INR4_^1INR8_!EIN 0_^1_%JMP* (INTREL)_^1_%SPC 4_^1* **************************************************_^1*_*RESTORE INTERRUPT LINE_0*_^1* *******************€€*******************************_^1RESINT NUM 0_^1_%IIN 0_^1_%ENQ 15_+RESTORE MASK TABLE_^1INL4_!LDA* MASK+1,Q_^1_%STA- (LMSKT),Q_^1_%SQM INL8_^1_%INQ -1_^1_%JMP* INL4_^1INL8_!LDQ INTLNE_^1_%QLS 2_^1_%ADQ =N$102_^1_%LDA* OLDPL_^1_%STA- (ZERO),Q_$RESTORE PL_^1_%LDA* OLDRES_^1_%STA- (ONEBIT),Q_"RESTORE RESPONSE LOCATION_^1_%EIN 0_^1_%JMP* (RESINT)_^1_%SPC 4_^1* *************€€***************************************************_^1*_]_^1*_:MESSAGE BUFFERS_^1*_]_^1* ****************************************************************_^1_%SPC 2_^1MSG1B ALF *,BEGIN 1576 STALL ALARM OFF-LINE TEST *_^1_%EQU MSG1E(*)_^1MSG2B ALF *,TESTS,RUNS,CPU TYPE *_^1_%EQU MSG2E(*)_^1MSG2AB ALF *,INT LINE,WEMS,JUMPER *_^1_%EQU MSG2AE(*)_^1MSG3B ALF 3,1576-X_^1_%EQU €€MSG3E(*)_^1MSG4B ALF 14, INTERRUPT ASSIGNMENT ERROR_^1_%EQU MSG4E(*)_^1MSG4AB ALF *,CPU TYPE ERROR_^1_%EQU MSG4AE(*)_^1MSG5B ALF 4, FUNCTN_^1CFUNC NUM 0,0_^1_%ALF 6, STATUS ERR._^1MSG5BB ALF_!4, ACTUAL_^1CSTAT NUM 0,0_^1_%ALF 5, EXPECTED_^1ESTAT NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 4, COUNTER_^1CTRNUM NUM 0_^1_%ALF 6, COUNT ERR._^1_%EQU MSG6E(*)_^1MSG7B ALF 2€€3, TEMPORILY INTERRUPT POWER AT STALL ALARM_^1_%EQU MSG7E(*)_^1MSG8B ALF 12, NO POWER FAIL INTERRUPT_^1_%EQU MSG8E(*)_^1MSG9B ALF 11, SET FIELD STALL INPUT_^1_%EQU MSG9E(*)_^1MSG10B ALF 13, NO FIELD STALL INTERRUPT_^1_%EQU MSG10E(*)_^1MSG11B ALF 15,END 1576-X STALL ALARM TEST,_^1RUNASC NUM 0,0_^1_%ALF 3, RUNS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS._^1_%EQU MSG11E(*)_^1MS€€G12B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 2,RUN_^1ERRPAS NUM 0,0_^1_%EQU MSG12E(*)_^1MSG13B ALF 8, INT REJECT Q =_^1QREG_!NUM 0,0_^1_%ALF 3, A =_^1AREG_!NUM 0,0_^1_%ALF 3, X =_^1XREG_!NUM 0,0_^1_%EQU MSG13E(*)_^1_%EQU REJTYP(MSG13B)_^1MSG14B ALF 11, NO POWER FAIL STATUS_^1_%EQU MSG14E(*)_^1MSG15B ALF 15, RESTORE POWER TO STALL ALARM_^1_%EQU MSG15E(*)_^1MSG16B ALF 1€ΐ1, NO FIELD STALL STATUS_^1_%EQU MSG16E(*)_^1MSG17B ALF 10, NO STALL INTERRUPT_^1_%EQU MSG17E(*)_^1MSG18B ALF 12, CLEAR FIELD STALL INPUT_^1_%EQU MSG18E(*)_^1_%EQU END(*)_^1_%END 0_^__ ΐPSCMSTU CSY/ B74 P€1_%NAM SCMSTU_'DECK-ID B74 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*C O R E_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:TEST DESC€€RIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_$SCMSTU IS A DIAGNOSTIC FOR THE 1572-1 IOM SAMPLE TIMING_^1*_$UNIT._^1*_$THIS TEST IS INTENDED TO BE RUN WITHOUT OTHER TESTS EXECUTING._^1*_$THE TEST WILL MONOPOLIZE ALL EXECUTION TIME AT PRIORITY LEVEL_^1*_$FOUR EXCEPT DURING ERROR MESSAGE SCHEDULING. THE TEST RUNS_^1*_$UN€€DER THE CONTROL OF DIAGNOSTIC SUPERVISOR -SCMEXC-. THE USER_^1*_$IS REQUESTED TO INPUT THE TEST PARAMETERS -- TEST SECTIONS TO_^1*_$BE EXECUTED, NUMBER OF TIMES TO EXECUTE THE TEST SEQUENCE,_^1*_$AS FOLLOWS:_^1*_*SECTION 1_!ENABLE/DISABLE TEST_^1*_*SECTION 2_!SAMPLE RATE GENERATOR TEST_^1*_*SECTION 3_!TIME BASE COMPARISON TEST_^1*_*SECTION 4_!TIME BASE COMPARISON TEST, OPERATOR CON€€TROLLED_^1*_$AT COMPLETION OF TEST SECTION AND AT EACH ERROR, A CHECK IS_^1*_$MADE FOR STOP FLAG AND IF SET TEST IS TERMINATED. AT THE END_^1*_$OF EACH TEST SEQUENCE, A PASS COUNTER IS UPDATED AND COMPARED_^1*_$AGAINST THE NUMBER OF TIMES REQUESTED BY THE USER. IF EQUAL,_^1*_$THE TEST IS TERMINATED. THE STOP FLAG IS ALSO CHECKED. IF_^1*_$$8000 IS ENTERED FOR THE NUMBER OF EXECUTION€€S, THE TEST_^1*_$SEQUENCE WILL BE EXECUTED INDEFINITELY UNTILL HALTED BY A_^1*_$STOP COMMAND_^1_%EJT_]_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*******_"OPERATING INSTRUCTIONS_"********_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_$TESTS DESIRED TESTS SECTIONS_^1*_$RUNS NUMBE€€R OF RUNS_^1*_$INTERRUPT LINE INTERRUPT LINE THAT TIMER IS ON_^1*_$WMES 0-3 STATION ADDRESS_^1*_+4-6 MODULE NO._^1*_+8-10 EQUIPMENT NO._^1*_%11-15 W-FIELD(=0)_^1*_$COMPUTER TYPE 0 - 1784-2_^1*_41 - 1784-1_^1*_42 - 1704014_^1*_43 - 1774_^1*_$LST INT CNT NUMBER OF LST INTERRUPTS_^1*_$MULT A VALUE THATS LOADED INTO THE MULTPLIER REGISTER OF THE SRG_^1*_$SYNC 1 - ENABLE SYNC_€€^1*_+0 - DISABLE SYNC_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_]_^1*********_"ERROR MESSAGES_"*********_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_$NO INT RCVD_#NO INTERRUPT RECEIVED FROM THE LST OR THE SRG_^1*_$ILLEGAL INT_#RECEIVED A INT FROM THE WRONG PAR€€T OF TIMER_^1*_$INT REJECT_#REVEIVED A INT REJECT FROM TIMER_^1*_$EXT REJECT_$RECEIVED A EXT REJECT FROM TIMER_^1*_$VALUE OF SRG MULT NOT EQUAL TO SRG COUNTER_^1*_$INCORRECT TIMER FOR TEST_^1*_]_^1*_]_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_:EQUIVALENCES_>*_^1*_]_'*_^1*********************************************************€€***************_^1_%SPC 2_^1_%EQU LPMSK(2)_$START OF LOWER BIT MASKS_^1_%EQU NZERO($12)_"LOCATION OF NEG ZERO + START OF UPPER BIT MSK_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%EQU ONEBIT($23)_!START OF ONE BIT MASKS_^1_%EQU ZROBIT($33)_!START OF ZERO BIT MASKS_^1_%EQU TEN($46)_$LOCATION CONTAINING TEN_^1_%EQU ADISP($EA)_"LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_€€"LOCATION OF ADDRESS OF MONITOR_^1_%EQU CPUTYP($F6)_!LOCATION OF THE CPU TYPE FLAG_^1_%EQU FRC($200)_#REQUEST WORD "REQUEST CODE" LOCATOR_^1_%EQU FX($100)_$REQUEST WORD "F" BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD "REQUEST PRIORITY" LOCATOR_^1_%EQU FCP($1)_%REQUEST WORD "COMPLETION PRIORITY" LOCATOR_^1_%EQU TSTSTU(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTSTU_^1_%EXT TMRTYP_'TY€€PE OF TIME IN SYSDAT_^1_%EXT DTIMER_^1_%EXT UPTOD_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATIONS REGION_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTSTU_$TEST MNEMONIC_^1_%ADC END-START_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM €€0_,COMMUNICATIONS WORD WITH MONITOR_^1*_]_^1*_]_^1INFOIN NUM 0_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1*_]_^1************************************************************************_^1*_]_^1*_]_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7INPUT TEST PARAMETERS_8*_^1*_]_€€'*_^1************************************************************************_^1_%SPC 2_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_$SEE IF CORECT TYPE FOR TEST_^1*_]_^1*_*3= 1572 LST_^1*_*4= 1572 SRG_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1ENTER LDA TMRTYP_'GET TYPE OF TI€€MER_^1_%INA -3_+IS IT A 1572 LST_^1_%SAZ OK_^1_%INA -1_^1_%SAZ OK_+SRG TIMER_^1_%RTJ* (MESAGE)_$INCORRECT TYPE OF TIMER_^1MES2_!NUM $8244_^1_%ADC START-MES2_^1_%NUM 3_^1_%ADC MSG13E-MES2_^1_%ADC MSG13E-MSG13B_^1_%JMP END2_)EXIT TEST_^1OK_#CLR A_,CLEAR COUNTERS AND FLAGS_^1_%STA ERRCTR_^1_%STA* INPERR_^1_%STA* INPCNT_^1_%ENA 1_^1_%STA REPEAT_^1INI1_!RTJ* (MESAGE)_$OUTP€€UT INITIAL MESSAGE_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG2E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$INPUT REQUEST PARAMETERS_^1_%SQP INI2_)TTY ERRORS_^1_%RAO* INPCNT_^1_%LDA* INPCNT_'HAS THER BEEN THREE INPUT ERRORS_^1_%INA -3_^1_%SAP GTOUT_^1_%JMP* INI1_)YES TRY AGAIN_^1GTOUT JMP END3_^1INI2_!RTJ* (GETFLD)_^1_%STA* TESTS_^1_%RTJ (GETFLD)_^1_%RTJ* (RDECHX)_^1_%STA* R€€UNS_^1*_]_^1************************************************************************_^1*_]_^1*_$ENTER INTERRUPT LINE, WMES CODE, COMPUTER TYPE_^1*_]_^1************************************************************************_^1*_]_^1INI2A RTJ* (MESAGE)_^1MES3_!NUM $8144_^1_%ADC MSG14B-MES3_^1_%ADC MSG14E-MSG14B_^1*_]_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1_%SQP INI2B_(TTY ERRORS_^1_%JM€€P* INI2A_(YES_^1*_]_^1INI2B RTJ* (GETFLD)_^1_%INQ -1_^1_%STA INTLNE,Q_^1_%INQ -2_^1_%SAZ INI4_^1_%JMP* INI2B_^1*_]_^1*_]_^1INTLNE NUM 0_,INTERRUPT LINE_^1WEMS_!NUM 0_,WEMS WORD OF TIMER_^1TYPE_!NUM 0_,COMPUTER TYPE FOR DELAY ROUTINE_^1TRPSAV NUM 0_,TEMP HOLD FOR ORGINAL TRAP ADDRESS_^1INPCNT NUM 0_,COUNTER FOR INPUT ERRORS_^1*_]_^1*_]_^1INI4_!LDA* WEMS_)SET UP PROPER EQUI€€PMENT ADDRESSES_^1_%AND- ZROBIT+7_^1_%STA DADR_)DATA WMES_^1_%EOR- ONEBIT+7_^1_%STA FADR_)FUNCTION/STATUS WMES_^1INI5_!RTJ* HERE_^1HERE_!NUM 0_^1_%LDQ* INTLNE_'SET INT LINE NO. IN ALL SEL AND REL REQUESTS_^1************************************************************************_^1_%QLS 2_,MULT BY 4 GET TO TRAP AREA FOR TIMER_^1_%LDQ+ $103,Q_'LOAD WITH INTERRUPT RESPONSE ROUTIN€€E ADDRESS_^1_%STQ* TRPSAV_'SAVE ORGINAL INTERRUPT RESPONSE ADDRESS_^1************************************************************************_^1_%LDQ FADR_^1_%ENA 9_,ACKNOWLEDGE INTERRUPTS AND DISABLE_^1_%RTJ OUTPUT_^1_%JMP* BEGIN_^1*_]_^1************************************************************************_^1*_]_^1*_$SELECT NEW LINE FOR TEST 1 AND 2 ONLY_^1*_]_^1************€€************************************************************_^1*_]_^1SEXLIN NUM 0_^1_%LDA =XINTN1-HERE INTERRUPT RESPONSE ROUTINE FOR TEST 1 AND 2_^1_%ADD* HERE_^1_%STA* INTLOC+1_^1_%IIN 0_^1_%LDQ INTLNE_'LOAD INTERRUPT LINE_^1_%QLS 2_^1INTLOC LDA =N0_^1_%STA+ $103,Q_^1_%JMP* (SEXLIN)_^1*_]_^1TESTS NUM 0_^1RUNS_!NUM 0_^1*_]_^1LSTINT NUM 0_^1MULT_!NUM 0_^1SYNC_!NUM 0_^1€€*_]_^1INPERR NUM 0_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_$REQUEST PARAMETERS FOR TEST 3 AND 4_^1*_]_^1************************************************************************_^1*_]_^1PARAM NUM 0_^1PARAM2 RTJ* (MESAGE)_^1MES4_!NUM $8144_^1_%ADC MSG4B-MES4_^1_%ADC MSG4E-MSG4B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1_%SQP PRM2A_€€(TTY ERRORS_^1_%JMP* PARAM2_'YES_^1PRM2A RTJ* (GETFLD)_$GET LST INT CNT,MULT,SYNC_^1_%INQ -1_^1_%STA* LSTINT,Q_^1_%INQ -2_^1_%SQZ PRM2B-*-1_^1_%JMP* PRM2A_^1PRM2B LDA* LSTINT_'CONVERT NO. OF INTERRUPTS TO HEX_^1_%RTJ (RDECHX)_^1_%STA* LSTINT_^1_%JMP* (PARAM)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_1SECTION 1 -- ENABLE/€€DISABLE TEST_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TESTS_^1_%AND- ONEBIT+1_$IS TEST ONE REQUESTED_^1_%SAN TEST1-*-1_^1_%JMP T2CHK_^1TEST1 LDA =A1_*YES, DO IT_^1_%STA TNUM_)TEST NUMBER_^1_%RTJ SEXLIN_'SELECT INTERRUPT RESPONSE ROUTINE FOR 1 AND 2_^1_%CLR A_^1_%STA INTST_(CLEAR INTERRUPT FLAG_^1_%LDQ D€€ADR_^1_%ENA 1_^1_%RTJ OUTPUT_'LOAD MULTIPLIER WITH ONE_^1_%LDQ FADR_^1_%ENA 2_^1_%RTJ OUTPUT_'ENABLE LST INTERRUPT_^1_%RTJ DELAY_^1_%SQN T1CN1_(IS H/W STATUS IN Q_^1_%ENQ 0_^1_%RTJ NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM 2_^1_%JMP* T1CN2_^1T1CN1 SQP T1CN2_(LST Q=+, SRG Q=-_^1_%ENQ 2_^1_%RTJ IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM 2_^1T1CN2 CLR A_^1_%STA INTST_€€^1_%RTJ DELAY_^1_%SQZ T1CN3-*-1_#CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 9_^1T1CN3 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA 4_^1_%RTJ OUTPUT_'ENABLE LST SYNC_^1_%RTJ* DELAY_^1_%SQZ T1CN4-*-1_#CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT E€€XPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 4_^1T1CN4 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA 6_^1_%RTJ OUTPUT_'ENABLE LST INTERRUPT AND SYNC_^1_%RTJ* DELAY_^1_%SQN T1CN5-*-1_^1_%ENQ 0_^1_%RTJ NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM 6_^1_%JMP* T1CN6_^1T1CN5 SQP T1CN6-*-1_^1_%ENQ 2_^1_%RTJ IINMSG_'INTERRUPT FROM WRONG DEVIC€€E_^1_%NUM 6_^1T1CN6 CLR A_^1_%STA* INTST_^1_%RTJ* DELAY_^1_%SQZ T1CN7-*-1_#CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 9_^1T1CN7 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA $10_^1_%RTJ OUTPUT_'ENABLE SRG INTERRUPT_^1_%RTJ* DELAY_^1_%SQN T1CN8-*-1_^1_%ENQ 2_^1_%R€€TJ* NINMSG_'NO INTERRUPTS RECEIVED_^1_%NUM $10_^1_%JMP* T1CN9_^1T1CN8 SQM T1CN9-*-1_^1_%ENQ 0_^1_%RTJ* IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM $10_^1T1CN9 CLR A_^1_%STA* INTST_^1_%RTJ* DELAY_^1_%SQZ T1CN10-*-1_"CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 9_^1€€T1CN10 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA $20_^1_%RTJ OUTPUT_'ENABLE SRG SYNC_^1_%RTJ* DELAY_^1_%SQZ T1CN11-*-1_"CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM $20_^1T1CN11 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA $30_^1_%RTJ OUTPUT_'ENABLE SRG INTERRUPT AN€€D SYNC_^1_%RTJ* DELAY_^1_%SQN T1CN12-*-1_^1_%ENQ 2_^1_%RTJ* NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM $30_^1_%JMP* T1CN13_^1T1CN12 SQM T1CN13-*-1_^1_%ENQ 0_^1_%RTJ* IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM $30_^1T1CN13 CLR A_^1_%STA* INTST_^1_%RTJ* DELAY_^1_%SQZ T1CN14-*-1_"CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_€€%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 9_^1T1CN14 LDQ* FADR_^1_%ENA 9_^1_%RTJ OUTPUT_'ACKNOWLEDGE AND DISABLE INTERRUPTS_^1_%RTJ STOPCK_^1_%JMP* T2CHK_^1*_]_^1FADR_!NUM 0_,FUNCTION/STATUS WMES WORD_^1DADR_!NUM 0_,DATA WMES WORD_^1INTST NUM 0_,FLAG TO DETERMINE IF THERE WAS AN INTERRUPT_^1*_]_^1******************************************************************€€******_^1*_]_^1*_$DELAY ROUTINE_#16.7 MILL SEC MAX FOR INTERRUPT_^1*_]_^1************************************************************************_^1*_]_^1DELAY NUM 0_^1_%LDQ TYPE_)LOAD WITH COMPUTER TYPE_^1_%LDA COMTYP,Q_$PICK UP DELAY TIME_^1_%STA* DLYCNT_^1CKLST LDQ* INTST_^1_%SQN DLEXIT-*-1_"HAS INTERRUPT OCCURRED_^1_%RAO* DLYCNT_'NO_^1_%LDA* DLYCNT_'HAS TIME EXPIRED_^1_%S€€AM DLEXIT-*-1_^1_%JMP* CKLST_(NO_^1DLEXIT JMP* (DELAY)_%YES_^1*_]_^1DLYCNT NUM 0_^1*_]_^1*_$DELAY TABLE FOR DIFFEREENT TYPES OF COMPUTERS_^1*_]_^1*_$DELAY = $8000-(1704/14 DELAY)*ONE PASS OF LOOP FOR 1704/14_^1*_]_^1*_$DELAY TIME= $8000- (DELAY/ ONE PASS BY EACH COMPUTER TYPE)_^1*_]_^1COMTYP NUM $5F72_(1784-2 COMPUTER_^1_%NUM $6A46_(1784-1 COMPUTER_^1_%NUM $6E3E_(1704/14 COM€€PUTER_^1_%NUM $771F_(1774 SC COMPUTER_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_6INTERRUPT ERROR ROUTINES_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NINMSG 0_"0_,NO INTERRUPT RECEIVED_^1_%LDA* LST,Q_(SET DEVICE NAME_^1_%STA HTYPE1_^1_%LDA* LST+1,Q_^1_%STA HTYPE1+1_^1€€_%LDA =XMSG6B-MES5 SET TYPE OF MESSAGE_^1FRMIIN STA* INTERR_^1_%RTJ CHKFLG_'CHECK STOP AND NO PRINTOUT FLAGS_^1_%JMP* NIN1_^1_%LDA* (NINMSG)_$GET FUNCTION_^1_%RTJ (RHXASC)_^1_%ADC (FNCASC-*)_^1_%RTJ (MESAGE)_^1MES5_!NUM $0444_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1INTERR ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG8B-MES5_^1_%ADC MS€€G8E-MSG8B_^1NIN1_!RAO* NINMSG_^1_%JMP* (NINMSG)_^1*_]_^1IINMSG 0_"0_,ILLEGAL INTERRUPT RECEIVED_^1_%LDA* LST,Q_(SET DEVICE NAME_^1_%STA HTYPE2_^1_%LDA* LST+1,Q_^1_%STA HTYPE2+1_^1_%LDA* IINMSG_^1_%STA* NINMSG_^1_%LDA =XMSG7B-MES5 SET TYPE OF MESSAGE_^1_%JMP* FRMIIN_^1LST_"ALF 2, LST_^1_%ALF 2, SRG_^1_%EJT_]_^1*******************************************************************€€*****_^1*_]_'*_^1*_.SECTION 2 -- SAMPLE RATE GENERATOR TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CHK LDA TESTS_^1_%AND- ONEBIT+2_$IS TEST TWO REQUESTED_^1_%SAN TEST2-*-1_^1_%JMP T3CHK_^1TEST2 LDA =A2_*YES, DO IT_^1_%STA TNUM_^1_%RTJ SEXLIN_'SELECT INTERRUPT RESPONSE ROUTINE FOR 1 AND 2_^1_%LDQ* DADR_)DATA ADDR€€ESS_^1_%ENA 0_^1_%RTJ OUTPUT_'ZERO MULTIPLIER_^1_%RTJ INPUT_(INPUT COUNTER CONTENTS_^1_%SAZ T2CN1-*-1_#CHECK FOR DATA ERROR_^1_%STA* DATA1_^1_%ENQ 1_^1_%RTJ* DERMSG_'OUTPUT DATA ERROR MESSAGE_^1_%NUM 0_^1DATA1 NUM 0_^1T2CN1 LDQ* DADR_^1_%SET A_^1_%RTJ OUTPUT_'OUTPUT $FFFF TO MULTIPLIER_^1_%RTJ INPUT_(INPUT COUNTER CONTENTS_^1_%EOR- NZERO_^1_%SAZ T2CN2-*-1_#CHECK FOR DA€€TA ERROR_^1_%STA* DATA2_^1_%INA -8_^1_%SAM T2CN2-*-1_#IS DIFFERENCE LESS THAN 8_^1_%ENQ 1_^1_%RTJ* DERMSG_'OUTPUT DATA ERROR MESSAGE_^1_%NUM $FFFF_^1DATA2 NUM 0_^1T2CN2 ENA 2_^1T2CN2A STA* DATA3A_'CHECK SRG COUNTER/INTERRUPT_^1_%CLR Q_^1_%STQ* INTST_^1_%LDQ* DADR_^1_%RTJ OUTPUT_'SET MULTIPLIER_^1_%LDQ* FADR_^1_%ENA $10_^1_%RTJ* OUTPUT_'ENABLE SRG INTERRUPT_^1_%RTJ* DELAY€€_^1_%SQN T2CN3-*-1_#CHECK FOR INTERRUPT RECEIVED_^1_%ENQ 2_^1_%RTJ* NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM $10_^1_%ENQ 0_^1_%RTJ* DERMSG_'MULTIPLIER VALUE_^1DATA3A NUM 0_^1_%NUM 0_^1_%JMP* T2CN4_^1T2CN3 SQM T2CN4-*-1_^1_%ENQ 0_^1_%RTJ* IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM $10_^1T2CN4 LDA* DATA3A_^1_%INA -8_^1_%SAP T2CN5-*-1_^1_%LDA* DATA3A_^1_%ALS 1_^1_%JMP* T2C€€N2A_^1T2CN5 ENA $10_*CHECK COUNTER INCREMENTING_^1T2CN5A STA* DATA4A_^1_%LDQ =N$6C77_^1_%STQ* DLPS_^1_%LDQ DADR_^1_%RTJ* OUTPUT_'OUTPUT MULTIPLIER VALUE_^1INLP_!RTJ* INPUT_(INPUT COUNTER VALUE_^1_%STA* DATA4B_^1_%SUB* DATA4A_^1_%SAM T2CN6-*-1_^1_%RAO* DLPS_)INCREMENT DELAY LOOP_^1_%LDA* DLPS_^1_%SAM T2CN7-*-1_#DELAY COMPLETED, ERROR_^1_%JMP* INLP_^1T2CN6 INA 8_,IS DIFFERENC€€E GT 8_^1_%SAP T2CN8-*-1_^1T2CN7 ENQ 1_,YES_^1_%RTJ* DERMSG_'DATA ERROR MESSAGE_^1DATA4A NUM 0_^1DATA4B NUM 0_^1T2CN8 LDA* DATA4A_'CHECK FOR ALL BITS DONE_^1_%SAM T2CN9-*-1_^1_%ALS 1_^1_%JMP* T2CN5A_^1T2CN9 LDQ FADR_)DISABLE INTERRUPT_^1_%ENA 9_^1_%RTJ* OUTPUT_^1_%JMP T3CHK_^1DLPS_!NUM 0_^1_%EJT_]_^1**********************************************************************€€**_^1*_]_'*_^1*_5DATA ERROR OUTPUT ROUTINE_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1DERMSG 0_"0_^1_%LDA =XMSG9EE-MSG9B_^1_%SQZ DER1-*-1_$CHECK FOR SHORT MSG_^1_%LDA =XMSG9E-MSG9B_^1DER1_!STA* MSGLNG_^1_%LDA* (DERMSG)_$MULTIPLIER VALUE_^1_%RAO* DERMSG_^1_%RTJ (RHXASC)_^1_%ADC (DOUT-*)_^1_%RTJ* CHKFLG_'CHECK FOR STOP OR €€NO PRINTOUT FLAGS_^1_%JMP* DER2_^1_%LDA* (DERMSG)_$COUNTER VALUE_^1_%RTJ (RHXASC)_^1_%ADC (DIN-*)_^1_%RTJ (MESAGE)_^1MES6_!NUM $0344_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG9B-MES6_^1MSGLNG ADC MSG9E-MSG9B_^1DER2_!RAO* DERMSG_^1_%JMP* (DERMSG)_^1_%SPC 2_^1************************************************************************_^1*€€_]_'*_^1*_/INTERRUPT RESPONSE FOR TESTS 1 AND 2_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INTN1 LDQ FADR_^1_%RTJ* INPUT_^1_%STA INTST_(GET H/W STATUS_^1_%ENA 9_^1_%RTJ* OUTPUT_'ACKNOWLEDGE AND DISABLE INTERRUPT_^1_%JMP- (ADISP)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_€€^1*_2CHECK STOP AND NO PRINTOUT FLAGS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CHKFLG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_)CHECK STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CHKF1-*-1_^1_%JMP ENDMSG_^1CHKF1 LDA FLAG_^1_%AND- ONEBIT+7_$CHECK NO PRINTOUT FLAG_^1_%SAN CHKF2-*-1_^1_%RAO* CHKFLG_^1_%LDA REPEAT_'CONVERT CURRENT PASS TO€€ ASCII_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1CHKF2 JMP* (CHKFLG)_^1_%SPC 2_^1STOPCK 0_"0_,CHECK STOP FLAG ONLY_^1_%LDA FLAG_^1_%AND- ONEBIT_^1_%SAZ STOPC1-*-1_^1_%JMP ENDMSG_^1STOPC1 JMP* (STOPCK)_^1*_]_^1ERRCTR NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_4COMMON INPUT/OUTPUT ROUTIN€€ES_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1OUTPUT 0_"0_^1_%IIN 0_^1_%OUT 3_^1_%EIN 0_^1_%JMP* (OUTPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1*_]_^1INPUT 0_"0_^1_%IIN 0_^1_%CLR A_^1_%INP 3_^1_%EIN 0_^1_%JMP* (INPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1*_]_^1INTREJ 0_"0_,PROCESS REJECTS_^1_%STA* ASAVE_^1_%STQ* QSAVE_^1_%EN€€Q -4_^1_%LDA* (INTREJ),Q_"GET I/O INSTRUCTION_^1_%LDQ =AIN_^1_%JMP* FRMINT_^1EXTREJ 0_"0_,EXTERNAL REJECT ENTRY_^1_%STA* ASAVE_^1_%STQ* QSAVE_^1_%ENQ -5_^1_%LDA* (EXTREJ),Q_"GET I/O INSTRUCTION_^1_%LDQ =AEX_^1FRMINT STQ REJTYP_^1_%RTJ (RHXASC)_^1_%ADC (XREG-*)_^1_%RTJ- (AMONI)_%SCHEDULE DOWN TO LEVEL 4 IN CASE REJECT_^1SCHREF ADC 9*FRC+FX+4*FCP_"DURING INTERRUPT RESPONSE_^1€€_%ADC FRMSCH-SCHREF_^1_%JMP- (ADISP)_^1FRMSCH LDA* ASAVE_^1_%RTJ (RHXASC)_^1_%ADC (AREG-*)_^1_%LDA* QSAVE_^1_%RTJ (RHXASC)_^1_%ADC (QREG-*)_^1_%LDA TNUM_)IS TEST NUM = 0_^1_%SAN 1_^1_%JMP* RJEXIT_'YES DONT PRINT MESSAGE_^1_%RTJ* CHKFLG_'CHECK STOP AND NO PRINTOUT FLAGS_^1_%JMP* RJEXIT_^1_%RTJ (MESAGE)_^1MES7_!NUM $0344_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%ADC MSG5B-MES7_^€€1_%ADC MSG5E-MSG5B_^1_%ADC MSG10B-MES7_^1_%ADC MSG10E-MSG10B_^1RJEXIT JMP ENDTST_^1ASAVE NUM 0_^1QSAVE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/SECTION 3 -- TIME BASE COMPARISON TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CHK LDA TESTS_^1_%AND- O€€NEBIT+3_$IS TEST THREE REQUESTED_^1_%SAN TEST3-*-1_^1_%JMP* T4CHK_^1TEST3 LDA =A3_*YES, DO IT_^1_%STA TNUM_^1_%LDA REPT_)LOAD WITH TEST 3 REPEAT FLAG_^1_%SAN TEST3A_'SEE IF SECOND RUN IF SO DONT ASK FOR PARMS_^1_%RAO* REPT_)SET TEST 3 ONE TIME THROUGH FLAG_^1T3_#RTJ PARAM_(INPUT SECOND SET OF PARM FOR TEST 3 AND 4_^1TEST3A RTJ* TBASE_(GO TO TIME BASE ROUTINE_^1_%LDA SYNC_^1€€_%SAM TEST3B-*-1_"IF SYNC IS NEGATIVE DO NOT PRINT RESULTS_^1_%RTJ* PRESLT_^1TEST3B JMP* T4CHK_^1*_]_^1*_]_^1REPT_!NUM 0_,SECOND RUN FLAG FOR TEST 3_^1*_]_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_#SECTION 4 -- TIME BASE COMPARISON TEST, OPERATOR CONTROLLED_$*_^1*_]_'*_^1******************************************************€€******************_^1_%SPC 2_^1T4CHK LDA TESTS_^1_%AND- ONEBIT+4_$IS TEST FOUR REQUESTED_^1_%SAN TEST4-*-1_^1_%JMP ENDTST_^1TEST4 LDA =A4_*YES, DO IT_^1_%STA TNUM_^1_%RTJ PARAM_(INPUT SECOND SET OF PARM FOR TEST 3 AND 4_^1_%RTJ* TBASE_(GO TO TIME BASE ROUTINE_^1_%LDA SYNC_^1_%SAM TEST4B_'IF SYNC IS NEG DONT PRINT RESULTS_^1_%RTJ* PRESLT_^1TEST4B JMP ENDTST_^1_%SPC 2_^1€€************************************************************************_^1*_]_'*_^1*_0PRINT TEST RESULTS FOR TESTS 3 AND 4_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1PRESLT 0_"0_^1_%LDA* LSTCNT_'LST NUMBER OF INTERRUPTS_^1_%SAZ PRES1-*-1_^1_%INA -1_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1PRES1 RTJ (RHXASC)_^1_%ADC (LSTASC-*)€€_^1_%LDA* SRGCNT_'SRG NUMBER OF INTERRUPTS_^1_%SAZ PRES2-*-1_^1_%INA -1_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1PRES2 RTJ (RHXASC)_^1_%ADC (SRGASC-*)_^1_%LDA REPEAT_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1_%RTJ (MESAGE)_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG5B-MES8_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG11B-MES8_^1_%ADC MSG11E€€-MSG11B_^1_%JMP* (PRESLT)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:TIME BASE ROUTINE_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TBASE 0_"0_^1_%IIN_]_^1_%LDA =XINTN3-HERE SET INT RESPONSE FOR TIME BASE ROUTINE_^1_%ADD HERE_^1_%LDQ INTLNE_'LOAD WITH INTERRUPT LINE_€€^1_%QLS 2_,MULT BY 4_^1_%STA+ $103,Q_'SELECT INTERRUPT RESPONSE FOR TEST 3 AND 4_^1_%CLR A_^1_%STA* LSTCNT_'CLEAR INTERRUPT COUNTERS_^1_%STA* SRGCNT_^1_%STA* OLVAL_^1_%LDQ SYNC_^1_%QLS 13_^1_%SQP TB1-*-1_^1_%INA $20_*ENABLE SRG SYNC_^1TB1_"QLS 1_^1_%SQP TB2-*-1_^1_%INA 4_,ENABLE LST SYNC_^1TB2_"INA $12_*ENABLE SYNC AND INTERRUPTS_^1_%STA* SYNCEN_^1_%LDQ DADR_^1_%LDA MUL€€T_^1_%RTJ OUTPUT_'SET MULTIPLIER CONTENTS_^1TB3_"LDQ FADR_^1_%ENA 2_^1_%RTJ OUTPUT_'ENABLE LST INTERRUPT_^1TB4_"LDQ TYPE_)LOAD WITH COMPUTER TYPE_^1_%LDA DALTIM,Q_$LOAD WITH DELAAY TIME COUNTS_^1_%STA* DLYINT_^1TB5_"LDA* OLVAL_^1_%SUB* LSTCNT_'HAS THERE BEEN A CHANGE_^1_%SAP TB6-*-1_^1_%LDA* LSTCNT_^1_%STA* OLVAL_(SAVE CURRENT COUNT_^1_%JMP* TB4_*RESET DELAY_^1TB6_"SNO TB6A€€-*-1_$CLEAR OVERFLO CONDITION_^1TB6A_!RAO* DLYINT_'IF THIS INST. CAUSES AN OVERFLO DELAY HAS EXP._^1_%SNO TB7-*-1_%HAS DELAY EXPIRED_^1_%JMP* (TBASE)_%YES, RETURN TO CALLER_^1TB7_"JMP* TB5_*NO, CONTINUE DELAY_^1*_]_^1LSTCNT NUM 0_^1SRGCNT NUM 0_^1OLVAL NUM 0_^1DLYINT NUM 0_^1SYNCEN NUM 0_^1ACKN_!NUM 0_^1*_]_^1*_]_^1*_$DELAY TIMES FOR TESTS 3 AND 4_^1*_]_^1*_]_^1DALTIM NUM €€ $5668_(1784-2 COMPUTER_^1_%NUM $68EA_(1784-1 COMPUTER_^1_%NUM $6C77_(1704/14 COMPUTER_^1_%NUM $77D7_(1774 SC COMPUTER_^1*_]_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/INTERRUPT RESPONSE FOR TESTS 3 AND 4_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INTN3 LDQ FADR_€€)INTERRUPT ENTRY_^1_%RTJ INPUT_(INPUT STU STATUS_^1INTN31 SAP INTN32-*-1_"IS SRG INT SET_^1_%RAO* SRGCNT_'YES, UPDATE COUNTER_^1_%INA 8_,ADD BIT TO ACKN SRG_^1INTN32 ALS 1_^1_%SAP INTN33-*-1_"IS LST INT SET_^1_%RAO* LSTCNT_'YES UPDATE COUNTER_^1_%INA 2_,ADD BIT TO ACKN LST_^1INTN33 ALS 1_,CLEAR STATUS BITS_^1_%ARS 2_,CORRECT BIT POSITIONS_^1_%EOR* SYNCEN_'ADD ENABLE BITS_^1€€_%STA* ACKN_^1_%LDA LSTINT_'HAS NUMBER OF INTERRUPTS REQUESTED OCCURRED_^1_%SUB* LSTCNT_^1_%SAP INTN34-*-1_^1_%ENA 9_,YES, ACKN AND DISABLE LST INT_^1_%JMP* INTN35_^1INTN34 LDA* ACKN_)NO, ACKN AND ENABLE_^1INTN35 LDQ FADR_^1_%RTJ OUTPUT_'OUTPUT FUNCTION SELECTED_^1_%JMP- (ADISP)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_€€8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST LDA FLAG_)CHECK STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ END0_^1_%JMP* ENDMSG_^1END0_!LDA RUNS_^1_%SAZ ENDMSG-*-1_"CHECK FOR ZERO RUNS REQUESTED_^1_%SAM END1-*-1_$CHECK FOR INFINITE RUNS REQUESTED_^1_%SUB* REPEAT_^1_%SAZ ENDMSG_'CHECK FOR NUM RUNS REQUESTE€€D COMPLETED_^1END1_!RAO* REPEAT_^1_%JMP BEGIN_^1_%LDQ INTLNE_^1_%QLS 2_^1_%LDA TRPSAV_'LOAD ORGINAL TRAP ADDRESS_^1_%IIN_]_^1_%STA+ $103,Q_^1_%EIN_]_^1*_]_^1************************************************************************_^1*_]_^1*_$ENABLE LST AND SRG_^1*_]_^1************************************************************************_^1*_]_^1ENDMSG LDQ FADR_^1_%LDA =N$00€€12_%ENABLE LST,SRG_^1_%OUT 1_,ENABLE TIMER_^1_%NOP 0_^1*_]_^1*_$RESTART THE DIAGNOSTIC TIMER AND TIME-OF-DAY PROGRAM_^1*_]_^1_%LDA* RSTRTA_^1_%EOR- LPMSK+15_^1_%SAN 1_^1_%JMP* STOD_)SKIP IF DTIMER NOT PRESENT_^1_%RTJ- ($F4)_^1_%NUM $5206_^1RSTRTA ADC DTIMER_^1*_]_^1STOD_!LDA* TTRSTR_'START TIME-OF-DAY PROGRAM_^1_%EOR- LPMSK+15_^1_%SAN 1_^1_%JMP* END2_)NOT PRESENT_^1_%RTJ- ($€€F4)_^1_%NUM $5206_^1TTRSTR ADC UPTOD_^1*_]_^1END2_!LDA* REPEAT_^1_%RTJ (ROCDEC)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RTJ (MESAGE)_^1MES9_!NUM $8244_^1_%ADC MSG12B-MES9_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG3B-MES9_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_^1_%AND€€- ONEBIT+6_$CHECK FOR STOP TO RE-ENTER PARAMETERS_^1_%SAZ END3-*-1_^1_%LDA- ONEBIT+15_#YES, RESET FLAGS EXCEPT BUSY_^1_%STA FLAG_^1_%JMP ENTER_^1END3_!STA FLAG_^1_%LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$RELEASE CORE_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%SPC 2_^1************************************************************************_^€€1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN 1572-1 STU ** OFF-LINE ** TEST$_^1_%NUM $D00_^1_%EQU MSG1E(*)_^1MSG2B ALF 5,TESTS,RUNS_^1_%EQU MSG2E(*)_^1MSG3B ALF $,_!AUTOLOAD SYSTEM TO ASSURE CORRECT OPERATION$_^1_%EQU MSG3E(*)_^1MSG4B ALF 11,LST INT CNT,MULT,SYNC_^1_%€€EQU MSG4E(*)_^1MSG5B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 2,RUN_^1ERRPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 9,_#NO INT RCVD,_^1_%EQU MSG6E(*)_^1_%EQU HTYPE1(MSG6B)_^1MSG7B ALF 9,_#ILLEGAL INT,_^1_%EQU MSG7E(*)_^1_%EQU HTYPE2(MSG7B)_^1MSG8B ALF 6, FUNCTION =_^1FNCASC NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 8, DATA TO MULT =_^1DOUT_!NUM 0,0_^1_%EQU MSG9EE(*)_^1_%AL€€F 9, DATA FROM CNTR =_^1DIN_"NUM 0,0_^1_%EQU MSG9E(*)_^1MSG10B ALF $,_"TERNAL REJECT$_^1_%EQU REJTYP(MSG10B+1)_^1_%ALF 3, Q =_^1QREG_!NUM 0,0_^1_%ALF 3, A =_^1AREG_!NUM 0,0_^1_%ALF 3, X =_^1XREG_!NUM 0,0_^1_%EQU MSG10E(*)_^1MSG11B ALF 11, TIME BASE COMP RSLTS_^1LSTASC NUM 0,0_^1_%ALF 5, LST INTS_^1SRGASC NUM 0,0_^1_%ALF 5, SRG INTS_^1_%EQU MSG11E(*)_^1MSG12B AL€<F 11,END 1572-1 STU TEST,_^1RUNASC NUM 0,0_^1_%ALF 3, RUNS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%NUM $D00_^1_%EQU MSG12E(*)_^1*_]_^1MSG13B ALF $, INCORRECT TIMER FOR TEST$_^1_%EQU MSG13E(*)_^1MSG14B ALF $,INTERRUPT LINE, WEMS CODE FOR TIMER,COMPUTER TYPE$_^1_%EQU MSG14E(*)_^1_%EQU END(*)_^1_%END 0_^__<PSCMTTY CSY/ B75 P€1_%NAM SCMTTY_(DECK-ID B75 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_*ON-LINE TELETYPEWRITER TEST_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_*M A S S_!M E M O R Y_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1*********************************************€€***************************_^1*_]_'*_^1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_$SCMTTY IS A DIAGNOSTIC EXERCISER FOR THE 713 CRT_^1*_$, 1743-2 COMM CONTROLLER, 1595 SERIAL I-O CARD,_^1*_$AND 1711/1713 TELETYPEWRITER. IT OPERATES UNDER THE CONTROL_^1*_$OF THE DIAGNOSTIC EXECUTIVE SCMEXC AND USES THE M€€.S.O.S._^1*_$DRIVERS FOR ALL COMMUNICATION WITH THE TYPER SUBSYSTEM._^1*_$BEFORE TEST EXECUTION IS STARTED, THE USER IS REQUESTED_^1*_$TO INPUT THE TEST PARAMETERS -- LOGICAL UNIT, TEST SECTION_^1*_$TO BE EXECUTED AND THE NUMBER OF TIMES TO EXECUTE THE TEST_^1*_$SECTION. THE LOGICAL UNIT IS CHECKED FOR VALIDITY AND IF_^1*_$INVALID, THE USER IS REQUESTED TO RE-ENTER THE TEST PARA-_^€€1*_$METERS. SCMTTY IS DIVIDED INTO THREE SECTIONS (TESTS) AS_^1*_$FOLLOWS:_^1*_*SECTION 1_!OUTPUT CHARCTER TEST_^1*_*SECTION 2_!ECHO TEST_^1*_*SECTION 3_!SELECTABLE OUTPUT CHARACTER TEST_^1*_$SECTION ONE OUTPUTS THE COMPLETE CHARACTER SET AND REPEATS_^1*_$UNTIL CARRIAGE LENGTH IS REACHED. ON COMPLETION OF EACH I/O_^1*_$REQUEST, A CHECK IS MADE FOR HARDWARE ERRORS. IF THE M.S.O.S._^€€1*_$DRIVER DETECTED AN ERROR, THE TEST RETRIVES THE ALTERNATE_^1*_$DEVICE HANDLER ERROR CODE TO DETERMINE THE HARDWARE FAIL-_^1*_$URE.THE TEST ALSO PATCHES THE "LOG1" TABLE SUCH THAT WHEN_^1*_$AN ERROR OCCURS CONTROL IS SENT BACK TO THE TEST WITHOUT_^1*_$USER ACTION. THIS IS DONE BY ALTERNATING TO THE SOFTWARE_^1*_$DUMMY. AT THE END OF EACH PASS OF THE TEST SECTION BEING_^1*_$EXECU€€TED, A PASS COUNTER IS UPDATED AND COMPARED AGAINST_^1*_$THE NUMBER OF TIMES REQUESTED BY THE USER. IF EQUAL, THE_^1*_$TEST IS TERMINATED. THE STOP FLAG IS ALSO CHECKED AND IF_^1*_$SET THE TEST IS TERMINATED. IF $8000 IS ENTERED FOR THE_^1*_$NUMBER OF EXECUTIONS, THE TEST SECTION WILL BE EXECUTED_^1*_$INDEFINITELY._^1_%EJT_]_^1*******************************************************€€*****************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU ONE€€BIT($23)_!START OF ONE BIT TABLE_^1_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATOR_^1*_]_^1_%EXT LOG1A_(LINK TO LOG1A TABLE_^1*_]_^1_%EQU ERCODE(13)_"PHYTAB WORD CONTAINING ALTDEV ERROR CODE_^1_%EQU MFF($A)_^1_€€%EQU MFF00($1A)_^1_%EQU M20($28)_^1_%EQU TSTTTY(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTTTY_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATION REGION_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF $,TSTTTY$_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NU€€M $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:PARAMETER INPUT_;*_^1*_]_'*_^1****€€********************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1_%STA* COMFLG_'CLEAR 1743-2, 1595 FLAG_^1_%STA REPEAT_^1_%STA ERRCTR_^1ENTER1 RTJ* (MESAGE)_$OUTPUT INITIAL MSG_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET TEST PARAMETERS_^1INI1_!RTJ* (GETFLD)_^1_%SQP FLDOK1_^1_%JMP €€ ENDMSG_'RUBOUT ENTERED--ABANDON TEST_^1FLDOK1 INQ -1_^1_%STA* LU,Q_^1_%INQ -2_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA* LINES_(CONVERT_^1_%SAM INI2A_5(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%NO. OF LINES_^1INI2A STA* LINES_^1_%LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA SELLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_$CK IF LU LEGAL_^€€1_%AND =N$3FF0_^1_%ARS 4_^1_%SUB =N$300_'1711 TELETYPEWRITER ($300)_^1_%SAZ GO_^1_%INA -4_+713 CRT_-($304)_^1_%SAZ GO_^1_%INA -22_*1713 TELETYPEWRITER ($31A)_^1_%SAZ GO_^1_%RAO* COMFLG_'ITS A 1595 OR 1743 SO SET FLAG_^1_%INA -$1A_)1595_*($334)_^1_%SAN LU1743_^1_%JMP* GO_^1LU1743 INA -3_+1743-2_#($337)_^1_%SAN LUER_^1GO_#JMP* INI3_^1LUER_!RAO* INPERR_^1_%RTJ* (MESAGE)_€€$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG4B-MES2_^1_%ADC MSG4E-MSG4B_^1_%LDA* INPERR_'IS THIS THE THIRD L.U. ERROR_^1_%INA -3_^1_%SAZ GOEX_^1_%JMP* ENTER1_^1GOEX_!JMP ENDMSG_'YES, TERMINATE TEST_^1INI3_!CLR A_^1*_'1 - CARD DELETED_^1_%STA* REPEAT_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1TEST_!NUM 0_^1LINES NUM €€ 0_^1PHYLOC NUM 0_^1INPERR NUM 0_^1COMFLG NUM 0_,SET WHEN TYPE IS 1595 OR 1743-2_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_1SECTION 1_!OUTPUT CHARACTER TEST_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TEST_)CK IF TEST ONE REQUESTED_^1_%AND- ONEBIT+1_^1_%SAN€€ TEST1-*-1_^1_%JMP* T2CK_^1TEST1 RTJ SETBUF_'PUT CHARACTER SET IN BUFFER_^1_%RTJ* DOIO_)OUTPUT CHARACTER BUFFER_^1_%RTJ ENDTST_^1_%JMP* TEST1_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7SECTION 2_!ECHO TEST_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* TEST_)€€CK IF TEST 2 REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 RTJ* INPMSG_^1_%RTJ* DOIO_)OUTPUT CHARACTER BUFFER_^1_%RTJ ENDTST_^1_%JMP* TEST2_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_,SECTION 3_!SELECTABLE OUTPUT CHARACTER TEST_,*_^1*_]_'*_^1**************************************************************€€**********_^1_%SPC 2_^1T3CK_!LDA* TEST_)CK IF TEST3 REQUESTED_^1_%AND- ONEBIT+3_^1_%SAN TEST3-*-1_^1_%JMP ENDMSG_^1TEST3 RTJ* INPMSG_^1_%RTJ* DOIO_)OUTPUT CHARACTER BUFFER_^1_%RTJ* ENDTST_^1_%JMP* TEST3+1_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1REQUEST AND INPUT CHARACTER STRING_1*_^1*_]_'*_^1**************************€€**********************************************_^1_%SPC 2_^1INPMSG 0_"0_^1_%LDA- 0_^1_%ADC MSG3E-MSG3B_^1_%STA* SIZE_^1_%LDA- 0_^1_%ADC MSG3B-REF1_^1_%STA* ADDRES_^1_%RTJ* DOIO_)OUTPUT USER DIRECTIONS_^1_%ENA 37_^1_%STA* SIZE_^1_%LDA- 0_^1_%ADC CHAR1A-REF1_^1_%STA* ADDRES_^1_%ENQ 36_+ZERO_^1_%ENA 0_-OUT_^1S00A1 STA CHAR1A,Q_'THE_^1_%INQ -1_/INPUT_^1_%SQM S00A2_,BUFFER_^1_%€€JMP* S00A1_^1S00A2 LDA* READ_^1_%STA* REF1_^1_%RTJ* DOIO_)INPUT STRING OF CHARACTERS_^1_%CLR A_^1_%STA- I_^1S000A LDA CHAR1A,I_$GET WORD FROM BUFFER_^1_%TRA Q_,SAVE IT TEMPORARY_^1_%SAN S000AA_'CHECK IF MESSAGE ENDED_^1_%JMP* S000D_)ON AN EVEN CHARACTER_^1S000AA AND- MFF_*NO - CHECK IF_^1_%SUB- MFF_+ENDED ON ODD CHARACTER_^1_%SAN S000C_(NOT END OF MSG - PROCEED_^1_%TRQ A_,S€€TRIP OFF_^1_%AND- MFF00_)THE FF AND_^1_%ADD- M20_,REPLACE WITH A SPACE_^1_%STA CHAR1A,I_(STORE IT BACK INTO THE BUFFER_^1_%RAO- I_,BUMP MESSAGE LENGTH_^1_%LDA- I_,SET THE MSG LENGTH_^1S000B STA* SIZE_*IN THE WRITE REQUEST_^1_%LDA* WRITE_(SET TYPE_^1_%STA* REF1_*OF REQUEST_^1_%JMP* (INPMSG)_^1S000C RAO- I_,BUMP BUFFER INDEX_^1_%JMP* S000A_)GO GET NEXT WORD_^1S000D LDA- I_,MESSAG€€E ENDED ON EVEN CHARACTER_^1_%JMP* S000B_^1REPEAT NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_-COMMOM ROUTINE TO DO ALL I/O TO SELECTRIC_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1DOIO_!0_"0_^1_%RTJ- (AMONI)_^1REF1_!ADC 6*FRC+FX+4*FRP+4*FCP_%FORMAT WRITE CODE_^1_%A€€DC COMPLA-REF1_^1_%ADC 0_^1SELLU NUM 0_^1SIZE_!ADC SETA-CHAR1A_^1ADDRES ADC CHAR1A-REF1_^1_%JMP- (ADISP)_^1READ_!ADC 4*FRC+FX+4*FRP+4*FCP_%FORMAT READ CODE_^1WRITE ADC 6*FRC+FX+4*FRP+4*FCP_%FORMAT WRITE CODE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5CHECK FOR HARDWARE ERRORS_6*_^1*_]_'*_^1***************************€€*********************************************_^1_%SPC 2_^1COMPLA SQM 1_^1_%JMP* RETURN_^1_%LDQ* PHYLOC_^1_%LDA COMFLG_'IS IT A 1595 OR 1743-2_^1_%SAZ NTCOM_(NOT A 1595 OR A 1743-2_^1_%LDA- 19,Q_)DIFFERNT POSITION IN PHY DEVICE TABL_^1_%JMP* MSKOFF_^1NTCOM LDA- ERCODE,Q_$PICKUP ERROR CODE_^1MSKOFF AND- LPMSK+6_^1_%STA* ALTERR_'SAVE ERROR CODE_^1_%ENQ 0_^1ERCHK1 LDA* BITTAB,Q_$€€FIND ERROR IN TABLE_^1_%SAM RETURN_'END OF TABLE AND ERROR NOT FOUND_^1_%SUB* ALTERR_^1_%SAZ ERCHK6_'ERROR FOUND--LOCATE MESSAGE_^1_%INQ 1_^1_%JMP* ERCHK1_^1RETURN JMP* FORM5_^1ERCHK6 LDA FLAG_)CHECK FOR MPT SET_^1_%AND- ONEBIT+7_^1_%SAZ ERCHK7_^1_%JMP* FORM5_^1ERCHK7 TRQ A_,Q+INDEX TO ERROR TABLE--MUT BY 5_^1_%CLR Q_^1_%MUI =N5_^1_%TRA Q_^1_%LDA =XMSG6B-MES3_^1_%AAQ A_,€€A IS RELATIVE ADDR OF MESSAGE_^1_%STA* ERRMSG_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES3_!NUM $0244_^1_%ADC (START-MES3)_^1_%NUM 3_^1*_83-CARDS DELETED_^1ERRMSG NUM 0_^1_%ADC MSG6E-MSG6B_^1_%RAO ERRCTR_^1FORM5 LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ FORM6-*-1_^1_%JMP* ENDMSG_^1FORM6 JMP* (DOIO)_^1*_]_^1ALTERR NUM 0_,ALTDEV ERROR CODE_^1*_]_^1BITTAB NU€€M 0_,TIME OUT_^1_%NUM 1_,LOST DATA_^1_%NUM 2_,ALARM_^1_%NUM 3_,PARITY_^1_%NUM 5_,INT REJ_^1_%NUM 6_,EXT REJ_^1_%NUM 33_+LINE BREAK_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC €€2_^1ENDTST 0_"0_^1_%RAO* REPEAT_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA LINES_^1_%SAM END1-*-1_$INFINITE RUNS REQUESTED_^1_%SAZ ENDMSG-*-1_"ZERO RUNS REQUESTED_^1_%SUB* REPEAT_^1_%SAZ ENDMSG-*-1_"NUMBER OF RUNS REQUESTED ARE COMPLETE_^1END1_!JMP* (ENDTST)_^1*_]_^1ENDMSG LDA* REPEAT_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (€€RUNS-*)_^1_%LDA* ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRCTR-*)_^1*_]_^1_%RTJ (MESAGE)_$PRINT END MESSAGE_^1MES4_!NUM $8144_^1_%ADC MSG2B-MES4_^1_%ADC MSG2E-MSG2B_^1_%LDA FLAG_)CK FOR STOP TO RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_%CLEAR TEST NAME FROM PROGRAM STACK_^1_€€%LDQ START+2_^1_%RTJ (CLRSTK)_$CLEAR TEST NAME FROM PGM STACK, RELEASE CORE_^1_%ADC (START-*)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7RESET CHARACTER BUFFER_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1SETBUF NUM 0_^1_%RAO* CHAR1_(INCREMENT STARTING CHARACTER_^1_%L€€DA* CHAR1_(CHECK IF CHARACTER_^1_%SUB* SIXTY_)IS ILLEGAL_^1_%SAM S0001_(NO - GO FILL BUFFER_^1_%ENA $20_*YES - RESET STARTING_^1_%STA* CHAR1_)CHARACTER_^1S0001 LDA* CHAR1_(SET UP_^1_%STA* CHAR_*TO FILL BUFFER_^1_%CLR Q_.WITH LEGAL CHARACTERS_^1S0002 LDA* CHAR_)GET UPPER_^1_%ALS 8_-8 BITS_^1_%STA- I_.SAVE TEMPORARILY_^1_%LDA* CHAR_)CHECK IF NEXT_^1_%SUB =N$5F_)NEXT CHARACTER_€€^1_%SAM S0003_*WILL BE LEGAL_^1_%ENA $1F_*NO - RESET_^1_%STA* CHAR_*CHARACTER_^1S0003 LDA- I_^1_%ADD* CHAR_)COMBINE LOWER_^1_%INA 1_-8 BITS - INCREASE BY 1_^1_%STA* CHAR1A,Q_'AND STORE IN BUFFER_^1_%INQ 1_,INCREMENT BUFFER INDEX_^1_%TRQ A_,CHECK IF_^1_%SUB =N36_*BUFFER IS FULL_^1_%SAZ FINISH_'YES - GO PRINT BUFFER_^1_%LDA* CHAR_)SET UP_^1_%INA 2_-NEXT_^1_%STA* CHAR_+CHARAC€€TER_^1_%SUB* SIXTY_(CHECK IF_^1_%SAM S0004_)IT IS LEGAL_^1_%ENA $20_*NO - RESTORE_^1_%STA* CHAR_*CHARACTER_^1S0004 JMP* S0002_(GO FILL NEXT WORD_^1FINISH LDA =N$D00_'STORE CARRIAGE RETURN_^1_%STA* CHAR1A,Q_%IN OUTPUT BUFFER_^1_%STQ SIZE_)STORE NO. OF WORDS IN I/O REQUEST_^1_%JMP* (SETBUF)_$GO PRINT BUFFER_^1CHAR1 NUM $1F_^1CHAR_!NUM $1F_^1SIXTY NUM $60_^1_%SPC 2_^1*****€€*******************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN TTY TEST$_^1_%NUM $D00_^1_%ALF *,DLU,SECTIONS,LINES*_^1_%EQU MSG1E(*)_^1MSG2B ALF $,END TTY TEST $_^1RUNS_!NUM 0,0_^1_%ALF $, RUNS $_^1ERRCTR NUM 0,0_^1_%ALF€€ $, ERRORS$_^1_%EQU MSG2E(*)_^1MSG3B NUM $1200_^1_%ALF 11,INPUT CHARACTER STRING_^1_%NUM $D0A_^1_%EQU MSG3E(*)_^1MSG4B ALF *, DLU ERROR*_^1_%EQU MSG4E(*)_^1*_82-CARDS DELETED_^1MSG6B ALF 5, TIMEOUT_^1_%EQU MSG6E(*)_^1_%ALF 5, LOST DATA_^1_%ALF 5, ALARM_^1_%ALF 5, PARITY_^1_%ALF 5, INT REJ_^1_%ALF 5, EXT REJ_^1_%ALF $, LINE BRK$_^1_%SPC 2_^1**********************€**************************************************_^1*_]_'*_^1*_8SELECTRIC I/O BUFFER_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CHAR1A NUM 0_^1_%BZS (36)_)CHARACTER BUFFER_^1_%EQU SETA(*)_^1_%EQU END(*)_^1_%END_]_^__PS15721 CSY/ B76 P€1_%NAM S15721_'DECK-ID B76 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$1572-1 SAMPLE RATE GENERATOR HANDLING ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTR€€OL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS SUBROUTINE IS DESIGNED TO BE USED FOR INTERRUPTS ONLY WHEN_^1*_'THE 1572-1 (SRG PART) IS NOT THE BASIC SYSTEM TIME BASE_^1*_$IF THIS SUBROUTINE IS USED TO ENABLE THE SRG INTERRUPT, THE USER_^1*_'MUST SUPPLY A ROUTINE WITH ENTRY POINT SRG721 TO PERFORM ANY_^1*_'FUNCTIONS REQUIRED._^1*_$THIS SUBROUTINE IS CALLABLE FROM BOTH ASSEMBLY AND F€€ORTRAN_^1*_'PROGRAMS. PSEUDO RE-ENTRANCY IS ACHIEVED BY INHIBITING_^1*_'INTERRUPTS THROUGHOUT._^1*_$ASSEMBLY LANGUAGE CALL..._^1*_*RTJ+ S15721_'RTJ+ S15721_^1*_*ADC ICOMND_!OR_!ADC (ICOMND-*)_^1*_*ADC IVALUE_'ADC (IVALUE-*)_^1*_$WHERE ICOMND DEFINES THE OPERATION..._^1*_*1 = READ 1572-1 STATUS INTO IVALUE_^1*_*2 = READ 1572-1 SRG COUNTER INTO IVALUE_^1*_*3 = OUTPUT 1572-1 SRG €€COUNT FROM IVALUE_^1*_*4 = OUTPUT 1572-1 FUNCTION FROM IVALUE_^1*_$FOR ICOMND = 4 THE FUNCTION CODES ARE..._^1*_0BITS 2-15 UNUSED_^1*_0BIT 0 - 0 = DISABLE SRG INTERRUPT_^1*_6- 1 = ENABLE SRG INTERRUPT_^1*_0BIT 1 - 0 = DISABLE SRG SYNC_^1*_6- 1 = ENABLE SRG SYNC_^1*_'ON RETURN TO THE CALLER, THE VALUE IN THE A-REGISTER IS..._^1*_-0 = NO ERROR_^1*_,-1 = INTERNAL REJECT_^1*_-1 = EXTER€€NAL REJECT_^1*_$FORTRAN CALL..._"(AS INTEGER FUNCTION)_^1*_*INTEGER S15721_^1*_*IF(S15721(ICOMND,IVALUE)) 10,20,30_^1*_'WHERE PARAMETERS ARE AS DEFINED ABOVE_^1*_'STATEMENT EXECUTED IS..._^1*_,10 = INTERNAL REJECT_^1*_,20 = NO ERROR_^1*_,30 = EXTERNAL REJECT_^1_%EJT_]_^1* SUBROUTINE ENTRY POINTS_^1_%ENT S15721_'BASIC SUBROUTINE ENTRY_^1_%SPC 2_^1* SUBROUTINE EXTERNALS_^1_%EXT €€E15721_'BASIC W,E,S FUNCTION (IN SYSDAT)_^1_%EXT H15721_'1572-1 FUNCTION HISTORY (IN SYSDAT)_^1_%EXT END0V4_'LAST LOCATION IN PART 0_^1_%SPC 2_^1* SUBROUTINE EQUIVALENCES_^1_%EQU MFF7F($3A)_"$FF7F MASK_^1_%EQU ZERO($22)_#CELL CONTAINING ZERO_^1_%EQU LPMASK(2)_#LOGICAL PRODUCT MASK TABLE_^1_%SPC 2_^1S15721 NUM 0_,SUBROUTINE ENTRY_^1_%IIN 0_^1_%STQ* SAVEQ_(SAVE Q._^1_%LDQ* €€CODE_)ADDRESS OF W.E.S. IN SYSDAT_^1_%LDA- (ZERO),Q_$W.E.S. CODE_^1_%STA* CODEF_(SAVE W.E.S. CODE FOR FUNCTION/STATUS_^1_%AND- MFF7F_^1_%STA* CODED_^1_%RTJ* PARABS_^1_%STA* COMAND_'SAVE THE COMMAND_^1_%RTJ* PARABS_^1_%STQ* VALADD_'SAVE IVALUE ADDRESS_^1_%STA* IVALUE_'SAVE IVALUE_^1_%LDQ* CODED_^1_%LDA* COMAND_'USER COMMAND WORD_^1_%INA -4_+SUBTRACT 4 FROM ICOMND._^1_%SAM TRY3_^1_€€%JMP* OUT1_)OPTION 4._^1TRY3_!INA 1_^1_%SAM TRY2_^1_%LDA* IVALUE_^1_%OUT ERR-*_(OUTPUT VALUE OR FUNCTION._^1_%JMP* EXITOK_^1TRY2_!INA 1_^1_%SAM ONE_*OPTION 1._^1_%JMP* IN1_*OPTION 2._^1ONE_"LDQ* CODEF_(FUNCTION/STATUS ADDRESS_^1_%JMP* IN1_^1OUT1_!LDA H15721_'LOAD 1572-1 HISTORY FROM SYSDAT_^1_%AND* LSTMSK_'SAVE LST BITS_^1_%TRA Q_^1_%LDA* IVALUE_'PICK UP USER FUNCTION BITS_^€€1_%AND- LPMASK+2_$SAVE ONLY ALLOWABLE BITS_^1_%ALS 4_,SHIFT INTO POSITION_^1_%EAQ A_,COMBINE IN A_^1_%LDQ* CODEF_(W.E.S. CODE FOR FUNCTION/STATUS_^1_%OUT ERR-*_^1_%STA+ H15721_'UPDATE HISTORY WORD_^1_%JMP* EXITOK_^1IN1_"INP ERR-*_(INPUT VALUE OR STATUS._^1_%STA* (VALADD)_$STORE IN IVALUE._^1EXITOK CLR A_,NO ERROR EXIT_^1EXIT_!LDQ* SAVEQ_(RESTORE Q._^1_%EIN 0_^1_%JMP* (S15721)€€_$RETURN TO CALLER_^1ERR_"JMP* INREJ_^1_%ENA 1_,EXTERNAL REJECT._^1_%JMP* EXIT_^1INREJ ENA -1_^1_%JMP* EXIT_^1_%SPC 2_^1CODE_!ADC E15721_'ADDRESS OF FUNCTION/STATUS W.E.S._^1CODEF NUM 0_,FUNCTION/STATUS W.E.S._^1CODED NUM 0_,DATA W,E,S_^1LSTMSK NUM $6_^1SAVEQ NUM 0_,Q._^1COMAND NUM 0_,COMMAND_^1VALADD NUM 0_,ADDR. OF IVALUE._^1IVALUE NUM 0_,IVALUE_^1_%SPC 2_^1PARABS€€ NOP 0_,ABSOLUTIZE PARAMETER._!Q = PARAMETER ADDRESS_^1_%LDQ* S15721_'ADDRESS OF PARAMETER ADDRESS_^1_%SQM PART1_(CALLER IS IN PART 1_^1_%TRQ A_^1_%SUB =XEND0V4_$LAST ADDRESS IN PART 0_^1_%SAM PART0_(CALLER IS IN PART 0_^1_%SAZ PART0_(CALLER IS IN PART 0_^1PART1 LDA- (ZERO),Q_$ABSOLUTE ADDRESSING_^1_%JMP* PAR2_^1PART0 LDA- (ZERO),Q_$IS ADDRESS RELATIVE_^1_%SAP PAR2_)NO_^1_€²%AAQ A_,YES, ABSOLUTIZE IT_^1_%AND- LPMASK+15_^1PAR2_!TRA Q_^1_%LDA- (ZERO),Q_$OBTAIN THE PARAMETER_^1_%RAO* S15721_'BUMP RETURN ADDRESS_^1_%JMP* (PARABS)_$RETURN_^1_%END_]_^__²PT5954 CSY/ B77 P€1_%NAM T5954_(DECK-ID B77 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$594- 4/5 TRAIN IMAGE FOR 1742-120 PRINTER_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_8SLUG NUMBER_^1TRAIN ALF 2,0123_'01_?**MSOS 4.1**_^1_%ALF 2,4567_+02_^1_%ALF 2,BZ,/_+03_^1_%ALF 2,89AC_+04_^1_%ALF 2,(GH)_+05_^1_%€€ALF 2,RIFL_+06_^1_%ALF 2,MNOP_+07_^1_%ALF 2,[%"]_+08_^1_%ALF 2,DUST_+09_^1_%ALF 2,VWXY_+10_^1_%ALF 2,+-.E_+11_^1_%ALF 2,JKQ*_+12_^1_%ALF 2,0123_+13_^1_%ALF 2,4567_+14_^1_%ALF 2,$@'=_+15_^1_%ALF 2,89AC_+16_^1_%ALF 2,BZ,/_+17_^1_%ALF 2,RIFL_+18_^1_%ALF 2,MNOP_+19_^1_%ALF 2,(GH)_+20_^1_%ALF 2,DUST_+21_^1_%ALF 2,#\^!_+22_^1_%ALF 2,+-.E_+23_^1_%ALF 2,VWXY_+24_^1_%ALF €€ 2,0123_+25_^1_%ALF 2,4567_+26_^1_%ALF 2,JKQ*_+27_^1_%ALF 2,89AC_+28_^1_%NUM $263F_,29_^1_%NUM $3C3E_^1_%ALF 2,RIFL_+30_^1_%ALF 2,MNOP_+31_^1_%ALF 2,BZ,/_+32_^1_%ALF 2,DUST_+33_^1_%ALF 2,(GH)_+34_^1_%ALF 2,+-.E_+35_^1_%ALF 2,:;_ =_^1_%ALF 2,0123_+37_^1_%ALF 2,4567_+38_^1_%ALF 2,VWXY_+39_^1_%ALF 2,89AC_+40_^1_%ALF 2,JKQ*_+41_^1_%ALF 2,RIFL_+42_^1_%ALF 2,MNOP_+43_^€€1_%ALF 2,[%"]_+44_^1_%ALF 2,DUST_+45_^1_%ALF 2,BZ,/_+46_^1_%ALF 2,+-.E_+47_^1_%ALF 2,(GH)_+48_^1_%ALF 2,0123_+49_^1_%ALF 2,4567_+50_^1_%ALF 2,$@'=_+51_^1_%ALF 2,89AC_+52_^1_%ALF 2,VWXY_+53_^1_%ALF 2,RIFL_+54_^1_%ALF 2,MNOP_+55_^1_%ALF 2,JKQ*_+56_^1_%ALF 2,DUST_+57_^1_%ALF 2,#\^!_+58_^1_%ALF 2,+-.E_+59_^1_%ALF 2,BZ,/_+60_^1_%ALF 2,0123_+61_^1_%ALF 2,4567_+62_^1_%A€άLF 2,(GH)_+63_^1_%ALF 2,89AC_+64_^1_%NUM $263F_,65_^1_%NUM $3C3E_^1_%ALF 2,RIFL_+66_^1_%ALF 2,MNOP_+67_^1_%ALF 2,VWXY_+68_^1_%ALF 2,DUST_+69_^1_%ALF 2,JKQ*_+70_^1_%ALF 2,+-.E_+71_^1_%ALF 2,:;_ =_^1_%END_]_^__ άPREWCK CSY/ B78 P€1_%NAM REWCK_(DECK-ID B78 PERIPH. DRIVERS 1.0B SUMMARY-106_^1*_$REWIND CHECK SUBROUTINE FOR D1732/D17322_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORP. 1976_^1_%SPC 3_^1_%ENT REWCK_^1_%EQU EWES(7)_^1_%EQU ESTAT1(9)_^1_%EQU UNTMOD(16)_^1_%EQU ZROBIT($33)_^1_%EQU MONI($F4)_^1_%EQU DISP($EA)_^1REWCK STQ- I_^€€1_%LDQ- EWES,I_'EQUIPMENT CODE_869*1587_^1_%INQ 1_^1_%LDA- UNTMOD,I_$UNIT SELECT CODE_^1_%INA 4_,SET BINARY MODE_^1_%IIN 0_^1_%OUT AGRWCK-*_$SELECT UNIT_^1_%INQ -1_^1_%INP AGRWCK-*_$STATUS_^1_%EIN 0_^1_%ALS 5_,LOAD POINT TO BIT 15_^1_%SAM ATLOAD_^1AGRWCK NOP 0_,NOT AT LOAD OR REJECT OR BUSY_^1_%LDQ- I_,PICK UP PHYSTB ADDRESS_^1_%SCHDLE REWCK,3,,1_^1_%JMP- (DISP)_^1ATLOAD€Έ LDA- ESTAT1,I_$GOT LOAD POINT_^1_%AND- ZROBIT+6_$RESET REWIND BIT_^1_%STA- ESTAT1,I_^1_%LDQ- I_^1_%STQ* ADR_^1_%RTJ- (MONI)_^1_%NUM $6000_^1ADR_"ADC *_^1_%JMP- (DISP)_^1_%END_]_^__ ΈPSCMHFP CSY/ B79 P€1_%NAM SCMHFP_'DECK-ID B79 PERIPH. DRIVERS 1.0B SUMMARY-106_^1MSG_"MAC N,D_^1_%LOC X_^1_%RTJ'.' (MESAGE)_^1_%NLS_]_^1_%IFC 'D',EQ,LST_^1_%LST_]_^1'X'_"NUM $0133_^1_%NLS_]_^1_%EIF_]_^1_%IFC 'D',EQ,COM_^1_%LST_]_^1'X'_"NUM $8133_^1_%NLS_]_^1_%EIF_]_^1_%LST_]_^1_%ADC MSG'N'B-'X'_^1_%ADC MSG'N'L_^1_%EMC_]_^1MSA_"MAC N,A_^1MSG'N'B ALF #,'A'#_^1MSG'N'L EQU MSG'N'L(*-MSG'N'B€€)_^1_%EMC_]_^1_%EJT_]_^1*_$PERIPHERAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORP. 1976_^1_%SPC 5_^1_%EXT E17811_^1_%EXT* FLOTS,DFLOTS_^1_%EXT FMASK_^1*_]_^1*_$SYSTEM EQUIVALENCES_^1*_]_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU ZROBIT($33)_^1_%EQU HIBITS($13)_^1_%EQU LPMASK($3)_^1_%EQU H7FFF($11)_^1_%EQU MONI($F4)_^1€€_%EQU DISP($EA)_^1_%EQU HFFFF($12)_^1_%EJT_]_^1*_]_^1*_$DESCRIPTION OF BIT USAGE IN FLAG WORD_^1*_]_^1*_*BIT 00 - TEST HFPU IN SINGLE PRECISION MODE_^1*_*BIT 01 - TEST HFPU IN DOUBLE PRECISION MODE_^1*_*BIT 02 - USE STATUS RATHER THAN REJECT WAIT FOR HFPU_^1*_*BIT 03 - LOOP ON REGISTER TEST_^1_%SPC 2_^1*_*BIT 04 -_^1*_*BIT 05 -_^1*_*BIT 06 - MINIMUM ERROR PRINTOUT_^1*_*BIT 07 - €€ALLOW ILLEGAL OPERATION CODES_^1_%SPC 2_^1*_*BIT 08 - I/O RESET PRIOR TO EACH CALLING SEQUENCE_^1*_*BIT 09 - WAIT FOR OPERATOR ACTION AFTER DETECTING ERROR_^1*_*BIT 10 - SUPPRESS DATA BLOCK PRINTOUT ON ERROR_^1*_*BIT 11 - SUPPRESS CALLING SEQUENCE PRINTOUT ON ERROR_^1_%SPC 2_^1*_*BIT 12 - SUPPRESS REGISTER PRINTOUT ON ERROR_^1*_*BIT 13 - SUPPRESS ALL ERROR PRINTOUTS_^1*_*BIT 14 -€€ GENERATE ONE CALLING SEQUENCE AND REPEAT_^1*_*BIT 15 - RESTART WITH OPERATOR ENTERED VALUES_^1_%SPC 3_^1_%EQU RESMSK($0127)_^1_%EQU MAXWDS(200)_!MAXIMUM NUMBER OF COMMAND WORDS_^1_%EQU SZEBLK(1024)_^1_%EQU MAXBYT(SZEBLK/17*4)_^1_%EQU TSTHFP(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTHFP_^1_%EJT_]_^1START ALF *,TSTHFP*_^1_%ADC END-START_#LENGTH OF PROGRAM_^1_%NUM $102_)PSR LEVE€€L_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER - FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%EJT_]_^1BEGIN MSG* 01,COM_^1_%MSG* 17,COM_^1_%LDA FMASK_(PICK UP SYSTEMS FMASK_^1AFMASK EQU AFMASK(*-1)_^1_%EOR- LPMASK+14_^1_%SAZ BEG1_)SKIP IF UNPATCHED_^€€1_%LDA* (AFMASK)_^1_%STA SFMASK_'SAVE IT DURING EXECUTION OF TEST_^1_%ENA 0_^1_%STA* (AFMASK)_$CLEAR FMASK_^1BEG1_!ENQ 14_^1_%LDA =XSZEBLK_$IF SZEBLK = 2**X ,_^1X2_#ALS 1_-THEN BLKSZE = X-1_^1_%INQ -1_^1_%SAM JJ_^1_%JMP* X2_^1JJ_#STQ BLKSZE_^1_%ENA 0_^1_%STA ERRCNT_^1_%STA HDRFLG_'CLEAR ERROR HEADER FLAG_^1_%RTJ* HERE_^1HERE_!NUM 0_^1_%LDQ* HERE_^1_%LDA =XTSTBUF-HERE_^€€1_%AAQ A_^1_%STA LOWBL1_^1_%LDA =XBUFEND-HERE_^1_%AAQ A_^1_%STA TOPBL1_^1_%LDA =XTSTBF1-HERE_^1_%AAQ A_^1_%STA LOWBL2_^1_%LDA =XBUFND1-HERE_^1_%AAQ A_^1_%STA TOPBL2_^1_%LDA =XDATBLK-HERE_^1_%AAQ A_^1_%STA ORGDAT_^1_%LDA =XSFWRSC-HERE_^1_%AAQ A_^1_%STA SFTHLD_^1_%LDA =XADRFLT-HERE_^1_%AAQ A_^1_%ADD ADRFLT_^1_%STA ADRFLT_^1_%LDA =XADRDFL-HERE_^1_%AAQ A_^1_%ADD €€ ADRDFL_^1_%STA ADRDFL_^1_%LDA =XSTPBUF-HERE_^1_%AAQ A_^1_%STA STPADD_^1_%EJT_]_^1RESTRT MSG* 03,COM_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1INI1_!RTJ* (GETFLD)_^1_%SQP FLGOK1_^1_%JMP ENDIT_^1FLGOK1 INQ -1_^1_%STA FLAGWD,Q_$STORE PARAMETER_^1_%INQ -3_+CHECK FOR 4 VALUES_^1_%SQZ INI2_)SKIP IF DONE_^1_%JMP* INI1_)GO BACK FOR ANOTHER ONE_^1INI2_!RTJ RCHKIO_'TEST REGISTERS_^1_%LDA F€€LAGWD_^1_%AND- ONEBIT+3_^1_%SAZ INI2AA_'SKIP IF REG TEST NOT TO BE REPEATED_^1_%LDA* FLAG_^1_%AND- ONEBIT+0_$CHECK IF STOP FLAG IS SET_^1_%SAN INI2AA_'SKIP IF IT IS_^1INIBRK SCHDLE INI2-INIBRK-1,3,R RESCHEDULE TO ALLOW MI_^1_%JMP- ($EA)_^1_%SPC 2_^1INI2AA LDA NPASS_^1_%SAM INI2A_^1_%RTJ* (RDECHX)_^1_%STA NPASS_^1INI2A LDA BYTES_^1_%RTJ* (RDECHX)_^1_%STA BYTSPC_^1_%STA B€€YTES_^1_%LDA FLAGWD_^1_%SAP INI2B_(SKIP IF NOT RESTART REQUEST_^1_%JMP RESTAR_^1INI2B LDA FLAGWD_^1_%AND- ONEBIT+7_$TEST FOR ILLEGAL OP CODES ALLOWED_^1_%SAZ TEST0_(SKIP IF NOT_^1_%ENA 1_^1_%STA ILOPFG_'ALLOWED, SET FLAG_^1_%JMP* TEST1_^1TEST0 ENA 0_^1_%STA* PASSES_'CLEAR INTERMEDIATE PASS COUNTER_^1_%STA* PASNBR_'CLEAR PASS COUNTER_^1_%STA ILOPFG_'CLEAR ILLEGAL OP CODE €€FLAG_^1TEST1 LDA FLAGWD_^1_%AND- LPMASK+1_^1_%SAN TEST1A_^1_%ENA 1_^1_%STA RPRCFL_^1_%JMP* TEST2_^1TEST1A ENQ 0_^1_%STQ RPRCFL_^1_%AND- ONEBIT+0_$CHECK FOR SINGLE PRECISION TEST_^1_%SAZ TEST2_^1_%ENA 0_^1_%STA DFLG_)SET DFLG FOR SINGLE PRECISION_^1_%JMP* TEST3_^1TEST2 LDA FLAGWD_^1_%AND- ONEBIT+1_$CHECK FOR DOUBLE PRECISION TEST_^1_%SAZ TEST3_^1_%ENA 1_^1_%STA DFLG_)€€SET DFLG FOR DOUBLE PRECISION_^1TEST3 LDA BYTSPC_'IF BYTSPC.EQ.0, LET BYTSPC BE DETERMINED RANDO_^1_%SAN TEST3A_^1_%ENA 1_^1_%STA RSPCFL_^1_%JMP* TEST4_^1TEST3A ENA 0_^1_%STA RSPCFL_^1TEST4 LDA FLAGWD_^1_%AND- ONEBIT+14_#CHECK FOR GENERATE ONE CALLING SEQUENCE_^1_%SAZ TEST4A_'SKIP IF NOT SET_^1_%RAO UNCLPF_'SET UNCONDITIONAL LOOP FLAG_^1_%JMP* TESTX_^1TEST4A ENA 0_^1_%S€€TA UNCLPF_'CLEAR UNCONDITIONAL LOOP FLAG_^1TESTX LDA XX_^1_%STA OLDX_^1_%LDA XY_^1_%STA OLDY_^1_%RTJ RANCSQ_'GENERATE A RANDOM CALLING SEQUENCE_^1_%LDA FLAG_^1_%AND- ONEBIT+0_^1_%SAZ TESTX1_^1_%JMP* ENDIT_^1TESTX1 SCHDLE LOOPCK-TESTX1-1,3,R RESCHEDULE TO ALLOW MI_^1_%JMP- ($EA)_^1_%SPC 3_^1PASSES NUM 0_^1PASNBR NUM 0_^1_%SPC 3_^1LOOPCK RAO* PASSES_'BUMP INTERMEDIATE P€€ASS COUNTER_^1_%LDA* PASSES_^1_%SUB =N10000_%10000 INTERMEDIATE PASSES = 1 MAIN PASS_^1_%SAP LOOPC0_'SKIP IF 10000 INTERMEDIATE PASSES DONE_^1_%JMP* TESTX_^1LOOPC0 CLR A_^1_%STA* PASSES_'ZERO INTERMEDIATE LOOP COUNTER_^1_%RAO* PASNBR_'BUMP PASS COUNTER_^1_%LDA NPASS_^1_%SAP LOOPC1_^1_%JMP* TESTX_(EXECUTE TEST AGAIN_^1LOOPC1 SAZ ENDIT_^1_%INA -1_^1_%SAN LOOPC2_^1_%JMP* ENDIT_€€^1LOOPC2 STA NPASS_^1_%JMP* TESTX_(EXECUTE TEST AGAIN_^1ENDIT LDA ERRCNT_'PICK UP ERROR COUNTER_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (MSG02B+15-*)_^1_%LDA* PASNBR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (MSG02B+9-*)_^1_%MSG 02,COM_^1_%LDA FLAG_^1_%AND- ONEBIT+6_$CHECK FOR PARAMETER ENTRY REQUEST_^1_%SAZ EXIT_)SKIP IF NOT_^1_%CLR A_^€€1_%STA FLAG_^1_%JMP RESTRT_^1EXIT_!LDQ =XE17811_^1_%INQ -3_^1_%ENA 1_^1_%OUT -1_+CLEAR 1781-1_^1_%LDA FMASK_^1_%EOR- LPMASK+14_^1_%SAZ EX1_*SKIP IF UNPATCHED_^1_%LDA SFMASK_^1_%STA FMASK_(RESTORE SYSTEM'S FMASK_^1EX1_"LDA START+1_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1_%EJT_]_^1*_]_^1*_$GET RESTART PARAMETERS FROM OPERATOR_^1*_]_^1RESTAR MSG 08,COM_^1_%€€ENQ 0_^1_%RTJ (INFOIN)_^1REST1 RTJ (GETFLD)_^1_%SQP REST2_^1_%JMP* ENDIT_^1REST2 INQ -1_^1_%STA* RF,Q_)STORE PARAMETER_^1_%INQ -4_+CHECK FOR 5 VALUES_^1_%SQZ REST3_^1_%JMP* REST1_^1REST3 LDQ =XRESMSK_^1_%TCQ A_^1_%AND* RF_^1_%STA* RF_^1_%LDA* R1_^1_%LAQ A_^1_%EOR* RF_^1_%STA FLAGWD_^1_%LDA* R2_^1_%STA BYTSPC_^1_%STA BYTES_^1_%LDA* R3_^1_%STA XX_^1_%LDA* R4_^1_%STA €€ XY_^1_%RAO* RESFLG_'SET FLAG TO INDICATE RESTART_^1_%JMP INI2B_^1_%SPC 2_^1RF_#NUM 0_^1R1_#NUM 0_^1R2_#NUM 0_^1R3_#NUM 0_^1R4_#NUM 0_^1RESFLG NUM 0_^1_%EJT_]_^1*_]_^1*_$SYMBOL TABLE_^1*_]_^1LOWBL1 ADC TSTBUF_^1LOWBL2 ADC BUFEND_^1TOPBL1 ADC TSTBF1_^1TOPBL2 ADC BUFND1_^1DATBLK BZS DATBLK(3*MAXBYT)_^1SFWRSC BZS SFWRSC(3*MAXBYT)_^1RSPCFL NUM 0_,SET BYTE SPECIFICATION R€€ANDOMLY FLAG_^1RPRCFL NUM 0_,SET PRECISION RANDOMLY FLAG_^1UNCLPF NUM 0_,UNCONDITIONAL LOOP ON CURRENT CASE FLAG_^1SFTHLD NUM 0_^1SFMASK NUM 0_,STORAGE FOR SYSTEM FMASK_^1_%EJT_]_^1*_]_^1*_$GENSPC GENERATES BYTSPC RANDOMLY IF SPECIFIED, IF NOT,_^1*_$GENSPC TESTS OPERATOR ENTERED VALUE FOR WITHIN RANGE_^1*_]_^1RANCSQ NUM 0_^1GENSPC LDA* RSPCFL_'TEST FOR BYTE SPECIFICATION SET R€€ANDOMLY_^1_%SAN P1_,(NONZERO FLAG = RANDOM)_^1_%JMP* OPRSET_^1P1_#RTJ RANDOM_'GET A RANDOM NUMBER IN A_^1_%LDQ* BLKSZE_^1_%INQ -2_^1_%AND- LPMASK,Q_$TRUNCATE RANDOM NUMBER TO WITHIN REASONABLE R_^1_%SAN P2_+SKIP IF GENERATED BYTSPC.NE.ZERO_^1_%JMP* P1_+REGENERATE IF ZERO_^1P2_#STA BYTSPC_^1_%SUB =XMAXBYT_$TEST FOR NEW VALUE.GT.MAX ALLOWED_^1_%SAM SPOK_)SKIP IF LESS THAN MAXI€€MUM_^1_%SAZ SPOK_)SKIP IF EQUAL TO MAX_^1_%STA BYTSPC_(-IF SO, USE DIFFERENCE (FROM TEST) AS VALUE_^1SPOK_!JMP* SINDBL_^1*_]_^1*_$OPRSET TESTS FOR OPERATOR ENTERED VALUE TO LARGE (BYTSPC)_^1*_]_^1OPRSET LDA =XMAXBYT_^1_%SUB BYTSPC_^1_%SAM OPRST1_'SKIP IF BYTSPC.GT.MAXBYT_^1_%JMP* SINDBL_^1OPRST1 LDA =XMAXBYT_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (MSG09B+€€19-*)_^1_%MSG 09,COM_^1_%JMP RESTRT_^1_%SPC 3_^1OLDX_!NUM 0_^1OLDY_!NUM 0_^1_%EJT_]_^1*_]_^1*_$SINDBL SETS PRECISION RANDOMLY IF SPECIFIED_^1*_]_^1SINDBL LDA* RPRCFL_'TEST FOR RANDOM PRECISION SET_^1_%SAZ OPRDID_((RANDOM IF FLAG NONZERO)_^1_%RTJ RANDOM_'GET RANDOM NUMBER_^1_%ARS 7_,USE BIT 7_^1_%AND- ONEBIT+0_$USE ONLY LOW BIT AS INDICATOR_^1_%STA DFLG_^1OPRDID EQU OPRDID€€(*)_^1_%SPC 3_^1*_]_^1*_$LNGTHA DETERMINES THE MAXIMUM LENGTH REQUIRED FOR_^1*_$THE OPERAND BUFFER BASED ON THE OPBYT COUNT_^1*_$LNGTHR DETERMINES THE MAX LENGTH REQUIRED FOR THE CALLING SEQ_^1*_]_^1LNGTHA LDA BYTSPC_'GET OPBYT SPECIFICATION_^1_%ALS 1_,ALNGTH=2(BYTSPC) IF SINGLE PREC._^1_%LDQ DFLG_^1_%SQZ FA_^1_%ADD BYTSPC_-=3(BYTSPC) IF %OUBLE PREC._^1FA_#STA* ALNGTH_^1_%SPC€€ 3_^1LNGTHR LDQ BYTSPC_'CALCULATE LENGTH OF CALLING SEQUENCE_^1_%INQ 4_,ALLOW 4 EXTRA BYTES_^1_%TRQ A_^1_%ARS 2_^1_%AAQ A_^1_%STA* RLNGTH_'RLNGTH = 1.25(BYTSPC+4)_^1_%EJT_]_^1*_]_^1*_$TSTALP DEVELOPS ALPH, THE POINTER TO THE LOWEST_^1*_$LOCATION OF THE OPERAND BUFFER IN RESERVED CORE_^1*_]_^1TSTALP RTJ* SIZEIT_'GET RANDOM ADDRESS FOR ALPH_^1_%ADD* ALNGTH_(IN ACC_^1_%INA -1_^€€1_%SUB* TOPBLK_'TEST FOR UPPER LIMIT OF OPERAND BUFFER_^1_%SAM DA_,.LT. HIGHEST ALLOWED LOCATION_^1_%SAZ DA_+.EQ. HIGHEST ALLOWED LOCATION_^1_%LDA* TOPBLK_^1_%SUB* ALNGTH_^1_%INA 1_^1_%STA* TP_^1DA_#LDA* TP_,-NUMBER OK,_^1_%STA ALPH_+SET ALPH TO NEW VALUE_^1_%RTJ* PRNG_+AND FILL OPERAND BUFFER WITH RANDOM NUMS_^1_%JMP* RNDTST_^1_%SPC 3_^1ALNGTH NUM 0_,LENGTH OF OPERAND BUFFER€€_^1RLNGTH NUM 0_,LENGTH OF CALLING SEQUENCE_^1BUFCNT NUM 0_^1BLKSZE NUM 0_^1_%SPC 3_^1*_]_^1*_$PRNG FILLS THE OPERAND BUFFER WITH NORMALIZED RANDOM NUMBERS_^1*_]_^1PRNG_!NUM 0_^1_%CLR Q_,INITIALIZE BUFFER LENGTH COUNTER_^1_%STQ* BUFCNT_^1_%LDQ ALPH_)GET STARTING ADDRESS OF BUFFER_^1_%STQ* TP_^1RP_#LDA* BUFCNT_'TEST FOR BUFFER COMPLETED_^1_%SUB* ALNGTH_^1_%SAZ PA_,-RETURN TO€€ CALLER IF DONE_^1_%RTJ RANDOM_'GET RANDOM NUMBER IN ACCUMULATOR_^1_%STA* TP1_^1_%TRA Q_^1_%ALS 9_,MANTISSA MSB TO A15_^1_%EAQ Q_^1_%CLR A_^1_%SQM RP1_*SKIP IF NORMALIZED_^1_%LDA- LPMASK+6_$GET MASK TO INVERT BITS 0-6_^1RP1_"EOR* TP1_^1_%LDQ* TP_^1_%STA- (ZERO),Q_$STORE RANDOM NUM IN BUFFER_^1_%RAO* TP_+BUMP LENGTH COUNTER_^1_%RAO* BUFCNT_^1_%JMP* RP_^1PA_#JMP* (PRNG)_^1_%EJT€€_]_^1*_]_^1*_$SIZEIT RETRIEVES A RANDOM NUMBER (SOURCE SPECIFIED BY CALLER)_^1*_$TRUNCATES IT TO WITHIN BOUNDS OF RESERVED MEMORY AND USES IT TO_^1*_$POINT TO A LOCATION WITHIN THE LOWER OR UPPER CORE RESERVED_^1*_$MEMORY BLOCK_^1*_]_^1SIZEIT NUM 0_^1_%RTJ RANDOM_'GET RANDOM NUMBER_^1_%LDQ* BLKSZE_^1_%AND- LPMASK,Q_$TRUNCATE IT TO WITHIN THE BLOCK SIZE_^1_%STA* TP_^1_%AND- ONEBIT€€+0_^1_%STA* BLKFL2_'PUT IN BLOCK 1 IF BIT 0 OF TP =0_^1_%TRA Q_,BLOCK 2 IF BIT 0 OF TP = 1_^1_%LDA* TP_^1_%ADD LOWBL1,Q_^1_%STA* TP_^1_%LDA TOPBL1,Q_^1_%STA* TOPBLK_^1_%LDA* PASFLG_^1_%SAZ GC_+IF ON 1ST PASS THRU SIZEIT (IE IN ALPH TST)_^1_%CLR Q_-SET BLKFL1_^1_%STQ* PASFLG_'IF ON 2ND PASS, SET BLKFL2 (IE IN RNDTST)_^1_%JMP* FI_^1GC_#RAO* PASFLG_^1_%LDA* BLKFL2_^1_%STA* BLKFL1€€_^1FI_#LDA* TP_^1_%JMP* (SIZEIT)_^1_%SPC 3_^1TP_#NUM 0_^1TP1_"NUM 0_^1TOPBLK NUM 0_^1BLKFL2 NUM 0_^1BLKFL1 NUM 0_^1PASFLG NUM 0_^1ENDDAT NUM 0_^1CSQEND NUM 0_^1_%EJT_]_^1*_]_^1*_$RNDTST DEVELOPS RAND, THE POINTER TO THE LOWEST_^1*_$LOCATION OF THE CALLING SEQUENCE IN RESERVED CORE_^1*_]_^1RNDTST LDQ ALPH_)CALCULATE AND SAVE HIGH LOC OF_^1_%ADQ* ALNGTH_(OPERAND BUFFER_^1_%€€INQ -1_^1_%STQ* ENDDAT_^1_%RTJ* SIZEIT_(-AND TRUNCATE IT TO WITHIN RANGE OF BUFFER_^1_%ADD* RLNGTH_'GET NUMBER+RLNGTH_^1_%INA -1_^1_%STA* CSQEND_^1_%SUB* TOPBLK_^1_%SAM RT0_*SKIP IF CSQEND.LT.TOPBLK_^1_%SAZ RT0_*SKIP IF CSQEND.EQ.TOPBLK_^1_%LDA* TOPBLK_^1_%STA* CSQEND_^1_%SUB* RLNGTH_^1_%INA 1_^1_%STA* TP_^1RT0_"LDA* CSQEND_^1_%SUB ALPH_^1_%SAP RT1_^1_%JMP* TPOK_)OK, CSQ IS €€TOTALLY BEFORE DATA_^1RT1_"LDA* ENDDAT_^1_%SUB* TP_^1_%SAP RT2_^1_%JMP* TPOK_)OK, CSQ IS TOTALLY AFTER DATA_^1*_$TRY TO FIT CSQ AFTER DATA BLOCK_^1RT2_"LDA* ENDDAT_^1_%ADD* RLNGTH_^1_%TCA A_^1_%ADD* TOPBLK_^1_%SAM RT3_*SKIP IF NOT ROOM FOR CSQ AFTER DATA_^1_%LDA* ENDDAT_^1_%INA 1_^1_%STA* TP_^1_%JMP* TPOK_^1*_$TRY TO FIT CSQ BEFORE DATA BLOCK_^1RT3_"LDA ALPH_^1_%SUB* RLNGTH_^1€€_%LDQ* BLKFL2_^1_%SUB LOWBL1,Q_^1_%SAM RT4_*SKIP IF NOT ROOM FOR CSQ BEFORE DATA_^1_%LDA ALPH_^1_%SUB* RLNGTH_^1_%STA* TP_^1_%JMP* TPOK_^1RT4_"JMP* TSTALP_'ALLOCATION OF CSQ IMPOSSIBLE, GO GET NEW ALPH_^1TPOK_!LDA* TP_^1_%STA RAND_^1_%EJT_]_^1*_]_^1*_$GENERATE A RANDOM CALLING SEQUENCE BEGINNING AT RAND_^1*_]_^1CALSEQ CLR A_,SET INITIAL LOC_^1_%STA INVAL_)-INDEX VALUE_^1_%STA€€ SPFL_*-SPECIAL OPBYTE FLAG_^1_%STA HLDING_(-CALLING SEQUENCE INTERNAL POINTER_^1_%STA OPCNT_)-OPERAND COUNT (BUFFER POINTER)_^1_%STA CSRFL_)-RELATIVE FLAG_^1_%STA ABYT_*-ABSOLUTE COUNT OF BYTES_^1_%STA CWCDT_)-COMMAND WORD COUNT_^1_%STA DEX_+-EFFECTIVE INDEX VALUE_^1_%LDQ RAND_^1_%STQ CALSAV_^1_%LDA =XMAXWDS_$PICK UP MAX NUMBER OF COMMAND WORDS_^1_%STA CALNUB_^1_%RAO F€€LDDFL_'SET FLDD FLAG FOR FIRST BYTE_^1_%SPC 3_^1*_]_^1*_$REPEAT GETS ANOTHER COMMAND WORD_^1*_]_^1REPEAT LDA CALNUB_'DECREMENT CALLING SEQ_^1_%INA -1_,COUNT AND TEST IF_^1_%SAP AA_,DONE YET_^1_%JMP SEQEND_^1AA_#STA CALNUB_'NOT DONE- SAVE COUNY AND CONTINUE_^1_%CLR Q_,CLEAR-_^1_%STQ BRCT_*-BRANCH COMMAND COUNT_^1_%STQ BYTCT_)--CMMD WORD BYTE COUNT_^1_%RTJ RANDOM_^1_%STA T€€EMP8_(SAVE COMMAND WORD_^1_%LDA HLDING_'MARK COMMAND WORD LOCATION BY SAVING_^1_%STA STSEQ_)SEQUENCE POINTER IN STSEQ_^1_%RAO HLDING_'BUMP POINTER AND COUNTER_^1_%RAO CWCDT_^1_%SPC 3_^1*_]_^1*_$GOAG STES UP NEXT BYTE TEST_^1*_]_^1GOAG_!LDA FLDDFL_^1_%SAN BF_+SKIP CHECK IF FLDD NEEDED_^1_%LDA ABYT_)TEST FOR REQUESTED NUM OF OPBYTES INSERTED_^1_%SUB BYTSPC_^1_%SAM BF_+SKIP €€IF NOT ENOUGH COMMAND BYTES_^1_%JMP SEQEND_(-IF SO, QUIT_^1BF_#LDA BYTCT_(TEST BYTE COUNT FOR FULL COMMAND WORD_^1_%INA -4_^1_%SAM AB_^1_%RTJ OUT_+-IF SO, SEE IF ANY BRANCH INST OCCURRED_^1_%JMP* REPEAT_'GET ANOTHER CMMD WORD_^1AB_#LDQ RAND_^1_%ADQ STSEQ_^1_%LDA- (ZERO),Q_$GET UNCOMPLETED COMMAND WORD_^1_%LDQ TEMP8_^1_%LLS 4_,SHIFT ON ANOTHER (UNTESTED) BYTE_^1_%STQ TEMP8€€_^1_%LDQ RAND_^1_%ADQ* STSEQ_^1AB1_"STA- (ZERO),Q_$PUT UNTESTED WORD BACK IN CALLING SEQUENCE_^1_%AND- LPMASK+3_$GET ONLY UNCORRECTED BYTE_^1_%LDQ SPFL_)CHECK SPEC CODE FLAG_^1_%SQZ CA_^1_%ADD- ONEBIT+4_%-IF SPECIAL ADD 16 TO BYTE_^1CA_#TRA Q_^1_%LDA* FLDDFL_'PICK UP FLDD FLAG_^1_%SAZ CA1_*SKIP IF NOT SET_^1_%CLR A_^1_%STA* FLDDFL_'CLEAR FLDD FLAG_^1_%LDQ RAND_^1_%ADQ* STSEQ€€_^1_%LDA- (ZERO),Q_^1_%AND- HIBITS+3_$GET RID OF OLD BYTE_^1_%INA $B_+ADD IN FLDD COMMAND_^1_%JMP* AB1_*GO BACK AND REPROCESS_^1CA1_"QLS 1_,(MULTIPLY BY 2 SO JUMP INTO TABLE WILL WORK)_^1_%RAO* ABYT_)INCREMENT ABSOLUTE BYTE COUNTER_^1_%RAO* BYTCT_^1_%JMP* DECC,Q_'TEST BYTE_^1_%EJT_]_^1DECC_!JMP SFLSET_'0 SPEC SETS SPECIAL FLAG_^1_%JMP SETOP1_'1 FLOF INTEGER OPERAND. REL, INDEXE€€D ADDR_^1_%JMP SETOP1_'2 FIXF INTEGER OPERAND. REL, INDEXED ADDR_^1_%JMP CIST_)3 STRI INTEGER OPERAND. RELATIVE ADDRESSING_^1_%JMP FNDEND_'4 FEND IS NOT PERMITTED. FCOM IS PUT IN PLACE_^1_%JMP CSCMD_(5 CHMD SETS/CLEARS RELATIVE ADDRESSING FLAG_^1_%JMP CSNDX_(6 NIDX CLEARS INDEX VALUE_^1_%JMP GOAG_)7 FCOM NO OPERATION_^1_%JMP SETOP2_'8 FSUB FLOATING OPERAND. REL, INDEXED ADDR€€_^1_%JMP SETOP2_'9 FMPY FLOATING OPERAND. REL, INDEXED ADDR_^1_%JMP SETOP2_'A FDIV FLOATING OPERAND. REL, INDEXED ADDR_^1_%JMP SETOP2_'B FLDD FLOATING OPERAND. REL, INDEXED ADDR_^1_%JMP CADI_)C ADDI ADDS OPERAND TO INDEX VALUE, REL ADDR_^1_%JMP SETOP2_'D FLST FLOATING OPERAND. REL, INDEXED ADDR_^1_%JMP SETOP2_'E FADD FLOATING OPERAND. REL, INDEXED ADDR_^1_%JMP CINDX_(F INDX €€OPERAND IS NEW INDEX VALUE. REL ADDR_^1_%EJT_]_^1_%JMP CANF_)10 FEND IS NOT PERMITTED_^1_%JMP SPCOP_(11 CACS OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP SPCOP_(12 BRAM OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP SPCOP_(13 BRAZ OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP SPCOP_(14 BRAN OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP SPCOP_(15 BRAP OPRND ADDR MUST POINT€€ TO NEXT CMMD WOR_^1_%JMP SPCOP_(16 BRIM OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP SPCOP_(17 BRIZ OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP SPCOP_(18 BRIN OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP SPCOP_(19 BRIP OPRND ADDR MUST POINT TO NEXT CMMD WOR_^1_%JMP CANF_)1A FEND IS NOT PERMITTED_^1_%JMP CANF_)1B FEND IS NOT PERMITTED_^1_%JMP CANF_)1C FEND IS NOT PERM€€ITTED_^1_%JMP CANF_)1D FEND IS NOT PERMITTED_^1_%JMP CANF_)1E FEND IS NOT PERMITTED_^1_%JMP CANF_)1F FEND IS NOT PERMITTED_^1_%EJT_]_^1*_]_^1*_$SFLSET SETS SPECIAL OPBYTE FLAG_^1*_]_^1SFLSET LDA* BYTCT_^1_%INA -4_^1_%SAZ SFLST2_'SKIP IF WORKING ON BYTE 4_^1SFLST1 RAO* SPFL_)SET SPEC OPCODE FLAG_^1_%JMP* GOAG_)GO GET NEXT BYTE_^1SFLST2 LDA* BRCT_^1_%SAN SFLST3_'SKIP IF PREVIOU€€S BRANCH IN THIS WORD_^1_%JMP* SFLST1_^1SFLST3 JMP* FNDEND_'REMOVE THIS SPEC CODE_^1_%SPC 3_^1*_]_^1*_$FNDEND REMOVES UNWANTED FEND INSTRUCTIONS_^1*_]_^1FNDEND LDQ* RAND_^1_%ADQ* STSEQ_^1_%LDA- (ZERO),Q_$GET LAST CMMD WORD_^1_%ARS 4_,SHIFT OFF FEND BYTE_^1_%LDQ* H7000_^1_%LLS 4_,SHIFT ON FCOM INSTRUCTION_^1_%LDQ* RAND_^1_%ADQ* STSEQ_^1_%STA- (ZERO),Q_$RESTORE CMMD WORD (CORRECTE€€D)_^1_%JMP GOAG_^1_%SPC 3_^1*_]_^1*_$CRLAD CHECKS FOR AND PERFORMS RELATIVE ADDRESSING_^1*_]_^1CRLAD NUM 0_^1_%LDA* ALPH_^1_%ADD* OPCNT_(A POINTS TO CURRENT OPERAND IN BUFFER_^1_%LDQ* RAND_)Q POINTS TO CURRENT ADDR IN CALLING SEQUENCE_^1_%ADQ* HLDING_^1_%STQ* TEMP12_^1_%LDQ* CSRFL_(CHECK FLAG FOR RELATIVE ADDRESSING_^1_%SQZ* AE_^1_%SUB* TEMP12_(-IF SO, SUBTRACT CURRENT ADDR FROM€€ OPR ADR_^1AE_#LDQ* TEMP12_^1_%JMP* (CRLAD)_%RETURN WITH CURRENT ADDR IN Q, OP ADDR IN A_^1_%EJT_]_^1*_]_^1*_$SYMBOL TABLE_^1*_]_^1FLDDFL NUM 0_,FLDD FORCE FLAG_^1CSRFL NUM 0_,RELATIVE FLAG (NONZERO=RELATIVE ADDRESSING)_^1CWCDT NUM 0_,COMMAND WORD COUNT_^1HLDING NUM 0_,POINTS TO NEXT LOC IN CALLING SEQUENCE_^1BRCT_!NUM 0_,BRANCH INSTRUCTION COUNT_^1BYTCT NUM 0_,COMMAND WOR€€D BYTE COUNT_^1STSEQ NUM 0_,LAST COMMAND WORD LOCATION POINTER_^1TEMP8 NUM 0_,TEMPORARY STORAGE_^1CALNUB NUM 0_,CONTAINS MAX NUM CMMD WORDS ALLOWED IN SEQ_^1DEX_"NUM 0_,EFFECTIVE INDEX VALUE (LATER TEMP STORAGE)_^1TEMP12 NUM 0_,TEMPORARY STORAGE_^1SPECOP NUM 0_,BRANCH INST OP ADR POINTER TABLE_^1_%NUM 0_^1_%NUM 0_^1INVAL NUM 0_,BASIC INDEX VALUE_^1OPCNT NUM 0_,OPERAND€€ COUNT (ALPH STACK POINTER)_^1DFLG_!NUM 0_,DOUBLE PRECISION FLAG (NONZERO=DOUBLE)_^1ABYT_!NUM 0_,ABSOLUTE COUNT OF BYTES_^1FLAGWD NUM 0_,CONTAINS CONTROL BITS_^1NPASS NUM 0_,NUMBER OF PASSES THRU CALSEQ_^1BYTES NUM 0_,OPERATOR SPECIFIED NUMBER OF COMMAND BYTES_^1FPMODE NUM 0_^1SPFL_!NUM 0_,SPECIAL CODE FLAG (NONZERO=NEXT BYTE BR INST_^1RAND_!NUM 0_,CALLING SEQUENCE INITIA€€L LOC POINTER_^1ALPH_!NUM 0_^1CALSAV NUM 0_,CONTAINS LOC IN WHICH TO INSERT PROCESSOR AD_^1ILOPFG NUM 0_,NON-ZERO IF ILLEGAL OP CODES ALLOWED_^1BYTSPC NUM 30_+SPECIFIES NUMBER OF OPBYTES TO BE USED_^1ERRCNT NUM 0_^1H7000 NUM $7000_^1_%EJT_]_^1*_]_^1*_$SETOP1 PUTS INTEGER OP ADDR IN CALLING SEQ (REL, INDEXED)_^1*_]_^1SETOP1 INQ -2_^1_%SQN SETP1A_'SKIP IF NOT FLOF_^1_%RAO* F€€LDDFL_'SET FLDD FLAG_^1SETP1A RTJ* CRLAD_(GET RELATIVE POR ADR IN Q, CAL SEQ LOC IN A_^1_%SUB* INVAL_^1_%STA- (ZERO),Q_$INSERT ADJUSTED ADR IN CALLING SEQUENCE_^1_%JMP* DOAG_)BUMP COUNTERS_^1_%SPC 3_^1*_]_^1*_$CANF CORRECTS ILLEGAL SPEC OPCODES_^1*_]_^1CANF_!LDQ* ILOPFG_'TEST FOR ILLEGAL CODES ALLOWED_^1_%SQZ FB_^1_%JMP GOAG_*-IF SO, DO NOTHING_^1FB_#LDQ* RAND_)GET CMMD WORD_^1_€€%ADQ* STSEQ_^1_%LDA- (ZERO),Q_^1_%TRA Q_,PUT CMMD WORD IN Q_^1_%CLR A_^1_%LRS 4_,FORM LEAGLE_^1_%TCA A_,BYTE FROM_^1_%AND* H7000_(ILLEGAL CODE_^1_%ADD- ONEBIT+12_^1_%LRS 12_^1_%LDQ* RAND_)RESTORE CORRECTED CMMD WORD TO_^1_%ADQ* STSEQ_(CALLING SEQUENCE_^1_%STA- (ZERO),Q_^1_%JMP* SPCOP_(JMP TO FORM CORRECT OPR ADDR_^1_%SPC 3_^1*_]_^1*_$CSNDX CLEARS ALL INDEX VALUES_^1*_]_^1CSND€€X LDQ* BRCT_)CHECK FOR PREVIOUS BRANCH INSTR IN SAME CMMD_^1_%SQZ DOIT1_)WORD. IF SO, NIDX INSTR MUST BE AVIODED IN_^1_%JMP* CHNGIT_(ORDER THAT FOLLOWING ADDRESSING IS CORRECT_^1DOIT1 CLR A_,CLEAR_^1_%STA* DEX_+-EFFECTIVE INDEX VALUE_^1_%STA* INVAL_)-BASIC INDEX VALUE_^1_%JMP GOAG_^1_%EJT_]_^1*_]_^1*_$CSCMD SETS/CLEARS RELATIVE ADDRESSING FLAG_^1*_]_^1CSCMD LDQ* BRCT_)CHECK F€€OR PREVIOUS BRANCH INSTR IN SAME CMMD_^1_%SQZ DOIT2_)WORD. IF SO, CHMD INSTR MUST BE AVOIDED IN_^1_%JMP* CHNGIT_(ORDER THAT FOLLOWING ADDRESSING IS CORRECT_^1DOIT2 LDA* CSRFL_^1_%EOR- ONEBIT+0_$REVERSE FLAG_^1_%STA* CSRFL_^1_%JMP GOAG_^1_%SPC 3_^1*_]_^1*_$CIST PUTS INTEGER STORAGE LOC IN CALLING SEQ (RELATIVE ADDR)_^1*_]_^1CIST_!RTJ* CRLAD_(RELATIVE OP ADR IN Q, CAL SEQ LOC IN €€A_^1_%STA- (ZERO),Q_^1_%JMP* DOAG_^1_%SPC 3_^1*_]_^1*_$SETOP2 PUTS FLOATING OPERAND LOCS IN CALLING SEQ (REL, INDEXED)_^1*_]_^1SETOP2 RTJ* CRLAD_(RELATIVE OP ADR IN Q, CAL SEQ LOC IN A_^1_%SUB* DEX_*SUBTRACT INDEX VALUE_^1_%STA- (ZERO),Q_$STORE OP ADR IN CALLING SEQUENCE_^1_%RAO* OPCNT_(USE TWO OPERAND STACK LOCS IF SINGLE PREC_^1_%LDQ* DFLG_^1_%SQZ AD_^1_%RAO* OPCNT_(THREE IF DO€€UBLE PRECISION_^1AD_#JMP* DOAG_^1_%SPC 3_^1*_]_^1*_$SPCOP SAVES LOCATIONS OF BRANCH OPERANDS FOR LATER INSERTION_^1*_]_^1SPCOP LDA* RAND_^1_%ADD* HLDING_^1_%LDQ* BRCT_^1_%STA* SPECOP,Q_$STORE CALLING SEQ LOC IN SPECOP+BRCT_^1_%TRA Q_,LOAD THE RELATIVE ADDRESSING FLAG INTO_^1_%LDA* CSRFL_)THE BRANCH ADDRESS LOCATION SO THAT PROPER_^1_%STA- (ZERO),Q_%MODE IS USED IN CALCULATING BR€€ANCH ADDRESS_^1_%RAO* BRCT_^1_%CLR A_^1_%STA* SPFL_)CLEAR SPECIAL OPCODE FLAG ON EXIT_^1_%JMP* DOLESS_'BUMP COUNTER_^1_%EJT_]_^1*_]_^1*_$CINDX SETS NEW INDEX TO OPERAND VALUE_^1CINDX LDQ* BRCT_)CHECK FOR PREVIOUS BRANCH INSTR IN SAME CMMD_^1_%SQZ DOIT3_)WORD. IF SO, INDEX INSTR MUST BE AVIODED IN_^1_%JMP* CHNGIT_(ORDER THAT FOLLOWING ADDRESSING IS CORRECT_^1DOIT3 LDQ* ALPH_^1_%€€ADQ* OPCNT_(GET OPERAND_^1_%LDA- (ZERO),Q_^1ICOM_!STA* INVAL_(STORE OPERAND AS BASIC INDEX VALUE_^1_%RTJ* CRLAD_(RELATIVE OP ADR IN Q, CALL SEQ LOC IN A_^1_%STA- (ZERO),Q_$STORE RELATIVE OP ADR IN CALLING SEQUENCE_^1_%RTJ* DEVI_)DEVELOP NEW EFFECTIVE INDEX VALUE_^1_%JMP* DOAG_^1_%SPC 3_^1*_]_^1*_$DEVI CALCULATES EFFECTIVE INDEX VALUE_^1*_]_^1DEVI_!NUM 0_^1_%LDA* INVAL_(EFFECTIVE V€€ALUE=2(BASIC VALUE) IF SINGLE PREC_^1_%ADD* INVAL_^1_%LDQ* DFLG_^1_%SQZ* AF_^1_%ADD* INVAL_7=3(BASIC VALUE) IF DOUBLE_^1AF_#STA* DEX_^1_%JMP* (DEVI)_^1_%SPC 3_^1*_]_^1*_$CADI ADDS OPERAND TO BASIC INDEX VALUE_^1*_]_^1CADI_!LDQ* BRCT_)CHECK FOR PREVIOUS BRANCH INSTR IN SAME CMMD_^1_%SQZ DOIT4_)WORD. IF SO, ADDI INSTR MUST BE AVOIDED IN_^1_%JMP* CHNGIT_(ORDER THAT FOLLOWING ADDRESS€€ING IS CORRECT_^1DOIT4 LDQ* ALPH_)GET VALUE TO BE ADDED TO INDEX_^1_%ADQ* OPCNT_^1_%LDA- (ZERO),Q_^1_%ADD* INVAL_(ADD TO CURRENT INDEX VALUE_^1_%JMP* ICOM_)FINISH UP AS IN CINDX_^1_%SPC 3_^1DOAG_!RAO* OPCNT_(INCREMENT OPERAND COUNTER_^1DOLESS RAO* HLDING_'AND SEQUENCE POINTER_^1_%JMP GOAG_^1_%EJT_]_^1*_]_^1*_$OUT SETS UP BRANCH TO NEXT COMMAND WORD_^1*_]_^1OUT_"NUM 0_^1OUTIN L€€DQ* BRCT_)GET BRANCH INSTRUCTION COUNT_^1_%INQ -1_+TEST FOR ALL BRANCH CODES ACCOMMODATED_^1_%SQP BA1_^1_%JMP* BA_^1BA1_"STQ BRCT_^1_%LDA* SPECOP,Q_$GET LOCATION OF LAST BRANCH INST OP ADR_^1_%STA* TEMP12_^1_%LDA* RAND_)GET LOCATION OF NEXT COMMAND WORD_^1_%ADD HLDING_^1_%LDQ (TEMP12)_$TEST FOR RELATIVE ADDRESSING AND_^1_%SQZ BB_,SUBTRACT BRANCH LOCATION FROM NEXT_^1_%SUB TE€€MP12_(CMMD WORD LOCATION IF RELATIVE FLAG SET_^1BB_#LDQ TEMP12_'FETCH LOC OF LAST BRANCH INST OP ADR_^1_%STA- (ZERO),Q_$LOAD LOCATION OF NEXT CMMD WORD IN OP ADR_^1_%JMP* OUTIN_(SEE IF ANOTHER BRANCH HAPPENED_^1BA_#JMP* (OUT)_^1_%SPC 3_^1*_]_^1*_$CHNGIT REMOVES POTENTIALLY IGNORED ADDRESSING MODE INSTRUCTION,_^1*_$REPLACING IT WITH AN FCOM INSTRUCTION_^1*_]_^1CHNGIT LDQ STSEQ_^€€1_%ADQ RAND_^1_%LDA- (ZERO),Q_$RETRIEVE COMMAND WORD_^1_%ARS 4_,SHIFT OFF BAD BYTE_^1_%LDQ H7000_^1_%LLS 4_,SHIFT ON FCOM BYTE_^1_%LDQ RAND_^1_%ADQ STSEQ_^1_%STA- (ZERO),Q_$RESTORE COMMAND WORD_^1_%JMP GOAG_)GET ANOTHER BYTE_^1_%EJT_]_^1*_$SEQEND INSURES THAT BRANCH CMMDS DO NOT POINT PAST CALLING SEQ_^1*_$END, ADDS ON FEND AS LAST OPBYTE, AND CALCULATES_^1*_$THE INDIRECT JU€€MP TO CALLER ADDRESS_^1SEQEND LDQ RAND_)GET LAST CMMD WORD_^1_%ADQ STSEQ_)AND SAVE IN LOCATION DEX_^1_%LDA- (ZERO),Q_^1_%STA DEX_^1_%LDA SPFL_)CHECKING SPFL IS EQUIVALENT TO_^1_%SAZ KC_,TESTING FOR ZERO AS LAST OPBYTE_^1_%LDA DEX_+(AN ILLEGAL CONDITION)_^1_%LDQ H7000_)IF THIS IS SO, THE ZERO IS_^1_%ARS 4_-REPLACED WITH 7 (=FCOM) TO_^1_%LLS 4_-AVIOD FURTHER COMPLICATIONS_^1€€_%STA DEX_^1KC_#LDA BYTCT_(TEST FOR COMPLETED COMMAND WORD_^1_%INA -4_^1_%SAN BR_^1_%RTJ* OUT_^1_%JMP* NXTLOC_(-IF SO, SET NEXT CMMD WRD TO $4400_^1BR_#LDA BRCT_*-IF NOT, CHECK UNCOMPLETED WORD FOR_^1_%SAN KB1_^1_%JMP* KB_-BRANCH INSTRUCTIONS_^1KB1_"LDQ =N$7777_^1_%LDA BYTCT_+IF A BRANCH INSTR IS DETECTED, THE WORD_^1_%INA -4_.IS FILLED OUT WITH FCOM OPBYTES, AND THE_^1_%S€€AN BR1_^1_%RTJ* OUT_^1_%JMP* NXTLOC_*NEXT CMMD WORD IS FILLED WITH $4400_^1BR1_"LDA DEX_^1_%LLS 4_^1_%STA DEX_^1_%RAO BYTCT_^1_%JMP* BR_^1KB_#LDQ* H4444_^1BK_#LDA BYTCT_+IF NO BRANCH CODE WAS DETECTED,_^1_%INA -4_.THE WORD IS FILLED OUT WITH_^1_%SAN BK1_^1_%JMP* OT_.FEND OPBYTES, THERE WILL BE NO_^1BK1_"LDA DEX_-FOLLOWING COMMAND WORD_^1_%LLS 4_^1_%STA DEX_^1_%RAO BYTCT€€_^1_%JMP* BK_^1NXTLOC LDQ RAND_)NXTLOC FILLS OUT THE NEXT_^1_%ADQ HLDING_(COMMAND WORD LOCATION_^1_%LDA* H4444_)WITH FEND,FEND,FEND,FEND_^1_%STA- (ZERO),Q_^1_%RAO HLDING_^1OT_#LDQ RAND_)OT RESTORES THE LAST CMMD_^1_%ADQ STSEQ_)WORD WITH THE (CORRECTED)_^1_%LDA DEX_+CONTENTS OF DEX_^1_%STA- (ZERO),Q_^1_%JMP* PRCRUN_^1H4444 NUM $4444_^1_%EJT_]_^1*_]_^1*_$TRNSFR GETS DATA FROM€€ FRMADD BUFFER, SAVES IT IN TOADD_^1*_]_^1TRNSFR NUM 0_^1_%STQ* FRMADD_'UPON ENTRY, Q CONTAINS THE LOWEST SOURCE LOC,_^1_%STA* TOADD_)A CONTAINS THE LOWEST STORAGE LOCATION_^1_%LDQ ALNGTH_^1LOOPIT INQ -1_^1_%LDA* (FRMADD),Q_"GET DATA FROM SOURCE_^1_%STA* (TOADD),Q_#STORE DATA INTO HOLDING LOCATION_^1_%SQZ DNE_^1_%JMP* LOOPIT_^1DNE_"JMP* (TRNSFR)_^1FRMADD NUM 0_^1TOADD NUM 0_€€^1_%EJT_]_^1*_]_^1*_$SET UP ADDRESSES OF CORRECT HARDWARE/SOFTWARE ROUTINES_^1*_]_^1PRCRUN LDQ DFLG_^1_%LDA ADRFLT,Q_^1_%STA* SEXEC_^1_%ENA 0_^1_%STA- $C8_*CLEAR SOFTWARE ERRORS_^1*_]_^1*_$EXECUTE CALLING SEQUENCE ON SOFTWARE SIMULATION PACKAGE_^1*_]_^1PRCRN1 LDQ ALPH_^1_%LDA ORGDAT_'ADDRESS OF ORIGINAL DATA STORE_^1_%RTJ* TRNSFR_'DUPLICATE DATA BUFFER INTO DATBLK LOCATIONS_^1€€_%LDA RAND_^1_%RTJ+ 0_,TWO WORD INSTRUCTION_^1SEXEC EQU SEXEC(*-1)_^1_%LDQ ALPH_^1_%LDA SFTHLD_^1_%RTJ* TRNSFR_'SAVE SOFTWARE RESULTS IN SFWRSC LOCATIONS_^1_%EJT_]_^1*_]_^1*_$EXECUTE CALLING SEQUENCE ON 1781-1_^1*_]_^1HDWRST LDQ ORGDAT_^1_%LDA ALPH_^1_%RTJ* TRNSFR_'RESTORE DATA BUFFER TO INITIAL CONDITIONS_^1_%LDQ =XE17811_$1781-1 EQUIPMENT CODE_^1EQ1781 EQU EQ1781(*-1)_^1€€_%INQ -3_+Q = $XXX0_^1_%LDA FLAGWD_^1_%AND- ONEBIT+8_$CHECK FOR I/O RESET REQUEST_^1_%SAZ HDWRS1_^1_%ENA 1_^1_%OUT REJ-*_^1HDWRS1 LDA FPMODE_^1_%AND- LPMASK+1_^1_%ALS 1_,SHIFT INTO POSITION_^1_%OUT REJ-*_^1_%LDA RAND_^1_%INQ 3_,Q = $XXX3_^1_%ADQ DFLG_)Q = $XXX3/$XXX4_^1_%OUT REJ-*_(COLD START_^1_%STQ* TOADD_(SAVE Q_^1_%LDA FPMODE_'PICK UP 1781-1 MODE INDICATOR_^1_%AND-€€ LPMASK+1_$SAVE ONLY BITS 0-1_^1_%INA -1_+TEST FOR 'HOG' MODE_^1_%SAZ HDWRS6_'SKIP IF HOG MODE TO BYPASS STOP/RESTART_^1_%ENA 5_^1_%STA* RJTCTR_'SET UP STOP REJECT COUNTER_^1_%LDQ* EQ1781_^1_%INQ 6_,SET Q FOR STOP COMMAND_^1_%LDA* STPADD_'SET A = TO ADDRESS OF STOP/RESTART BUFFER_^1STOPIT OUT STPREJ-*_$STOP 1781-1_^1_%ENA 20_+SET UP DELAY COUNTER_^1DELAY INA -1_+DECREMENT D€€ELAY COUNTER_^1_%SAM 1_,SKIP IF DELAY OVER_^1_%JMP* DELAY_(GO BACK FOR ANOTHER LOOP_^1_%INQ -4_+Q=$XXX5_^1_%LDA* STPADD_^1_%OUT SRTREJ-*_$RESTART 1781-1_^1HDWRS6 LDQ* TOADD_(RESTORE Q_^1_%LDA FLAGWD_^1_%AND- ONEBIT+2_$CHECK FOR STATUS WAIT_^1_%SAN HDWRS3_'SKIP IF STATUS WAIT REQUESTED_^1HDWRS2 INP WAITRJ-*_$READ PCR STATUS_^1_%JMP* LPCK_)JUMP OUT WHEN INPUT REPLIES_^1_%SPC 3€€_^1HDWRS3 LDQ* EQ1781_^1_%INQ -3_+Q = $XXX0_^1HDWRS4 INP STATRJ-*_$READ FSR STATUS_^1_%SAP HDWRS5_'SKIP IF NOT ACTIVE_^1_%JMP* HDWRS4_'GO BACK AND REREAD STATUS_^1HDWRS5 JMP* LPCK_^1_%SPC 3_^1WAITRJ NOP 0_^1_%JMP* HDWRS2_^1_%SPC 3_^1STATRJ NOP 0_^1_%JMP* HDWRS4_^1_%SPC 3_^1RJTCTR NUM 0_,COUNTER FOR STOP COMMAND REJECTS_^1STPADD NUM 0_^1STPBUF BSS STPBUF(7)_#STOP/RESTART €€BUFFER_^1_%SPC 3_^1STPREJ JMP* STPINT_'INTERNAL REJECT ALWAYS FATAL_^1_%LDA* RJTCTR_'PICK UP REJECT COUNTER_^1_%INA -1_+DECREMENT COUNT_^1_%SAZ STPEXT_'SKIP IF COUNT EXPIRED TO PRINT MESSAGE_^1_%STA* RJTCTR_'SAVE COUNT VALUE_^1_%JMP* STOPIT_'TRY STOP COMMAND AGAIN_^1_%SPC 2_^1SRTREJ JMP* STPINT_'INTERNAL REJECT_^1STPEXT MSG 10,LST_'OUTPUT EXTERNAL REJECT MESSAGE_^1_%JMP* LPCK_€€)CONTINUE_^1STPINT MSG 11,LST_'OUTPUT INTERNAL REJECT MESSAGE_^1_%JMP* LPCK_)CONTINUE_^1_%SPC 2_^1REJ_"JMP* INTREJ_^1_%JMP* EXTREJ_^1_%EJT_]_^1*_]_^1*_$LPCK TESTS FOR UNCONDITIONAL LOOP ON CURRENT CASE_^1*_]_^1LPCK_!LDQ UNCLPFL_%TEST FOR UNCONDITIONAL LOOP ON CURRENT CASE_^1_%SQN LPCK00_'SKIP IF SET TO LOOP_^1_%JMP* CHKRES_'GO CHECK RESULTS_^1LPCK00 SCHDLE LPCK0-LPCK00-1,3,R S€€CHEDULE TO ALLOW MI_^1_%JMP- (DISP)_'EXIT TO DISPATCHER_^1LPCK0 LDA FLAG_^1_%AND- ONEBIT+0_$CHECK IF STOP FLAG IS SET_^1_%SAN LPCK01_'SKIP IF IT IS_^1_%SWN CHKRES_'IF SKIP SWITCH NOT SET, CHECK RESULTS_^1_%JMP* HDWRST_'GO BACK AND REEXECUTE HARDWARE_^1LPCK01 ENA 0_^1_%STA UNCLPF_'CLEAR UNCONDITIONAL LOOP FLAG_^1_%JMP* CHKRES_'GO CHECK RESULTS_^1_%SPC 3_^1ADRFLT ADC FLOTS_^1€€ADRDFL ADC DFLOTS_^1_%EJT_]_^1*_]_^1*_$CHECK THE RESULTS OF THE HARDWARE AGAINST THOSE OF THE SOFTWARE_^1*_]_^1CHKRES CLR A_^1_%STA* ERRDT1_'ZERO REGISTER ERROR FLAG_^1_%STA* ERRDT2_'ZERO DATA RRROR FLAG_^1_%LDQ =XE17811_$EQUIPMENT CODE TO Q_^1_%INQ -3_+Q = $XXX0_^1_%INP REJECT-*_$FSR STATUS_^1_%STA* HDWREG_^1_%EOR- $C8_*CHECK AGAINST SOFTWARE_^1_%AND FSRMSK_'CHECK ONLY SIGNI€€FICANT BITS_^1_%SAZ CKRG1_(SKIP IF NO ERROR_^1_%RAO* ERRDT1_^1CKRG1 INQ 1_,Q = $XXX1_^1_%INP REJECT-*_$CCR STATUS_^1_%STA* HDWREG+1_^1_%EOR- $C9_*CHECK AGAINST SOFTWARE_^1_%SAZ CKRG2_^1_%RAO* ERRDT1_^1CKRG2 INQ 1_,Q = $XXX2_^1_%INP REJECT-*_$IR STATUS_^1_%STA* HDWREG+2_^1_%EOR- $CA_*CHECK AGAINST SOFTWARE_^1_%SAZ CKRG3_^1_%RAO* ERRDT1_^1CKRG3 INQ 3_,Q = $XXX5_^1_%INP RE€€JECT-*_$PCR STATUS_^1_%STA* HDWREG+3_^1_%EOR- $CB_*CHECK AGAINST SOFTWARE_^1_%SAZ CKRG4_^1_%RAO* ERRDT1_^1CKRG4 INQ 1_,Q = $XXX6_^1_%INP REJECT-*_$FPAC1 STATUS_^1_%STA* HDWREG+4_^1_%EOR- $CC_*CHECK AGAINST SOFTWARE RESULT_^1_%SAZ CKRG5_(SKIP IF NO ERROR_^1_%RAO* ERRDT1_'SET REGISTER ERROR FLAG_^1CKRG5 INQ 1_,Q = $XXX7_^1_%INP REJECT-*_$FPAC2_^1_%STA* HDWREG+5_^1_%EOR- $CD_*€€CHECK AGAINST SOFTWARE RESULT_^1_%SAZ CKRG6_(SKIP IF SAME_^1_%RAO* ERRDT1_'SET REGISTER ERROR FLAG_^1CKRG6 INQ 1_,Q = $XXX8_^1_%INP REJECT-*_$FPAC3_^1_%STA* HDWREG+6_^1_%EOR- $CE_*CHECK AGAINST SOFTWARE RESULT_^1_%SAZ CKRGX_(SKIP IF SAME_^1_%RAO* ERRDT1_'SET REGISTER ERROR FLAG_^1CKRGX JMP* CHKDAT_'GO COMPARE DATA BUFFERS_^1_%SPC 3_^1REJECT JMP* INTREJ_^1EXTREJ MSG 04,LST_^€€1_%JMP* REJCOM_^1INTREJ MSG 05,LST_^1_%JMP* REJCOM_^1_%SPC 3_^1REJCOM ENA 1_^1_%STA* ERRDT1_'FORCE REGISTER ERROR PRINTOUT_^1_%STA* ERRDT2_'FORCE DATA ERROR PRINTOUT_^1_%JMP* CHKDTX_^1_%EJT_]_^1*_]_^1*_$COMPARE THE END CONDITIONS OF THE DATA BUFFERS_^1*_]_^1CHKDAT LDQ ALNGTH_^1CHKDT1 INQ -1_^1_%LDA (ALPH),Q_$GET HARDWARE RESULT_^1_%EOR (SFTHLD),Q_"CHECK AGAINST SOFTWARE RESU€€LT_^1_%SAZ CHKDT2_'SKIP IF NO ERROR_^1_%RAO* ERRDT2_'SET ERROR FLAG_^1CHKDT2 SQZ CHKDTX_'SKIP IF FINISHED WITH DATA CHECK_^1_%JMP* CHKDT1_'GO CHECK NEXT WORD_^1CHKDTX LDA* ERRDT1_^1_%ADD* ERRDT2_^1_%SAZ CHKDT3_'SKIP IF NO ERRORS DETECTED_^1_%ADD ERRCNT_^1_%STA ERRCNT_^1_%RTJ ERROUT_'OUTPUT ERRORS IF ANY_^1CHKDT3 LDA UNCLPF_^1_%SAZ CKRESX_'SKIP IF NOT UNCONDITIONAL LOOPING_^€€1_%JMP HDWRST_'GO BACK AND REEXECUTE HARDWARE_^1CKRESX JMP (RANCSQ)_$RETURN TO CONTROL ROUTINE_^1_%SPC 3_^1FSRMSK NUM $7EC0_(SIGNIFICANT FSR BITS_^1HDWREG BZS HDWREG(7)_^1ERRDT1 NUM 0_^1ERRDT2 NUM 0_^1_%EJT_]_^1*_]_^1*_$GENERATE A 30 BIT RANDOM NUMBER AND RETURN 16 MSB IN A_^1*_]_^1RANDOM NUM 0_^1_%LDA* XX_^1_%ADD* XY_^1_%STA* XX_^1_%LDA* XY_^1_%ADD* XB_^1_%SAP RAN1_)SKIP €€IF NO CARRY_^1_%AND- H7FFF_(REMOVE CARRY BIT_^1_%RAO* XX_+CARRY_^1RAN1_!STA* XY_^1_%LDA* XX_^1_%AND- H7FFF_(REMOVE POSSIBLE SIGN BIT_^1_%STA* XX_^1_%LDQ* XY_^1_%QLS 1_^1_%LLS 1_,USE 16 MSB OF 30 BIT RANDOM NUMBER_^1_%JMP* (RANDOM)_^1_%SPC 3_^1XX_#NUM 0_^1XY_#NUM 0_^1XB_#NUM $5C23_^1_%EJT_]_^1*_]_^1*_$ERROR OUTPUT LISTING SUBROUTINE_^1*_]_^1ERROUT NUM 0_^1_%LDA FLAG_^1_%AND-€€ ONEBIT+7_$CHECK FOR NPT IN EFFECT_^1_%SAZ ERR0_)SKIP IF NOT IN EFFECT_^1_%JMP* (ERROUT)_$'NPT' IN EFFECT, EXIT_^1ERR0_!RTJ RESMSG_'OUTPUT INITIAL MESSAGE_^1_%LDA FLAGWD_^1_%AND- ONEBIT+13_#CHECK FOR ERROR LISTING SUPPRESS_^1_%SAZ ERR1_)SKIP IF NOT SUPPRESSED_^1_%JMP* ERR4_)CHECK FOR OPERATOR ACTION_^1ERR1_!LDA FLAGWD_^1_%AND- ONEBIT+11_#CHECK FOR CSQ LISTING SUPPRESS_^1_%SAN €€ ERR2_)SKIP IF SUPPRESSED_^1_%RTJ CSQPRT_'OUTPUT CSQ LISTING_^1ERR2_!LDA ERRDT1_'CHECK FOR REGISTER ERRORS_^1_%SAZ ERR3_)SKIP IF NONE_^1_%LDA FLAGWD_^1_%AND- ONEBIT+12_#CHECK FOR REGISTER PRINTOUT SUPPRESSED_^1_%SAN ERR3_)SKIP IF IT IS SUPPRESSED_^1_%RTJ REGPRT_'PRINT OUT REGISTER STATUS_^1ERR3_!LDA FLAGWD_^1_%AND- ONEBIT+10_#CHECK FOR DATA BUFFER PRINTOUT SUPPEESSED_^1_%SAN€€ ERR4_)SKIP IF SUPPRESSED_^1_%LDA ERRDT2_'CHECK FOR DATA ERRORS_^1_%SAZ ERR4_)SKIP IF NONE_^1_%RTJ DATPRT_'PRINT OUT DATA BUFFERS_^1ERR4_!LDA FLAGWD_^1_%AND ONEBIT+9_$CHECK FOR OPERATOR ACTION REQUEST_^1_%SAN ERR5_)SKIP IF REQUESTED_^1_%JMP* (ERROUT)_$RETURN TO CALLER_^1ERR5_!MSG 06,COM_'REQUEST OPERATOR ACTION_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1_%RTJ (GETFLD)_$GET OPTION NUMB€€ER_^1_%SQP ERR6_)SKIP IF NO ERROR_^1_%JMP ENDIT_^1ERR6_!TRA Q_^1_%QLS 1_^1_%JMP* ERRX,Q_'GO TO REQUESTED ACTION_^1*_]_^1*_$POSSIBLE ERROR OPTIONS_^1*_*0 = EXIT TEST_^1*_*1 = IGNORE ERROR_^1*_*2 = TRY SAME AGAIN_^1*_*3 = GET NEW PARAMETERS FROM OPERATOR_^1*_84 = LOOP ON HARDWARE EXECUTION_^1*_85 = GO TO RESTART ROUTINE_^1*_]_^1ERRX_!JMP ENDIT_(EXIT TEST_^1_%JMP (ERROUT)_$1 = I€€GNORE ERROR_^1_%JMP HDWRST_'2 = TRY SAME THING AGAIN_^1_%JMP RESTRT_'3 = GO GET NEW SET OF PARAMETERS_^1_%JMP ERRA1_(4 = LOOP ON HARDWARE EXECUTION_^1_%JMP RESTAR_'5 = GO TO RESTART ROUTINE_^1_%SPC 3_^1ERRA1 RAO UNCLPF_'SET UNCONDITIONAL LOOP FLAG_^1_%JMP HDWRST_^1*_]_^1_%EJT_]_^1*_]_^1*_$PRINT OUT THE CALLING SEQUENCE_^1*_]_^1CSQPRT NUM 0_^1_%MSG 07,LST_^1_%LDA RAND_)AD€€DRESS OF CALLING SEQUENCE BUFFER_^1_%STA* CSQADR_^1_%LDA* ORGDAT_'ORIGINAL DATA BUFFER ADDRESS_^1_%STA* DATADR_'SAVE AS POINTER FOR OPRCON_^1CSQLOP RTJ* CMDPRT_'PRINT OUT COMMAND WORD_^1_%ENA 0_^1ADRLOP STA- I_,INITIALIZE I FOR ADDRESS/OPERAND PRINTOUT_^1_%STA* BYTNUM_^1_%LDA* ADRBYT,I_$ADDRESS TYPE_^1_%SAM CSQPR1_'SKIP IF THERE IS AN ADDRESS_^1_%JMP* CSQPR9_'JUMP IF NO ADDRESS_^€€1CSQPR1 RTJ* ADRCON_'GET ADDRESS AND VALUE INTO BMSG_^1_%ENA 0_^1_%STA* ADM2_)DISABLE RIGHT PAREN_^1_%STA* OPRCNT_'CLEAR OPERAND COUNT TO ZERO_^1_%ENA 5_^1_%STA* ADM1_)SET MESSAGE FOR NO OPERAND_^1_%LDA* ADRBYT,I_$ADDRESS TYPE_^1_%ALS 1_,CHECK FOR ASSOCIATED OPERAND_^1_%SAM CSQPR3_'SKIP IF OPERAND TO PRINT_^1_%JMP* CSQPR2_^1CSQPR3 ENA 1_^1_%STA* ADM2_)ENABLE RIGHT PAREN_^1_%EN€€A 9_^1_%STA* ADM1_)SET MESSAGE FOR INTEGER OPERAND_^1_%RAO* OPRCNT_'BUMP OPERAND COUNT_^1_%LDA* ADRBYT,I_$ADDRESS TYPE_^1_%ALS 2_,CHECK FOR FLOATING POINT OPERAND_^1_%SAP CSQPR4_'SKIP IF INTEGER OPERAND TO PRINT_^1_%ENA 12_^1_%STA* ADM1_)SET MESSAGE FOR SINGLE PRECISION OPERAND_^1_%RAO* OPRCNT_'BUMP OPERAND COUNT_^1_%LDA DFLG_)PICK UP DOUBLE PRECISION FLAG_^1_%SAZ CSQPR4_'SKI€€P IF SINGLE PRECISION TO PRINT_^1_%ENA 15_^1_%STA* ADM1_)SET MESSAGE FOR DOUBLE PRECISION_^1_%RAO* OPRCNT_'BUMP OPERAND COUNT_^1CSQPR4 RTJ* OPRCON_'GET OPERAND INTO MESSAGE_^1_%LDA* ADRBYT,I_^1_%ALS 3_,CHECK FOR STORED INTO OPERAND_^1_%SAP CSQPR2_'SKIP IF ITS A LOAD FROM_^1_%ENA 5_^1_%STA* ADM1_)TURN OFF OPERAND PRINT_^1_%ENA 0_^1_%STA* ADM2_)TURN OFF RIGHT PAREN_^1CSQPR2 RTJ €€ (MESAGE)_^1ADMSG NUM $0233_^1_%ADC BMSG-ADMSG_^1ADM1_!ADC BMSGE-BMSG_^1_%ADC RTPREN-ADMSG_^1ADM2_!NUM 1_^1_%RAO* CSQADR_'BUMP CSQ POINTER_^1CSQPR9 LDA* BYTNUM_^1_%INA -3_+CHECK FOR END_^1_%SAM CSQPRL_'SKIP IF NOT END_^1_%JMP* CSQPRX_'EXIT IF IT IS_^1CSQPRL LDA* BYTNUM_^1_%INA 1_,BUMP BYTE COUNTER_^1_%JMP* ADRLOP_'GO BACK AND DO IT AGAIN_^1CSQPRX LDA* FNDFLG_^1_%SAN CSQXI€€T_'SKIP IF THERE WAS A FEND_^1_%JMP* CSQLOP_'GO BACK AND DO IT AGAIN_^1CSQXIT ENA 0_^1_%STA* FNDFLG_'CLEAR FEND FLAG_^1_%JMP* (CSQPRT)_$RETURN TO CALLER_^1_%SPC 3_^1*_]_^1*_$DATA STORAGE FOR CSQPRT AND SUBROUTINES_^1*_]_^1CSQADR NUM 0_,POINTER TO CURRENT LOCATION IN CSQ_^1ADRBYT BZS ADRBYT(4)_#OPERAND ADDRESS TYPE POINTERS_^1BYTNUM NUM 0_,NUMBER OF CURRENT BYTE BEING PROCESSED€€_^1FNDFLG NUM 0_,FLAG TO INDICATE FEND ENCOUNTERED_^1SPCFLG NUM 0_,FLAG TO INDICAT SPEC INSTRUCTION_^1CMDWRD NUM 0_,COMMAND WORD BEING PROCESSED_^1DATADR NUM 0_,DATA BUFFER ADDRESS POINTER_^1OPRCNT NUM 0_,OPERAND WORD COUNTER_^1ORGDAT ADC DATBLK_'ADDRESS OF ORIGINAL DATA BLOCK_^1_%EJT_]_^1*_]_^1*_$PRINT OUT THE ADDRESS IN CSQADR PLUS ITS CONTENTS_^1*_]_^1ADRPRT NUM 0_^1_%RTJ€€* ADRCON_'GET ADDRESS AND CONTENTS INTO MESSAGE_^1_%RTJ (MESAGE)_$PRINT OUT ADDRESS AND CONTENTS_^1ADRMSG NUM $0133_^1_%ADC BMSG-ADRMSG_^1_%NUM 6_^1_%RAO* CSQADR_'BUMP CSQ ADDRESS_^1_%JMP* (ADRPRT)_$RETURN TO CALLER_^1*_]_^1*_$CONVERT ADDRESS AND CONTENTS TO ASCII AND PUT IN BMSG_^1*_]_^1ADRCON NUM 0_^1_%LDA* CSQADR_'PICK UP ADDRESS_^1_%RTJ (RHXASC)_$CONVERT TO ASCII_^1_%ADC €€ (BMSG-*)_^1_%LDA* (CSQADR)_$PICK UP CONTENTS OF ADDRESS_^1_%RTJ (RHXASC)_$CONVERT TO ASCII_^1_%ADC (BMSG+3-*)_^1_%JMP* (ADRCON)_$RETURN TO CALLER_^1*_]_^1*_$STUFF OPERAND INTO BMSG_^1*_]_^1OPRCON NUM 0_^1_%LDA* (DATADR)_$PICK UP FIRST OPERAND_^1_%RAO* DATADR_'BUMP DATA BUFFER POINTER_^1_%RTJ (RHXASC)_^1_%ADC (BMSG+7-*)_^1_%LDA* OPRCNT_'PICK UP OPERAND WORD COUNTER_^1_%INA -1€€_^1_%SAZ OPCONX_'SKIP IF DONE_^1_%STA* OPRCNT_'RESTORE OPERAND COUNT_^1_%LDA* (DATADR)_$PICK UP SECOND OPERAND WORD_^1_%RAO* DATADR_'BUMP DATA BUFFER POINTER_^1_%RTJ (RHXASC)_^1_%ADC (BMSG+10-*)_^1_%LDA* OPRCNT_'PICK UP OPERAND WORD COUNTER_^1_%INA -1_^1_%SAZ OPCONX_'SKIP IF DONE_^1_%LDA* (DATADR)_$PICK UP THIRD OPERAND WORD_^1_%RAO* DATADR_'BUMP DATA BUFFER POINTER_^1_%RTJ (€€RHXASC)_^1_%ADC (BMSG+13-*)_^1OPCONX JMP* (OPRCON)_$RETURN_^1_%EJT_]_^1*_]_^1*_$PRINT OUT THE COMMAND WORD AND IT'S MNEMONICS_^1*_]_^1CMDPRT NUM 0_^1_%RTJ (MESAGE)_$OUTPUT A BLANK LINE_^1CMDPR0 NUM $0133_^1_%ADC SPACE-CMDPR0_^1_%NUM 1_^1_%RTJ* ADRCON_'GET ADDRESS AND CONTENTS INTO MESSAGE_^1_%ENA 0_^1_%STA* BYTNUM_'INITIALIZE BYTE NUMBER COUNTER_^1_%LDA* (CSQADR)_$PICK UP CO€€MMAND WORD TO BE PROCESSED_^1CMDPR1 CLR Q_^1_%LLS 4_,NEXT OP CODE BYTE TO Q_^1_%STA* CMDWRD_'SAVE REST OF COMMAND WORD_^1_%LDA* SPCFLG_'CHECK SPEC FLAG_^1_%SAZ CMDPR5_'SKIP IF LAST NOT SPEC_^1_%INQ $10_*INCREMENT TO SECOND HALF OF TABLE_^1_%ENA 0_^1_%STA* SPCFLG_'CLEAR SPEC FLAG_^1CMDPR5 STQ- I_,SAVE COMMAND BYTE IN I REGISTER_^1_%SQN CMDPR3_'SKIP IF NOT SPEC CODE_^1_%RAO* SP€€CFLG_'SET SPEC FLAG_^1CMDPR3 INQ -4_+CHECK FOR FEND INSTRUCTION_^1_%SQN 1_,SKIP IF NOT 4_^1_%RAO* FNDFLG_'SET FEND FLAG_^1_%INQ -12_^1_%SQN 1_,SKIP IF NOT 00_^1_%RAO* FNDFLG_^1_%INQ -10_^1_%SQM 1_,SKIP IF LESS THAN 0A_^1_%RAO* FNDFLG_^1CMDPR4 LDQ* BYTNUM_'BYTE NUMBER TO Q_^1_%LDA* ADRTBL,I_$PICK UP ADDRESS TYPE WORD_^1_%STA* ADRBYT,Q_$SAVE IN TABLE_^1_%LDA* ASCFPC,I_$PICK UP €€ADDRESS OF ASCII FOR COMMAND_^1_%QLS 1_,Q*2 TO Q_^1_%STA* OPASCI,Q_$SAVE IN TABLE FOR PRINTOUT_^1_%INQ -6_+TEST FOR END_^1_%SQP CMDPR2_'IT IS, PRINT COMMAND WORD_^1_%RAO* BYTNUM_'INCREMENT BYTE NUMBER_^1_%LDA* CMDWRD_'PICK UP REST OF COMMAND WORD AND REPEAT_^1_%JMP* CMDPR1_^1CMDPR2 RTJ (MESAGE)_^1OPMSG NUM $0733_^1_%ADC BMSG-OPMSG_^1_%NUM 6_^1_%ADC LFPREN-OPMSG_^1_%NUM 1_€€^1OPASCI NUM 0,3_^1_%NUM 0,3_^1_%NUM 0,3_^1_%NUM 0,2_^1_%ADC RTPREN-OPMSG_^1_%NUM 1_^1_%RAO* CSQADR_'BUMP CSQ ADDRESS POINTER_^1_%JMP* (CMDPRT)_$RETURN TO CALLER_^1_%EJT_]_^1*_]_^1*_$OPERAND ADDRESS TABLE_^1*_*BIT 15 = OPERAND HAS AN ASSOCIATED ADDRESS_^1*_*BIT 14 = ADDRESS POINTS TO AN OPERAND_^1*_*BIT 13 = OPERAND IS A FLOATING POINT NUMBER_^1*_*BIT 12 = ADDRESS IS STORED I€€NTO, DO NOT PRINT OPERAND_^1*_]_^1ADRTBL NUM 0_-0 CACS_^1_%NUM $D000_)1 FLOF_^1_%NUM $C000_)2 FIXF_^1_%NUM $D000_)3 STRI_^1_%NUM 0_-4 FEND_^1_%NUM 0_-5 CHMD_^1_%NUM 0_-6 NIDX_^1_%NUM 0_-7 FCOM_^1_%NUM $E000_)8 FSUB_^1_%NUM $E000_)9 FMPY_^1_%NUM $E000_)A FDIV_^1_%NUM $E000_)B FLDD_^1_%NUM $C000_)C ADDI_^1_%NUM $F000_)D FLST_^1_%NUM $E000_)E FADD_^1_%NUM€€ $C000_)F INDX_^1_%NUM 0_,00 FEND_^1_%NUM $8000_(01 CACS_^1_%NUM $8000_(02 BRAM_^1_%NUM $8000_(03 BRAZ_^1_%NUM $8000_(04 BRAN_^1_%NUM $8000_(05 BRAP_^1_%NUM $8000_(06 BRIM_^1_%NUM $8000_(07 BRIN_^1_%NUM $8000_(08 BRIZ_^1_%NUM $8000_(09 BRIP_^1_%NUM 0_,0A FEND_^1_%NUM 0_,0B FEND_^1_%NUM 0_,0C FEND_^1_%NUM 0_,0D FEND_^1_%NUM 0_,0E FEND_^1_%NUM 0_,0F €€FEND_^1_%EJT_]_^1*_]_^1*_$TABLE OF LOCATIONS OF ASCII FLOATING POINT CODES_^1*_]_^1ASCFPC ADC ALSPEC-OPMSG_^1_%ADC ALFLOF-OPMSG_^1_%ADC ALFIXF-OPMSG_^1_%ADC ALSTRI-OPMSG_^1_%ADC ALFEND-OPMSG_^1_%ADC ALCHMD-OPMSG_^1_%ADC ALNIDX-OPMSG_^1_%ADC ALFCOM-OPMSG_^1_%ADC ALFSUB-OPMSG_^1_%ADC ALFMPY-OPMSG_^1_%ADC ALFDIV-OPMSG_^1_%ADC ALFLDD-OPMSG_^1_%ADC ALADDI-OPMSG_^1_%ADC ALF€€LST-OPMSG_^1_%ADC ALFADD-OPMSG_^1_%ADC ALINDX-OPMSG_^1_%ADC ALFEND-OPMSG_^1_%ADC ALCACS-OPMSG_^1_%ADC ALBRAM-OPMSG_^1_%ADC ALBRAZ-OPMSG_^1_%ADC ALBRAN-OPMSG_^1_%ADC ALBRAP-OPMSG_^1_%ADC ALBRIM-OPMSG_^1_%ADC ALBRIZ-OPMSG_^1_%ADC ALBRIN-OPMSG_^1_%ADC ALBRIP-OPMSG_^1_%ADC ALFEND-OPMSG_^1_%ADC ALFEND-OPMSG_^1_%ADC ALFEND-OPMSG_^1_%ADC ALFEND-OPMSG_^1_%ADC ALFEND-OPMSG_€€^1_%ADC ALFEND-OPMSG_^1_%EJT_]_^1*_]_^1*_$ASCII REPRESENTATIONS OF FLOATING POINT OPERATION CODES_^1*_]_^1ALFLDD ALF 3,FLDD_^1ALFLST ALF 3,FLST_^1ALFADD ALF 3,FADD_^1ALFSUB ALF 3,FSUB_^1ALFMPY ALF 3,FMPY_^1ALFDIV ALF 3,FDIV_^1ALFCOM ALF 3,FCOM_^1ALBRIM ALF 3,BRIM_^1ALBRIZ ALF 3,BRIZ_^1ALBRIN ALF 3,BRIN_^1ALBRIP ALF 3,BRIP_^1ALBRAM ALF 3,BRAM_^1ALBRAZ ALF 3,BRAZ_^1ALBR€€AP ALF 3,BRAP_^1ALBRAN ALF 3,BRAN_^1ALCACS ALF 3,CACS_^1ALFLOF ALF 3,FLOF_^1ALFIXF ALF 3,FIXF_^1ALCHMD ALF 3,CHMD_^1ALSPEC ALF 3,SPEC_^1ALINDX ALF 3,INDX_^1ALNIDX ALF 3,NIDX_^1ALSTRI ALF 3,STRI_^1ALADDI ALF 3,ADDI_^1ALFEND ALF 3,FEND_^1_%EJT_]_^1*_]_^1*_$PRINT OUT THE END CONDITIONS OF THE HDW/SFW REGISTERS_^1*_]_^1REGPRT NUM 0_^1_%ENQ 6_^1REGPR0 STQ* REGINC_^1_%RTJ €€(MESAGE)_$PRINT OUT HEADING MESSAGE_^1REGMS1 NUM $0133_^1_%ADC REGHED-REGMS1_^1_%ADC REGEND-REGHED_^1_%ENQ 0_^1REGPR1 ENA 0_^1_%STA* RM2_*TURN OFF ERROR FLAG_^1_%STQ* REGPRQ_^1_%LDA- $C8,Q_(SOFTWARE REGISTER STATUS_^1_%EOR HDWREG,Q_$CHECK FOR DIFFERENCE_^1_%SQN REGPR6_'SKIP IF NOT WORKING ON FSR STATUS_^1_%AND FSRMSK_'CHECK ONLY SIGNIFICANT BITS_^1REGPR6 SAZ REGPR2_'SKIP I€€F NO ERROR_^1_%ENA 1_^1_%STA* RM2_*TURN ON ERROR FLAG_^1REGPR2 LDA- $C8,Q_^1_%RTJ (RHXASC)_$CONVERT SOFTWARE VALUE_^1_%ADC (BMSG-*)_^1_%LDA HDWREG,Q_^1_%RTJ (RHXASC)_$CONVERT HARDWARE VALUE_^1_%ADC (BMSG+3-*)_^1_%LDA* REGNAM,Q_^1_%STA* RM1_^1_%LDA FLAGWD_^1_%AND- ONEBIT+6_$CHECK FOR MINIMUM ERROR PRINTOUT_^1_%SAZ REGPR4_'SKIP IF NOT IN EFFECT_^1_%LDA* RM2_*CHECK IF THERE WA€€S AN ERROR_^1_%SAZ REGPR5_'NO, GO CHECK NEXT REGISTER_^1REGPR4 RTJ (MESAGE)_$PRINT OUT REGISTER ERROR_^1REGMSG NUM $0433_^1RM1_"NUM 0_^1_%NUM 3_^1_%ADC SPACE-REGMSG_^1_%NUM 1_^1_%ADC BMSG-REGMSG_^1_%NUM 5_^1_%ADC ERRFLG-REGMSG_^1RM2_"NUM 1_^1REGPR5 LDA* REGPRQ_'PICK UP INDEX_^1_%SUB* REGINC_'CHECK FOR ALL REGISTERS PRINTER_^1_%SAZ REGPR3_'SKIP IF DONE_^1_%TRA Q_^1_%ADQ€€* REGINC_^1_%INQ 1_,INDEX TO NEXT REGISTER_^1_%JMP* REGPR1_'GO GET NEXT REGISTER_^1REGPR3 JMP* (REGPRT)_$RETURN_^1_%SPC 3_^1REGPRQ NUM 0_^1REGINC NUM 0_^1_%EJT_]_^1*_]_^1*_$TABLE OF ADDRESSES OF REGISTER NAMES_^1*_]_^1REGNAM ADC AFSR-REGMSG_^1_%ADC ACCR-REGMSG_^1_%ADC AIR-REGMSG_^1_%ADC APCR-REGMSG_^1_%ADC AFPAC1-REGMSG_^1_%ADC AFPAC2-REGMSG_^1_%ADC AFPAC3-REGMSG_^1_%SPC€€ 3_^1*_]_^1*_$ASCII REGISTER NAMES_^1*_]_^1AFSR_!ALF 3,FSR_^1ACCR_!ALF 3,CCR_^1AIR_"ALF 3,IR_^1APCR_!ALF 3,PCR_^1AFPAC1 ALF 3,FPAC1_^1AFPAC2 ALF 3,FPAC2_^1AFPAC3 ALF 3,FPAC3_^1_%EJT_]_^1*_]_^1*_$PRINT OUT HARDWARE AND SOFTWARE DATA RESULTS_^1*_]_^1DATPRT NUM 0_^1_%RTJ (MESAGE)_$PRINT OUT HEADING MESSAGE_^1DATMS1 NUM $0133_^1_%ADC DATHED-DATMS1_^1_%ADC DATEND-DATHED_^1_€€%LDA ALPH_^1_%STA* DATADD_'ADDRESS AND LOCATION OF HARDWARE RESULTS_^1_%ENA 0_^1_%STA* DATNUM_'SET POINTER TO ZERO_^1DATMS2 LDA* DATADD_^1_%RTJ (RHXASC)_^1_%ADC (BMSG+7-*)_^1_%LDQ* DATNUM_^1_%LDA (SFTHLD),Q_^1_%RTJ (RHXASC)_^1_%ADC (BMSG+10-*)_^1_%LDA* (DATADD)_^1_%RTJ (RHXASC)_^1_%ADC (BMSG+13-*)_^1_%ENA 0_^1_%STA* DM2_*TURN OFF ERROR FLAG_^1_%LDA* (DATADD)_^1_%EOR (SFT€€HLD),Q_"CHECK FOR DIFFERENCE_^1_%SAZ DATMS6_'SKIP IF NO ERROR_^1_%RAO* DM2_*TURN ON ERROR FLAG_^1DATMS6 LDA FLAGWD_^1_%AND- ONEBIT+6_$CHECK FOR MINIMUM ERROR PRINTOUT_^1_%SAZ DATMS3_'SKIP IF NOT IN EFFECT_^1_%LDA* DM2_*CHECK IF THERE WAS AN ERROR_^1_%SAZ DATMS4_'NO, GO TO CHECK NEXT LOCATION_^1DATMS3 RTJ (MESAGE)_^1DM1_"NUM $0233_^1_%ADC BMSG+7-DM1_^1_%NUM 8_^1_%ADC ERRFLG€€-DM1_^1DM2_"NUM 0_^1DATMS4 RAO* DATADD_^1_%RAO* DATNUM_^1_%LDA* DATNUM_^1_%SUB OPCNT_(CHECK FOR END OF OPERAND BUFFER_^1_%SAM DATMS5_'SKIP IF NOT DONE_^1_%JMP* (DATPRT)_$RETURN TO CALLER_^1DATMS5 JMP* DATMS2_'GO BACK FOR MORE_^1_%SPC 3_^1DATADD NUM 0_^1DATNUM NUM 0_^1_%EJT_]_^1*_$PRELIMINARY REGISTER CHECK_^1*_]_^1*_$OUTPUT A TO THE SELECTED REGISTER, READ IT BACK AND_^1*_)CH€€ECK IT._^1_%SPC 1_^1RCHKIO NOP 0_^1_%STQ* QSAVE_^1*_]_^1*_$CLEAR HFPU BY PROGRAM MASTER CLEAR_^1*_]_^1_%LDQ =XE17811_$1781-1 EQUIPMENT CODE_^1E1781Q EQU E1781Q(*-1)_^1_%INQ -3_+Q = $XXX0_^1_%ENA 1_^1_%OUT RCHKRJ-*_$FSR - PROGRAM MASTER CLEAR_^1*_]_^1_%CLR A_^1_%STA- I_,EQUIP STATION CODE TABLE INDEX_^1*_]_^1RCHK10 CLR Q_^1_%STQ* PATPTR_'INITIALIZE PATTERN POINTER_^1*_]_^1R€€CHK20 LDA* TSTPAT,Q_$NEXT TEST PATTERN_^1_%EOR- HFFFF_^1_%SAZ RCHK30_'SKIP IF FINISHED WITH ALL PATTERNS_^1_%JMP* RCHK50_'PICK UP PATTERN_^1*_]_^1RCHK30 RAO- I_^1_%LDA* QSTATN,I_$NEXT EQUIP STATION_^1_%EOR- HFFFF_^1_%SAZ RCHK40_'SKIP IF FINISHED WITH ALL REGISTERS_^1_%JMP* RCHK10_'TEST REGISTER_^1*_]_^1RCHK40 LDQ* E1781Q_'HFPU EQUIPMENT CODE_^1_%INQ -3_+Q = $XXX0_^1_%ENA 1_^1_%€€OUT RCHKRJ-*_$FSR - PROGRAM MASTER CLEAR_^1*_]_^1RCHK45 LDQ* QSAVE_(RESTORE Q REG_^1_%JMP* (RCHKIO)_$RETURN_^1*_]_^1QSAVE NUM 0_,Q STORAGE_^1RCHK50 LDA* TSTPAT,Q_$PICK UP TEST PATTERN_^1_%LDQ* QSTATN,I_$EQUIPMENT STATION_^1_%SQN RCHK60_'SKIP IF NOT FSR_^1_%AND* FSMASK_'MASK OUT UNDESIRED FSR BITS_^1*_]_^1RCHK60 STA* SAVPAT_'SAVE PATTERN FOR VERIFICATION_^1_%ADQ* E1781Q_'EQUIPME€€NT CODE PLUS STATION_^1_%INQ -3_+ADJUST FOR PRESTORED STATION_^1_%OUT RCHKRJ-*_$WRITE PATTERN TO REGISTER_^1*_]_^1_%CLR A_,CLEAR FOR READ_^1_%INP RCHKRJ-*_$READ WHAT WAS WRITTEN_^1*_]_^1_%LDQ* QSTATN,I_$STATION_^1_%SQN RCHK70_'SKIP IF NOT FSR_^1_%AND* FSMASK_'MASK OUT UNDESIRED FSR BITS_^1*_]_^1RCHK70 STA* BADPAT_'SAVE INPUT IN CASE OF ERROR_^1_%EOR* SAVPAT_'MASK WITH PRE-WRIT€€TEN PATTERN_^1_%SAN RCHK80_'SKIP IF NOT SAME_^1RCHK75 RAO* PATPTR_'BUMP PATTERN POINTER_^1_%LDQ* PATPTR_'PATTERN INDEX_^1_%JMP* RCHK20_'PROCESS PATTERN_^1*_]_^1RCHK80 RAO ERRCNT_^1_%LDA FLAG_^1_%AND- ONEBIT+7_$CHECK FOR NPT IN EFFECT_^1_%SAZ RCHK81_'SKIP IF NOT IN_^1_%JMP* RCHK75_^1*_]_^1RCHK81 LDA- I_^1_%STA* ISTO_)SAVE STATION INDEX_^1_%LDA* HDRFLG_^1_%SAN RCHK82_'SKIP IF NO€€T 1ST ERROR_^1_%RAO* HDRFLG_^1_%MSG 16,LST_'OUT MESSAGE 'TSTHFP REGISTER ERROR'_^1RCHK82 LDA* BADPAT_'ERROR VALUE_^1_%RTJ (RHXASC)_$CONVERT READBACK VALUE TO ASCII_^1_%ADC (BMSG+3-*)_^1_%LDA* SAVPAT_'VALUE THAT WAS OUTPUT_^1_%RTJ (RHXASC)_$CONVERT OUTPUT VALUE TO ASCII_^1_%ADC (BMSG-*)_^1_%LDA* ISTO_)RESTORE I_^1_%STA- I_^1_%LDA* NAMREG,I_$PICKUP ADDRESS OF REGISTER NAME_^1_%S€€TA* RCKMSG+1_$STORE IN MESSAGE_^1_%RTJ (MESAGE)_$PRINT OUT ERROR_^1*_]_^1RCKMSG NUM $0333_^1_%NUM 0_^1_%NUM 3_^1_%ADC SPACE-RCKMSG_^1_%NUM 1_^1_%ADC BMSG-RCKMSG_^1_%NUM 5_^1_%LDA* ISTO_^1_%STA- I_,RESTORE STATION INDEX_^1_%JMP* RCHK75_'KEEP GOING_^1_%EJT_]_^1RCHKRJ JMP* RCKINT_'INTERNAL REJECT_^1_%MSG 14,LST_'OUTPUT EXTERNAL REJECT MESSAGE_^1_%JMP* RCKRJX_^1*_]_^1RCKINT MS€€G 15,LST_'OUTPUT INTERNAL REJECT MESSAGE_^1*_]_^1RCKRJX CLR A_^1_%JMP* RCHK80+1_$GO OUTPUT MESSAGE_^1_%EJT_]_^1HDRFLG NUM 0_,HEADER PRINTOUT FLAG_^1BADPAT NUM 0_,SAVE IN CASE PATTERN IS BAD_^1ISTO_!NUM 0_,SAVE I REGISTER_^1PATPTR NUM 0_,PATTERN POINTER_^1SAVPAT NUM 0_,PATTERN SAVE LOCATION_^1FSMASK NUM $7FDE_(EXCLUDES UNWANTED FSR BITS_^1_%SPC 3_^1*_$EQUIPMENT STATIONS FOR€€ REGISTERS TO BE TESTED_^1QSTATN NUM 0_,FSR_^1_%NUM 1_,CCR_^1_%NUM 2_,IR_^1_%NUM 6_,FPAC1_^1_%NUM 7_,FPAC2_^1_%NUM 8_,FPAC3_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 3_^1*_$REGISTER NAME ADDRESSES_^1NAMREG ADC (AFSR-RCKMSG)_"FSR_^1_%ADC (ACCR-RCKMSG)_"CCR_^1_%ADC (AIR-RCKMSG)_#IR_^1_%ADC (AFPAC1-RCKMSG) FPAC1_^1_%ADC (AFPAC2-RCKMSG) FPAC2_^1_%ADC (AFPAC3-RCKMSG) FPAC3_^1€€_%SPC 3_^1*_$PATTERNS FOR TESTING THE HFPU REGISTERS_^1TSTPAT NUM 0_^1_%NUM 1_,SLIDING ONES_^1_%NUM 2_^1_%NUM 4_^1_%NUM 8_^1_%NUM $10_^1_%NUM $20_^1_%NUM $40_^1_%NUM $80_^1_%NUM $100_^1_%NUM $200_^1_%NUM $400_^1_%NUM $800_^1_%NUM $1000_^1_%NUM $2000_^1_%NUM $4000_^1_%NUM $8000_^1_%SPC 2_^1_%NUM $FFFE_(SLIDING ZEROS_^1_%NUM $FFFD_^1_%NUM $FFFB_^1_%NUM $FFF7_^1€€_%NUM $FFEF_^1_%NUM $FFDF_^1_%NUM $FFBF_^1_%NUM $FF7F_^1_%NUM $FEFF_^1_%NUM $FDFF_^1_%NUM $FBFF_^1_%NUM $F7FF_^1_%NUM $EFFF_^1_%NUM $DFFF_^1_%NUM $BFFF_^1_%NUM $7FFF_^1_%NUM $FFFF_(END OF TABLE_^1_%EJT_]_^1*_]_^1*_$OUTPUT INITIAL MESSAGE_^1*_]_^1RESMSG NOP 0_^1_%LDA FLAGWD_^1_%AND =XRESMSK_$PRINT ONLY SIGNIFICANT BITS_^1_%RTJ (RHXASC)_^1_%ADC (MSG12C-*)_^1_%LDA B€€YTES_^1_%RTJ (RHXASC)_^1_%ADC (MSG12C+3-*)_^1_%LDA OLDX_^1_%RTJ (RHXASC)_^1_%ADC (MSG12C+6-*)_^1_%LDA OLDY_^1_%RTJ (RHXASC)_^1_%ADC (MSG12C+9-*)_^1_%LDA PASNBR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (MSG12B+9-*)_^1_%MSG 12,LST_^1_%JMP* (RESMSG)_$RETURN TO CALLER_^1_%EJT_]_^1ERRFLG NUM $203C_^1SPACE NUM $2020_^1LFPREN ALF 1,(_^1RTPREN ALF 1, )_^1B€€MSG_!ALF *,XXXX XXXX ( XXXX XXXX XXXX*_^1BMSGE EQU BMSGE(*)_^1_%MSA 01,'1781-1 HARDWARE FLOATING POINT UNIT TEST'_^1_%MSA 02,'END 1781-1 TEST, XXXX RUNS, XXXX ERRORS.'_^1_%MSA 03,'FLAGS,RUNS,CSQ LENGTH,MODE'_^1_%MSA 04,'TSTHFP 1781-1 EXTERNAL REJECT'_^1_%MSA 05,'TSTHFP 1781-1 INTERNAL REJECT'_^1_%MSA 06,'TSTHFP ERROR. ACTION?'_^1_%MSA 07,'CALLING SEQUENCE'_^1_%MSA €€08,'ENTER RESTART VALUES/FLAGS,R1,R2,R3,R4'_^1_%MSA 09,'ERROR, NUMBER OF BYTES MAY NOT EXCEED XXXX'_^1_%MSA 10,'TSTHFP STOP/RESTART EXTERNAL REJECT'_^1_%MSA 11,'TSTHFP STOP/RESTART INTERNAL REJECT'_^1_%MSA 14,'TSTHFP REGISTER CHECK EXTERNAL REJECT'_^1_%MSA 15,'TSTHFP REGISTER CHECK INTERNAL REJECT'_^1_%MSA 16,'TSTHFP REGISTER ERROR'_^1_%MSA 17,'FTN PROGRAMS CANNOT RUN DURING€€ HFPU TEST'_^1MSG12B ALF *,TSTHFP ERROR, RUN XXXX, RESTART VALUES *_^1MSG12C ALF *,XXXX XXXX XXXX XXXX*_^1MSG12L EQU MSG12L(*-MSG12B)_^1REGHED ALF *,END REGISTER STATUS*_^1_%ALF *, :R*_^1_%ALF 5,_^1_%ALF 1,S_^1_%ALF 2,_^1_%ALF 1,H_^1REGEND EQU REGEND(*)_^1DATHED ALF *, DATA BUFFERS*_^1_%NUM $200D_^1_%ALF *,ADDR_"S_#H*_^1DATEND EQU DATEND(*)_^1_%EJT_]_^1TSTBUF BZS€~ TSTBUF(1024)_^1BUFEND EQU BUFEND(*-1)_^1TSTBF1 BZS TSTBF1(1024)_^1BUFND1 EQU BUFND1(*-1)_^1END_"EQU END(*)_^1_%END_]_^__~PSFLOAT CSY/ B80 P€1_%NAM SFLOAT_'DECK-ID B80 PERIPH. DRIVERS 1.0B SUMMARY-106_^1SETB_!MAC P_^1_%LDA- STATUS_^1_%AND- ZROBIT+'P'_^1_%EOR- ONEBIT+'P'_^1_%STA- STATUS_^1_%EMC_]_^1CLEAR MAC P_^1_%LDA- STATUS_^1_%AND- ZROBIT+'P'_^1_%STA- STATUS_^1_%EMC_]_^1GET_"MAC P_^1_%LDA- STATUS_^1_%AND- ONEBIT+'P'_^1_%EMC_]_^1_%EJT_]_^1*_$SOFTWARE SIMULATION OF 1781-1 HARDWARE FLOATING POINT UNIT_^1*_$PERIPHE€€RAL DRIVERS 1.0B_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORP. 1976_^1_%SPC 5_^1_%ENT FLOTS_^1_%ENT DFLOTS_^1_%EJT_]_^1*_$LIST OF FLOATING POINT OPERATION CODES._^1*_$0_"SPEC_)FIRST BYTE OF TWO BYTE OP CODE_^1*_$1_"FLOF_)FLOAT TO FIXED CONVERSION OF ACCUMULATOR_^1*_$2_"FIXF_)FIXED TO FLOAT CONVERSION OF INTEGER OPERAND_^1*_$3_"STRI_)STORE IN€€DEX_^1*_$4_"FEND_)END OF CALLING SEQUENCE_^1*_$5_"CHMD_)CHANGE MODE REL/ABS_^1*_$6_"NIDX_)NO INDEX_^1*_$7_"FCOM_)COMPLEMENT_^1*_$8_"FSUB_)SUBTRACT_^1*_$9_"FMPY_)MULTIPLY_^1*_$A_"FDIV_)DIVIDE_^1*_$B_"FLDD_)LOAD_^1*_$C_"ADDI_)ADD TO INDEX_^1*_$D_"FLST_)STORE_^1*_$E_"FADD_)ADD_^1*_$F_"INDX_)INDEX_^1*_]_^1*_$G, THE PSUEDO ACCUMULATOR IS BROKEN UP INTO_^1*_$C,D,AND DELTA._^1_%EJT_]_^1*_€€]_^1*_$LOCORE EQUIVALENCES_^1*_]_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU ZROBIT($33)_^1_%EQU LPMSK($2)_^1_%EQU H7FFF($11)_^1_%EQU HFFF8($15)_^1_%EQU HFFC0($18)_^1_%EQU HFF80($19)_^1_%EQU H00FF($A)_^1_%EQU HFF00($1A)_^1_%EQU ERASE($41)_^1_%EQU SETBIT($31)_^1_%EJT_]_^1*_]_^1*_$FORTRAN SCRATCH AREA EQUIVALENCES_^1*_]_^1_%EQU STATUS($C8)_!PACKAGE STATUS WORD_^1_%EQU €€ CCR($C9)_^1_%EQU INDEX($CA)_^1_%EQU P($CB)_^1_%EQU G($CC)_'FIRST WORD OF PSEUDO ACCUMULATOR_^1_%EQU SHIFCT($CF)_^1_%EQU OPCNT($D0)_"OPERAND BYTE COUNTER_^1_%EQU SIGN($D1)_#SIGN OF UNPACKED ACCUMULATOR_^1_%EQU RETURN($D2)_!RETURN ADDRESS_^1*_]_^1*_$VOLATILE STORAGE ALLOCATION_^1*_]_^1_%EQU A(6)_^1_%EQU AI(7)_^1_%EQU B(8)_^1_%EQU BETA(9)_^1_%EQU C(10)_^1_%EQU CI(11)_^1_€€%EQU D(12)_^1_%EQU DELTA(13)_^1_%EQU TEMPQ(14)_^1_%EQU TEMGP2(15)_^1*_]_^1*_]_^1*_]_^1_%EQU CTR(SHIFCT)_^1_%EQU R1X(DELTA)_^1_%EQU R1A(C)_^1_%EQU R1B(CI)_^1_%EQU R1C(D)_^1_%EQU R2X(BETA)_^1_%EQU R2A(A)_^1_%EQU R2B(AI)_^1_%EQU R2C(B)_^1_%EQU R3A(G)_^1_%EQU R3B(G+1)_^1_%EQU R3C(G+2)_^1_%EQU TEMP(TEMPQ)_^1*_]_^1*_$STATUS WORD BITS_^1*_]_^1_%EQU IDXINH(3)_#INDEXING IN€€HIBITED FLAG_^1_%EQU PACKFL(4)_#ACCUMULATOR UNPACKED FLAG (1=UNPACKED)_^1_%EQU FENDBT(6)_#A FEND INSTRUCTION HAS BEEN ENCOUNTERED_^1_%EQU DBLFLG(7)_#DOUBLE/SINGLE PRECISION MODE FLAG_^1_%EQU RELADR(9)_"RELATIVE ADDRESS MODE_^1_%EJT_]_^1DFLOTS NUM 0_,DOUBLE PRECISION ENTRY_^1_%STA- P_,SAVE CALLING SEQUENCE ADDRESS_^1_%LDA* DFLOTS_^1_%STA- RETURN_'SAVE RETURN ADDRESS_^1_%SETB DB€€LFLG_'SET DOUBLE PRECISION MODE FLAG_^1_%JMP* COMMON_^1FLOTS NUM 0_,SINGLE PRECISION ENTRY_^1_%STA- P_,SAVE CALLING SEQUENCE ADDRESS_^1_%LDA* FLOTS_^1_%STA- RETURN_'SAVE RETURN ADDRESS_^1_%CLEAR DBLFLG_%CLEAR DOUBLE PRECISION MODE FLAG_^1COMMON LDA- STATUS_^1_%AND =N$7080_^1_%STA- STATUS_^1_%ENA 0_^1_%STA- INDEX_^1_%RTJ AVOLA_(GET VOLATILE STORAGE_^1_%LDA- P_^1STOREP STA- P_^1€€_%ENA 3_^1_%STA- OPCNT_^1NXTOPC RTJ* NXTOP_'GET NEXT OPCODE BYTE_^1_%QLS 1_,Q*2 TO Q FOR TWO WORD JUMPS_^1_%JMP* FLINS,Q_%GO TO INSTRUCTION PROCESSOR_^1_%EJT_]_^1*_]_^1*_$JUMPS TO INSTRUCTION PROCESSORS_^1*_]_^1FLINS JMP SPEC_)0=FIRST BYTE OF 2 BYTE OP CODE_^1_%JMP FLOF_)1=FLOAT TO FIXED CONVERSION_^1_%JMP FIXF_)2=FIXED TO FLOAT CONVERSION_^1_%JMP STRI_)3=STORE INDEX REGISTE€€R_^1_%JMP FEND_)4=END OF CALLING SEQUENCE_^1_%JMP CHMD_)5=CHANGE ADDRESSING MODE (ABS/REL)_^1_%JMP NIDX_)6=CLEAR INDEX_^1_%JMP FCOM_)7=COMPLEMENT ACCUMULATOR_^1_%JMP DFSUB_(8=SUBTRACT_^1_%JMP DFMPY_(9=MULTIPLY_^1_%JMP DFDIV_(A=DIVIDE_^1_%JMP DFLDD_(B=LOAD ACCUMULATOR_^1_%JMP ADDI_)C=ADD TO INDEX_^1_%JMP DFLST_(D=STORE ACCUMULATOR_^1_%JMP DFADD_(E=ADD_^1_%JMP INDX_)F=LOA€€D INDEX_^1_%EJT_]_^1_%JMP FEND_)0,0=RESERVED FOR FUTURE USE_^1_%JMP CACS_)0,1=UNCONDITIONAL JUMP_^1_%JMP BRAM_)0,2=BRANCH IF ACCUMULATOR MINUS_^1_%JMP BRAZ_)0,3=BRANCH IF ACCUMULATOR ZERO_^1_%JMP BRAN_)0,4=BRANCH IF ACCUMULATOR NON-ZERO_^1_%JMP BRAP_)0,5=BRANCH IF ACCUMULATOR POSITIVE_^1_%JMP BRIM_)0,6=BRANCH IF INDEX MINUS_^1_%JMP BRIZ_)0,7=BRANCH IF INDEX ZERO_^1_%JMP BR€€IN_)0,8=BRANCH IF INDEX NON-ZERO_^1_%JMP BRIP_)0,9=BRANCH IF INDEX POSITIVE_^1_%JMP FEND_)0,A=RESERVED FOR FUTURE USE_^1_%JMP FEND_)0,B=RESERVED FOR FUTURE USE_^1_%JMP FEND_)0,C=RESERVED FOR FUTURE USE_^1_%JMP FEND_)0,D=RESERVED FOR FUTURE USE_^1_%JMP FEND_)0,E=RESERVED FOR FUTURE USE_^1_%JMP FEND_)0,F=RESERVED FOR FUTURE USE_^1_%EJT_]_^1NXTOP NOP 0_,GET NEXT OPCODE BYTE I€€N Q_^1_%LDA- OPCNT_(PICK UP OPERAND BYTE COUNTER_^1_%INA -3_+TEST FOR END OF WORD_^1_%SAP NXTOP2_'IT IS, GET NEXT WORD_^1_%INA 3+1_*BUMP BYTE COUNTER BY 1_^1_%STA- OPCNT_^1NXTOP1 LDA- CCR_^1_%ALS 4_^1_%STA- CCR_^1_%ENQ $F_^1_%LAQ Q_^1_%JMP* (NXTOP)_%RETURN_^1NXTOP2 STA- OPCNT_(ZERO TO OPCNT_^1_%LDA- (P)_*PICK UP NEXT COMMAND WORD_^1_%STA- CCR_^1_%RAO- P_,BUMP P COUNTER_^1_%JM€€P* NXTOP1_^1_%SPC 3_^1SPEC_!RTJ* NXTOP_(GET NEXT OPCODE BYTE IN Q_^1_%INQ 16_+ADD INCREMENT TO SECOND HALF OF TABLE_^1_%QLS 1_,Q*2 TO Q FOR TWO WORD JUMPS_^1_%JMP* FLINS,Q_%GO TO INSTRUCTION PROCESSOR_^1_%SPC 3_^1FEND_!RTJ PACK_)REPACK ACCUMULATOR BEFORE EXITING_^1_%LDA- OPCNT_^1_%INA 1_^1_%AND- LPMSK+2_^1_%ALS 10_^1_%EOR- STATUS_'PLACE OPCNT INTO STATUS WORD_^1_%EOR- ONEBIT€€+FENDBT SET FEND FLAG_^1_%STA- STATUS_^1_%RTJ AVOLR_(RELEASE VOLATILE STORAGE_^1_%JMP- (RETURN)_$RETURN TO CALLER_^1_%SPC 3_^1CHMD_!LDA- STATUS_^1_%EOR- ONEBIT+RELADR REVERSE ABSOLUTE/RELATIVE SWITCH_^1_%STA- STATUS_^1_%JMP* NXTOPC_^1_%EJT_]_^1NIDX_!ENA 0_^1_%JMP* STONDX_^1INDX_!ENA 0_^1_%STA- INDEX_^1_%RTJ OPERND_(OPERND TO INDEX_^1_%LDA- 1,Q_8OPERAND TO INDEX_^1STONDX STA- €€INDEX_^1_%JMP* NXTOPC_^1_%SPC 3_^1STRI_!SETB IDXINH_%INHIBIT INDEXING_^1_%RTJ OPERND_'GET OPERAND ADDRESS - 1_^1*_$RTJ PROCHK_'CHECK FOR PROTECT VIOLATION_^1_%LDA- INDEX_^1_%STA- 1,Q_^1_%JMP NXTOPC_'GO TO NEXT INSTRUCTION_^1_%SPC 3_^1ADDI_!SETB IDXINH_'INHIBIT INDEXING_^1_%RTJ OPERND_'GET OPERAND ADDRESS - 1_^1_%LDA- INDEX_^1_%ADD- 1,Q_*ADD TO INDEX_^1_%STA- INDEX_^1_%JMP N€€XTOPC_'GO TO NEXT INSTRUCTION_^1_%SPC 3_^1_%EJT_]_^1CACS_!SETB IDXINH_'SET INHIBIT INDEXING FLAG_^1_%RTJ OPERND_'GET JUMP ADDRESS - 1_^1_%INQ 1_^1*_$RTJ PROCHK_'CHECK FOR UNPROTECTED/PROTECTED JUMP_^1_%TRQ A_^1_%JMP STOREP_'EXECUTE JUMP_^1_%SPC 3_^1NOJUMP RAO- P_,BUMP P COUNTER OVER ADDRESS_^1_%JMP NXTOPC_'EXECUTE NEXT INSTRUCTION_^1BRAM_!RTJ* GETSGN_'GET SIGN OF ACCUMULATO€€R IN A_^1_%SAP BRAM1_^1_%JMP* CACS_^1BRAM1 JMP* NOJUMP_^1_%SPC 3_^1BRAP_!RTJ* GETSGN_'GET SIGN OF ACCUMULATOR IN A_^1_%SAM BRAP1_^1_%JMP* CACS_^1BRAP1 JMP* NOJUMP_^1_%SPC 3_^1GETSGN NOP 0_^1_%GET PACKFL_^1_%SAZ GETS1_(SKIP IF ACCUMULATOR PACKED_^1_%LDA- SIGN_^1_%JMP* (GETSGN)_^1GETS1 LDA- G_^1_%JMP* (GETSGN)_^1_%SPC 3_^1BRAZ_!RTJ* GETACC_^1_%SAN BRAZ1_^1_%JMP* CACS_^1BR€€AZ1 JMP* NOJUMP_^1_%SPC 3_^1BRAN_!RTJ* GETACC_^1_%EJT_]_^1_%SAZ BRAN1_^1_%JMP* CACS_^1BRAN1 JMP* NOJUMP_^1_%SPC 3_^1GETACC NOP 0_^1_%GET PACKFL_^1_%SAZ GETA1_(SKIP IF ACCUMULATOR PACKED_^1_%LDA- R1A,I_^1_%JMP* (GETACC)_^1GETA1 LDA- G_^1_%JMP* (GETACC)_^1_%SPC 3_^1BRIM_!LDA- INDEX_^1_%SAP BRIM1_^1_%JMP* CACS_^1BRIM1 JMP* NOJUMP_^1_%SPC 3_^1BRIP_!LDA- INDEX_^1_%SAM BRIP€€1_^1_%JMP* CACS_^1BRIP1 JMP* NOJUMP_^1_%SPC 3_^1BRIZ_!LDA- INDEX_^1_%SAN BRIZ1_^1_%JMP* CACS_^1BRIZ1 JMP* NOJUMP_^1_%SPC 3_^1BRIN_!LDA- INDEX_^1_%SAZ BRIN1_^1_%JMP* CACS_^1BRIN1 JMP* NOJUMP_^1_%EJT_]_^1*_FGET ADDRESS OF NEXT OPERAND_^1*_$GET OPERAND ADDRESS - 1 IN Q_^1*_]_^1OPERND 0_"0_^1_%LDQ- P_^1_%LDQ- (ZERO),Q_$ADDRESS TO Q_^1_%GET RELADR_'CHECK RELATIVE/ABSOLUTE ADDRES€€SING_^1_%SAZ DIRECT_'SKIP IF ADDRESS ABSOLUTE_^1_%ADQ- P_,CHANGE RELATIVE ADDRESS TO ABSOLUTE_^1DIRECT GET IDXINH_'CHECK IF INDEX INHIBITED_^1_%SAZ ADDIDX_'SKIP IF NOT INHIBITED TO ADD INDEX_^1_%EOR- STATUS_'CLEAR IDXINH_^1_%STA- STATUS_^1_%JMP* NOINDX_^1ADDIDX LDA- INDEX_^1_%ALS 1_,MULTIPLY INDEX BY TWO_^1_%AAQ Q_,COMBINE IN Q_^1_%GET DBLFLG_'GET SINGLE/DOUBLE PRECISION MODE€€ FLAG_^1_%SAZ NOINDX_'SKIP IF IN SINGLE PRECISION MODE_^1_%ADQ- INDEX_(FORM ADDRESS+INDEX*3_^1NOINDX INQ -1_+OPERAND ADDRESS - 1 TO Q_^1_%RAO- P_,BUMP P COUNTER_^1_%JMP* (OPERND)_(RETURN EFFECTIVE ADR -1 IN Q_^1_%EJT_]_^1*_FFLOATING LOAD_^1DFLDD RTJ* OPERND_'GET OPERAND ADDRESS-1 IN Q_^1_%LDA- 3,Q_^1_%STA- R3C_^1_%LDA- 2,Q_^1_%STA- R3B_^1_%LDA- 1,Q_^1_%INA 0_^1_%STA- R3A_^1_%TR€€A Q_^1_%GET DBLFLG_^1_%SAN FLDDX_(SKIP IF IN DOUBLE PRECISION MODE_^1_%QRS 15_+SET Q = TO SIGN OF OPERAND_^1_%STQ- R3C_*SET R3C = SIGN OF OPERAND_^1FLDDX CLEAR PACKFL_^1_%RTJ* UNPACK_^1_%JMP NXTOPC_^1_%EJT_]_^1UNPACK NOP 0_^1_%GET PACKFL_^1_%SAZ UNPCK_(SKIP IF ACCUMULATOR PACKED_^1_%JMP* (UNPACK)_$RETURN_^1UNPCK SETB PACKFL_^1_%LDA- G_^1_%STA- SIGN_^1*_*UNPACK FROM G INTO€€ C, CI, D, AND DELTA_^1_%LDQ- G+2_^1_%STQ- TEMGP2,I_$G+2_^1_%LDQ- G+1_^1_%STQ- TEMPQ,I_%G+1_^1_%SAP STEP2B-*-1_^1_%TCA A_,COMPLEMENT G_^1_%LDQ- TEMGP2,I_^1_%TCQ Q_^1_%STQ- TEMGP2,I_$COMPLEMENT G+2_^1_%LDQ- TEMPQ,I_^1_%TCQ Q_^1_%STQ- TEMPQ,I_%COMPLEMENT G+1_^1STEP2B STA- C,I_^1_%SAN A4-*-1_^1_%JMP* ARG0_^1A4_#ALS 1_^1_%EOR- ONEBIT+15_#$8000_^1_%ARS 8_^1_%INA 0_^1_%STA- DELTA€€,I_^1_%LDA- C,I_^1_%LDQ- TEMPQ,I_^1_%LLS 8_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- C,I_^1_%LDA- TEMGP2,I_^1_%LDQ- TEMPQ,I_^1_%LLS 23_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- CI,I_^1_%LLS 15_^1_%AND =N$7FC0_^1_%STA- D,I_^1_%JMP* (UNPACK)_^1ARG0_!CLR A_,ARGUMENT IS ZERO._^1_%STA- C,I_^1_%STA- CI,I_^1_%STA- D,I_^1_%STA- DELTA,I_^1_%STA- SIGN_^1_%JMP* (UNPACK)_^1_%EJT_]_^1*_FFLOATING STORE_^1D€€FLST RTJ* PACK_)PACK ACCUMULATOR IF UNPACKED_^1_%RTJ* OPERND_'GET OPERAND ADDRESS-1 IN Q_^1_%GET DBLFLG_(GET DOUBLE PRECISION MODE FLAG_^1_%SAZ FLST1_(SKIP IF IN SINGLE PRECISION MODE_^1_%LDA- R3C_^1_%STA- 3,Q_^1FLST1 LDA- R3B_^1_%STA- 2,Q_^1_%LDA- R3A_^1_%STA- 1,Q_^1ANXT_!JMP NXTOPC_^1_%EJT_]_^1PACK_!NOP 0_^1_%GET PACKFL_^1_%SAN PACK1_(SKIP IF ACCUMULATOR UNPACKED_^1_%JMP* €€(PACK)_'RETURN_^1PACK1 CLEAR PACKFL_^1_%LDQ- C,I_^1*_*IF C IS ZERO, THEN ACCUMULATOR IS ZERO_^1_%SQN PACK2_^1_%STQ- G_^1_%STQ- G+1_^1_%STQ- G+2_^1_%JMP* FLSTA_^1PACK2 LDA- R1B,I_^1_%ALS 1_^1_%LLS 1_^1_%AND- LPMSK+25_$$FE00_^1_%STA- G+1_^1_%LDA- DELTA,I_^1_%AND- LPMSK+8_%$00FF_^1_%EOR- ONEBIT+7_$$0080_^1_%ADD- G+1_^1_%LLS 7_^1_%STA- G_^1_%STQ- G+1_^1_%LDQ- CI,I_^1_%LDA- D,I_^1€€_%ALS 1_^1_%LLS 9_^1_%STQ- G+2_^1_%LDQ- SIGN_^1_%SQP FLSTA-*-1_^1_%LDA- G_^1_%TCA A_^1_%STA- G_,IF SIGN IS NEG._^1_%LDA- G+1_*COMPLEMENT G._^1_%TCA A_^1_%STA- G+1_^1_%LDA- G+2_^1_%TCA A_^1_%STA- G+2_^1FLSTA NOP 0_,*** REMOVE FOREGROUND***_^1_%JMP* (PACK)_^1_%EJT_]_^1*_]_^1*_FFLOATING COMPLEMENT_^1FCOM_!RTJ* UNPACK_'UNPACK ACCUMULATOR IF PACKED_^1_%LDA- C,I_^1_%SAN ACMOK_^1€€_%JMP ARGZRO_'AGRUMENT IS ZERO_^1ACMOK LDA- SIGN_^1_%TCA A_,REVERSE SIGN_^1_%STA- SIGN_^1_%JMP* ANXT_^1_%EJT_]_^1*_*FLOATING POINT MULTIPLY OF F*G_^1*_]_^1DFMPY RTJ UNPACK_^1_%RTJ OPERND_^1_%RTJ FLTSET_*STEPS 1,2,3 AND 4 OF MPY OR DIV_^1*_*IF F IS NEG., CHANGE SIGN._^1_%SAZ JMPOUT-*-1_^1_%SAP FLT1-*-1_^1_%LDA- SIGN_^1_%TCA A_^1_%STA- SIGN_^1*_]_^1*_*STEP 5.A._^1FLT1_!LDA-€€ R1A,I_^1_%SAN NOZERO-*-1_^1JMPOUT JMP ARGZRO_'ARGUMENT IS ZERO_^1NOZERO ENA 0_,CLEAR R3_^1_%STA- R3A_^1_%STA- R3B_^1_%STA- R3C_^1*_]_^1*_$SQUEEZE CARRY BITS OUT OF R1 AND RIGHT SHIFT IT 9_^1*_]_^1_%LDQ- R1B,I_^1_%LDA- R1C,I_^1_%ALS 1_^1_%LRS 7_^1_%STA- R1C,I_^1_%LDQ- R1A,I_^1_%LDA- R1B,I_^1_%ALS 1_^1_%LRS 8_^1_%STA- R1B,I_^1_%STQ- R1A,I_^1*_]_^1*_$SHIFT R2 RIGHT 1_^1*_]_^1_€€%LDQ- R2B,I_^1_%LDA- R2C,I_^1_%ALS 1_^1_%LRS 1_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R2C,I_^1_%LDQ- R2A,I_^1_%LDA- R2B,I_^1_%ALS 1_^1_%LRS 1_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R2B,I_^1_%TRQ A_^1_%AND- H7FFF_^1_%STA- R2A,I_^1*_]_^1*_$SET ITERATION COUNT TO 39_^1*_]_^1_%ENA 39_^1_%STA- CTR_^1_%EJT_]_^1*_$IF R1 LSB.EQ.1, R3=R2+R3_^1*_]_^1MPY1_!LDA- R1C,I_^1_%AND- ONEBIT_^1_%SAN MP€€Y2_^1_%JMP* MPY5_)R1 LSB.EQ.0, BYPASS ADD_^1MPY2_!LDA- R2C,I_^1_%ADD- R3C_^1_%CLR Q_^1_%SAP MPY3_)SKIP IF NO CARRY_^1_%ENQ 1_,CARRY TO Q_^1_%AND- H7FFF_^1MPY3_!STA- R3C_^1_%LDA- R2B,I_^1_%AAQ A_,ADD IN CARRY BIT IF ANY_^1_%CLR Q_^1_%SAP MPY3A_(SKIP IF NO CARRY_^1_%ENQ 1_^1_%AND- H7FFF_^1MPY3A ADD- R3B_^1_%SAP MPY4_)SKIP IF NO CARRY_^1_%ENQ 1_^1_%AND- H7FFF_^1MPY4_!STA- R3€€B_^1_%LDA- R2A,I_^1_%ADD- R3A_^1_%AAQ A_,ADD IN CARRY BIT IF ANY_^1_%STA- R3A_^1*_]_^1*_$SHIFT R3 RIGHT 1_^1*_]_^1MPY5_!LDQ- R3B_^1_%LDA- R3C_^1_%ALS 1_^1_%LRS 1_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R3C_^1_%LDQ- R3A_^1_%LDA- R3B_^1_%ALS 1_^1_%LRS 1_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R3B_^1_%TRQ A_^1_%AND- H7FFF_^1_%STA- R3A_^1*_]_^1*_$DECREMENT COUNTER AND CHECK FOR END_^1*_]_^€€1_%LDA- CTR_^1_%INA -1_^1_%SAN MPY6_)SKIP IF ITERATIONS NOT COMPLETED_^1_%JMP* MPY7_^1MPY6_!STA- CTR_^1_%EJT_]_^1*_]_^1*_$SHIFT R1 RIGHT 1_^1*_]_^1_%LDA- R1C,I_^1_%LDQ- R1B,I_^1_%LRS 1_^1_%STA- R1C,I_^1_%LDA- R1B,I_^1_%LDQ- R1A,I_^1_%LRS 1_^1_%STA- R1B,I_^1_%STQ- R1A,I_^1_%JMP* MPY1_^1*_]_^1*_$SQUEEZE CARRYS OUT OF R3_^1*_]_^1MPY7_!LDQ- R3A_^1_%LDA- R3B_^1_%ALS 1_^1_%LLS 1_^1€€_%STQ- R3A_^1_%LDQ- R3B_^1_%LDA- R3C_^1_%ALS 1_^1_%LLS 2_^1_%STQ- R3B_^1_%AND- HFFF8_^1_%STA- R3C_^1*_]_^1*_$GO TO NORMALIZE RESULT_^1*_]_^1_%JMP* NRMLIZ_^1_%SPC 3_^1ARGZRO CLR A_^1_%STA- R1A,I_^1_%STA- R1B,I_^1_%STA- R1C,I_^1_%STA- R1X,I_^1_%STA- SIGN_^1_%JMP NXTOPC_^1_%EJT_]_^1*_]_^1*_$NORMALIZE RESULT_^1*_]_^1NRMLIZ ENQ 0_^1_%STQ- SHIFCT_^1_%LDQ- R3A_^1NRML1 LDA- R3B_^1_%L€€LS 1_^1_%STQ- R3A_^1_%LDQ- R3B_^1_%LDA- R3C_^1_%LLS 1_^1_%AND- ZROBIT_^1_%STQ- R3B_^1_%STA- R3C_^1_%LDQ- R3A_^1_%SQM NRML2_(SKIP IF NORMALIZED_^1_%RAO- SHIFCT_^1_%JMP* NRML1_^1*_]_^1*_$OPEN UP CARRY SLOTS IN R3_^1*_]_^1NRML2 LDA- R3B_^1_%LRS 1_^1_%ARS 1_^1_%AND- H7FFF_^1_%LLS 16_^1_%AND- H7FFF_^1_%STA- R3A_^1_%TRQ A_^1_%LDQ- R3B_^1_%STA- R3B_^1_%LDA- R3C_^1_%LRS 3_^1_%AND-€€ H7FFF_^1_%STA- R3C_^1*_]_^1*_$ROUND R3 TO 23/39 BITS_^1*_]_^1_%GET DBLFLG_^1_%SAZ ROUND2_'SKIP IF SINGLE PRECISION_^1_%LDA- R3C_^1_%INA $20_^1_%SAM ROUND1_'SKIP IF CARRY INTO R3B_^1_%STA- R3C_^1_%JMP* TRUNC_^1ROUND1 AND- H7FFF_^1_%STA- R3C_^1_%LDA- R3B_^1_%INA 1_,CARRY INTO R3B_^1_%JMP* ROUND3_^1ROUND2 LDA- R3B_^1_%INA $40_^1ROUND3 STA- R3B_^1_%SAP TRUNC_(SKIP IF NO CARRY IN€€TO R3A_^1_%AND- H7FFF_^1_%STA- R3B_^1_%RAO- R3A_*CARRY INTO R3A_^1_%LDA- R3A_^1_%SAP TRUNC_(SKIP IF NO END AROUND CARRY_^1_%RAO- R1X,I_(RIGHT SHIFT 1_^1_%ALS 15_^1_%STA- R3A_^1*_]_^1*_$TRUNCATE R3 TO 23/39 BITS AND MOVE IT TO R1_^1*_]_^1TRUNC GET DBLFLG_^1_%TRA Q_,SINGLE/DOUBLE PRECISION MODE FLAG TO Q_^1_%LDA- R3A_^1_%STA- R1A,I_^1_%LDA- R3B_^1_%SQN TRUNC1_'SKIP IF DOUBLE PRE€€CISION MODE_^1_%AND- HFF80_(TRUNCATE TO 23 BITS_^1_%STA- R1B,I_^1_%STQ- R1C,I_(ZERO TO THIRD WORD_^1_%JMP* COMBIN_^1TRUNC1 STA- R1B,I_^1_%LDA- R3C_^1_%AND- HFFC0_(TRUNCATE TO 39 BITS_^1_%STA- R1C,I_^1*_]_^1*_$COMBINE EXPONENTS_^1*_]_^1COMBIN LDA- R1X,I_^1_%ADD- R2X,I_^1_%SUB- SHIFCT_^1_%STA- R1X,I_^1*_]_^1*_$TEST FOR UNDERFLOW/OVERFLOW_^1*_]_^1_%TRA Q_^1_%ARS 7_^1_%INA 0_^1_%SAZ€€ TD1_^1_%JMP OVFUNF_^1TD1_"JMP NXTOPC_'GO GET NEXT OPCODE_^1_%EJT_]_^1*_]_^1DFDIV RTJ UNPACK_^1_%RTJ OPERND_^1_%RTJ FLTSET_'STEPS 1, 2, 3, AND 4 OF MPY OR DIV. AND NORMAL_^1*_8SET A,AI,B,BETA,F,F+1,F+2_^1_%SAN A6-*-1_^1_%JMP DIVZER_'IF F IS ZERO, GO TO DIVZER_^1A6_#SAP FLT3_^1_%LDA- SIGN_^1_%TCA A_^1_%STA- SIGN_^1FLT3_!LDA- BETA,I_^1_%TCA A_^1_%INA 1_^1_%STA- BETA,I_^1€€_%LDA- R1A,I_^1_%SAN DIV1_)SKIP IF ACCUMULATOR NOT ZERO_^1_%JMP* ARGZRO_'ACCUMULATOR IS ZERO_^1_%EJT_]_^1*_]_^1*_$CLEAR R3_^1*_]_^1DIV1_!ENA 0_^1_%STA- R3A_^1_%STA- R3B_^1_%STA- R3C_^1*_]_^1*_$SET COUNTER FOR 44 ITERATIONS_^1*_]_^1_%ENA 44_^1_%STA- CTR_^1*_]_^1*_$SHIFT R1 RIGHT 3_^1*_]_^1_%LDQ- R1B,I_^1_%LDA- R1C,I_^1_%ALS 1_^1_%LRS 3_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R1C,I_^€€1_%LDQ- R1A,I_^1_%LDA- R1B,I_^1_%ALS 1_^1_%LRS 3_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R1B,I_^1_%STQ- R1A,I_^1*_]_^1*_$SHIFT R2 RIGHT 2_^1*_]_^1_%LDQ- R2B,I_^1_%LDA- R2C,I_^1_%ALS 1_^1_%LRS 2_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R2C,I_^1_%LDQ- R2A,I_^1_%LDA- R2B,I_^1_%ALS 1_^1_%LRS 2_^1_%ARS 1_^1_%AND- H7FFF_^1_%STA- R2B,I_^1_%STQ- R2A,I_^1_%EJT_]_^1*_]_^1*_$ASSURE THAT SIGN OF R€€2 IS OPPOSITE THAT OF R1_^1*_]_^1DIV1A LDA- R1A,I_^1_%AND- ONEBIT+14_^1_%TRA Q_^1_%LDA- R2A,I_^1_%AND- ONEBIT+14_^1_%EAQ A_^1_%SAZ DIV2_)SKIP TO COMPLEMENT IF SIGNS SAME_^1_%JMP* DIV3_^1*_]_^1*_$COMPLEMENT R2 AND CLEAR CARRYS_^1*_]_^1DIV2_!LDA- R2A,I_^1_%TCA A_^1_%AND- H7FFF_^1_%STA- R2A,I_^1_%LDA- R2B,I_^1_%TCA A_^1_%AND- H7FFF_^1_%STA- R2B,I_^1_%LDA- R2C,I_^1_%TCA A_^1_%AN€€D- H7FFF_^1_%STA- R2C,I_^1*_]_^1*_$COMPUTE R1=R1+R2_^1*_]_^1DIV3_!LDA- R1C,I_^1_%ADD- R2C,I_^1_%CLR Q_^1_%SAP DIV4_)SKIP IF NO CARRY_^1_%ENQ 1_^1_%AND- H7FFF_^1DIV4_!STA- R1C,I_^1_%LDA- R1B,I_^1_%AAQ A_,ADD IN CARRY_^1_%CLR Q_^1_%SAP DIV4A_(SKIP IF NO CARRY_^1_%ENQ 1_^1_%AND- H7FFF_^1DIV4A ADD- R2B,I_^1_%SAP DIV5_)SKIP IF NO CARRY_^1_%ENQ 1_^1_%AND- H7FFF_^1DIV5_!STA- R1B€€,I_^1_%LDA- R1A,I_^1_%ADD- R2A,I_^1_%AAQ A_,ADD IN CARRY_^1_%CLR Q_^1_%SAP DIV6_^1_%ENQ 1_^1_%AND- H7FFF_^1DIV6_!STA- R1A,I_^1_%SQN DIV6D_(SKIP IF END AROUND CARRY_^1_%EOR- H7FFF_^1_%SAZ DIV6A_(SKIP IF R1A.EQ.$7FFF_^1_%JMP* DIV7_^1DIV6A LDA- R1B,I_^1_%EOR- H7FFF_^1_%SAZ DIV6B_(SKIP IF R1B.EQ.$7FFF_^1_%JMP* DIV7_^1DIV6B LDA- R1C,I_^1_%EOR- H7FFF_^1_%SAZ DIV6C_(SKIP IF R1C.€€EQ.$7FFF_^1_%JMP* DIV7_^1DIV6C STA- R1A,I_(CHANGE -0 TO +0_^1_%STA- R1B,I_^1_%STA- R1C,I_^1_%JMP* DIV7_^1DIV6D LDA- R1C,I_^1_%INA 1_^1_%STA- R1C,I_^1_%SAP DIV7_^1_%AND- H7FFF_^1_%STA- R1C,I_^1_%LDA- R1B,I_^1_%INA 1_^1_%STA- R1B,I_^1_%SAP DIV7_^1_%AND- H7FFF_^1_%STA- R1B,I_^1_%RAO- R1A,I_^1*_]_^1*_$SHIFT R3 LEFT 1 PLACING THE COMPLEMENT OF R1'S SIGN IN R3 LSB_^1*_]_^1DIV7_!LDQ€€- R3A_^1_%LDA- R3B_^1_%LLS 1_^1_%STQ- R3A_^1_%LDQ- R3B_^1_%LDA- R3C_^1_%LLS 1_^1_%STQ- R3B_^1_%LDA- R1A,I_^1_%AND- ONEBIT+14_#GET SIGN OF R1 IN A_^1_%CLR Q_^1_%SAN DIV8_)SKIP IF R1 MINUS_^1_%SET Q_^1DIV8_!LDA- R3C_^1_%ARS 4_^1_%LLS 5_^1_%STA- R3C_^1_%EJT_]_^1*_]_^1*_$SHIFT R1 LEFT 1 (END AROUND)_^1*_]_^1_%LDQ- R1A,I_^1_%LDA- R1C,I_^1_%QLS 1_^1_%LLS 1_^1_%AND- H7FFF_^1_%LDQ€€- R1C,I_^1_%STA- R1C,I_^1_%LDA- R1B,I_^1_%QLS 1_^1_%LLS 1_^1_%AND- H7FFF_^1_%LDQ- R1B,I_^1_%STA- R1B,I_^1_%LDA- R1A,I_^1_%QLS 1_^1_%LLS 1_^1_%AND- H7FFF_^1_%STA- R1A,I_^1*_]_^1*_$DECREMENT COUNTER AND CHECK FOR END_^1*_]_^1_%LDA- CTR_^1_%INA -1_^1_%STA- CTR_^1_%SAZ DIV9_)SKIP IF DONE_^1_%JMP* DIV1A_(GO BACK FOR ANOTHER PASS_^1*_]_^1*_$GO TO NORMALIZE RESULT_^1*_]_^1DIV9_!JMP €€ NRMLIZ_^1_%EJT_]_^1*_$UNPACK OPERAND INTO R2_^1*_]_^1FLTSET NUM 0_^1_%LDA- 3,Q_^1_%STA- R3C_^1_%LDA- 2,Q_^1_%STA- R3B_^1_%LDA- 1,Q_^1_%STA- R3A_^1_%SAP FLTS2_(SKIP IF OPERAND POSITIVE_^1_%LDQ- R3C_^1_%TCQ Q_^1_%STQ- R3C_^1_%LDQ- R3B_^1_%TCQ Q_^1_%STQ- R3B_^1_%TCA A_^1FLTS2 STA- R2A,I_^1_%SAZ FLTS3_(IF OPERAND.EQ.0, GO CLEAR R1X_^1*_]_^1*_$UNPACK EXPONENT INTO R2X_^1*_]_^1_%€€ALS 1_^1_%EOR- ONEBIT+15_^1_%ARS 8_^1_%INA 0_^1FLTS3 STA- R2X,I_^1*_]_^1*_$UNPACK MANTISSA INTO R2A-C_^1*_]_^1_%LDA- R2A,I_^1_%LDQ- R3B_^1_%LLS 8_^1_%AND- H7FFF_^1_%STA- R2A,I_^1_%LDA- R3C_^1_%LDQ- R3B_^1_%LLS 23_^1_%AND- H7FFF_^1_%STA- R2B,I_^1_%LLS 15_^1_%AND* RSLTC_(($7FC0)_^1_%STA- R2C,I_^1_%GET DBLFLG_(GET SINGLE/DOUBLE PRECISION MODE FLAG_^1_%SAN FLTS4_(SKIP IF IN DOU€€BLE PRECISION MODE_^1_%STA- R2C,I_(SET R2C = ZERO_^1_%LDA- R2B,I_^1_%AND- HFF80_(TRUNCATE R2B_^1_%STA- R2B,I_^1FLTS4 LDA- R3A_^1_%JMP* (FLTSET)_$RETURN TO CALLER_^1_%EJT_]_^1*_$DIVIDE CHECK WHEN DIVIDE BY ZERO_^1DIVZER ENQ 1_^1_%JMP* SETERR_^1OVFUNF TRQ A_:OVERFLOW OR UNDERFLOW_^1*_*OVERFLOW_^1_%ENQ 0_^1_%SAP SETERR-*-1_^1*_*UNDERFLOW_^1_%ENQ 2_^1*_]_^1*_$SET ERROR BIT IN STA€€TUS WORD_^1*_*BIT 14 = OVERFLOW_^1*_*BIT 13 = DIVIDE FAULT_^1*_*BIT 12 = OVERFLOW_^1*_]_^1SETERR LDA- STATUS_^1_%TCQ Q_^1_%AND- ERASE,Q_^1_%ADD- SETBIT,Q_^1_%STA- STATUS_^1_%TCQ Q_^1_%GET DBLFLG_'GET SINGLE/DOUBLE PRECISION MODE FLAG_^1_%SAN SETER1_'SKIP IF IN DOUBLE PRECISION MODE_^1_%INQ 3_,SET Q FOR SINGLE PRECISION RESULTS_^1SETER1 LDA* RSLTA,Q_^1_%STA- R1A,I_^1_%LDA* RSLT€€B,Q_^1_%STA- R1B,I_^1_%LDA* RSLTC,Q_^1_%STA- R1C,I_^1_%LDA* RSLTX,Q_^1_%STA- R1X,I_^1_%INQ -2_^1_%SQZ SETER2_'SKIP IF DOUBLE PRECISION UNDERFLOW_^1_%INQ -3_^1_%SQN NXTOP3_'SKIP IF NOT SINGLE PRECISION UNDERFLOW_^1SETER2 STQ- SIGN_)CLEAR SIGN_^1NXTOP3 JMP NXTOPC_^1_%EJT_]_^1RSLTX NUM $007F,$007F,$FF80,$007F,$007F,$FF80_^1RSLTA NUM $7FFF,$7FFF,$0000,$7FFF,$7FFF,$0000_^1RSLTB€€ NUM $7FFF,$7FFF,$0000,$7F80,$7F80,$0000_^1RSLTC NUM $7FC0,$7FC0,$0000,$0000,$0000,$0000_^1H807F NUM $807F_^1_%EJT_]_^1*_*FLOATING POINT SUBTRACT G-F_^1DFSUB RTJ UNPACK_^1_%RTJ OPERND_^1_%LDA- 3,Q_^1_%TCA A_^1_%STA- R3C_*COMPLEMENT F+2_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1_%TCA A_,CHANGE THE SIGN BDFORE_^1_%TCQ Q_,ENTERING YHE ADD ROUNTINE_^1_%JMP* ADD1_^1_%EJT_]_^1*_]_^1*_*FLOA€€TING POINT ADD G+F, RESULT IN G._^1DFADD RTJ UNPACK_^1_%RTJ OPERND_^1_%LDA- 3,Q_^1_%STA- R3C_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1ADD1_!STQ- R3B_^1_%STA- R3A_^1_%SAP ADD2_^1_%TCA A_^1ADD2_!ALS 1_^1_%SAN ADD3_^1_%JMP* NXTOP3_'ADDING ZERO, FORGET IT_^1ADD3_!EOR- ONEBIT+15_^1_%ARS 8_^1_%INA 0_^1_%STA- R2X,I_^1_%GET DBLFLG_'GET SINGLE/DOUBLE PRECISION MODE FLAG_^1_%SAN ADD3A_(SKIP IF€€ IN DOUBLE PRECISION MODE_^1_%LDA- R3A_^1_%ARS 15_^1_%STA- R3C_*SET R3C.EQ.SIGN OF OPERAND_^1ADD3A LDA- R3A_^1_%LDQ- R3B_^1_%AND* H807F_(STRIP OFF EXPONENT_^1_%SAP ADD4_^1_%ADD =N$7F80_%EXTEND SIGN_^1ADD4_!LLS 8_^1_%STA- R2A,I_^1_%TRQ A_^1_%AND- H00FF_^1_%STA- TEMP,I_^1_%LDA- R3C_^1_%LDQ- R3B_^1_%LLS 8_^1_%AND- HFF00_^1_%EOR- TEMP,I_^1_%STQ- R2B,I_^1_%STA- R2C,I_^1_%LDA- D,I€€_^1_%LDQ- CI,I_^1_%ALS 1_^1_%LLS 1_^1_%STQ- CI,I_)REMOVE BIT 15 FROM BOTH CI AND D_^1_%STA- D,I_^1_%LDQ- SIGN_^1_%SQP FADD21-*-1_"IF SIGN IS NEGATIVE_^1_%TCA A_,COMPLEMENT C, CI, AND D_^1_%STA- D,I_^1_%LDA- CI,I_^1_%TCA A_^1_%STA- CI,I_^1_%LDA- C,I_^1_%TCA A_^1_%STA- C,I_^1FADD21 LDA- C,I_^1_%SAN FA22-*-1_$IF ACCUM IS ZERO, USE SECOND VALUE AS ANSWER_^1_%LDA- BETA,I_^1_%STA-€€ DELTA,I_^1_%LDA- B,I_^1_%STA- TEMPQ,I_^1_%LDA- AI,I_^1_%STA- CI,I_^1_%LDQ- A,I_^1_%JMP STOCD_^1FA22_!LDA- DELTA,I_%FIRST WORD IS NOT ZERO_^1_%SUB- BETA,I_^1_%STA- TEMPQ,I_%TEMPQ=DELTA-BETA_^1*_]_^1*_*IF F .GE. G_!GO TO ADD STEP3 (ADDS3)_^1*_]_^1_%SAM 1_^1_%JMP* ADDS3_^1*_*IF F .LT. G_!EXCHANGE EXPONENTS_^1_%LDA- DELTA,I_^1_%LDQ- BETA,I_^1_%STA- BETA,I_'BETA=DELTA_^1_%STQ- DELTA,€€I_%DELTA=BETA_^1*_]_^1_%LDA- A,I_^1_%LDQ- C,I_^1_%STA- C,I_*C=A_^1_%STQ- A,I_*A=C_^1_%LDA- A+1,I_^1_%LDQ- C+1,I_^1_%STA- C+1,I_(C+1=A+1_^1_%STQ- A+1,I_(A+1=C+1_^1_%LDA- A+2,I_^1_%LDQ- C+2,I_^1_%STA- C+2,I_(C+2=A+2_^1_%STQ- A+2,I_(A+2=C+2_^1*_8C, CI, D ARE NOW THE LARGER NUMBER_^1*_8A, AI, B ARE NOW THE SMALLER NUMBER_^1_%LDA- DELTA,I_^1_%SUB- BETA,I_^1_%STA- TEMPQ,I_%TEMPQ=DELTA-BE€€TA_^1_%EJT_]_^1ADDS3 TRA Q_^1_%GET DBLFLG_^1_%SAZ ADDS3A_'SKIP IF SINGLE PRECISION MODE_^1_%INQ -45_^1_%SQM AS30_)SKIP IF SHIFT.LT.45_^1_%JMP* ADDS3B_^1ADDS3A INQ -29_^1_%SQM AS30_)SKIP IF SHIFT.LT.29_^1*_]_^1*_$LEAVE LARGER NUMBER IN ACCUMULATOR_^1*_]_^1ADDS3B LDA- D,I_^1_%STA- TEMPQ,I_^1_%LDA- CI,I_^1_%LDQ- C,I_^1_%JMP STOCD_^1LRSINS LRS 0_^1H7FF0 NUM $7FF0_^1*_*STEP3€€_^1AS30_!LDQ- CI,I_^1_%LDA- D,I_^1_%LRS 4_^1_%AND* H7FF0_($7FF0_^1_%LDQ- C,I_^1_%SQP L1-*-1_^1_%EOR- LPMSK+4_%$000F_^1L1_#STA- D,I_*D=0,11LSB,4 SIGN BITS_^1_%LDA- CI,I_^1_%LDQ- C,I_^1_%LRS 2_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- CI,I_)CI=0,15ISB_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- C,I_*C=0SS,13MSB_^1AS31_!LDQ- AI,I_^1_%LDA- B,I_^1_%LRS 2_^1_%STA- B,I_*B=10LSB,6S€€IGN BITS_^1_%LDQ- A,I_^1_%LDA- AI,I_^1_%LRS 2_^1_%STQ- A,I_*A=SSS,13MSB_^1_%STA- AI,I_)AI=16ISB_^1_%EJT_]_^1*_*STEP 4._^1*_*SHIFT SMALLER NUMBER RIGHT (ABS.(BETA-DELTA)),_^1*_*AND SET THE SIGN OF MSB TO POSITIVE_^1*_*SHIFT ISB RIGHT 1, AND SET THE SIGN OF ISB POSITIVE_^1*_*SHIFT LSB RIGHT 1, AND SET THE SIGN OF LSB POSITIVE._^1*_*CLEAR THE CARRY TO BIT 15 AND ADD 1 TO MSB_^1*_*POS€€ITION THE SMALLER NUMBER_^1*_]_^1_%LDA- TEMPQ,I_^1_%SUB- LPMSK+4_%DELTA-BETA-15_^1_%TRA Q_^1_%ADQ* LRSINS_^1***_"IIN 0_,***UTILIZE FOREGROUND***_^1_%STQ* LRS2_^1_%SAM 1_,IF ((DELTA-BETA) .GE. 15) GO TO GE15_^1_%JMP* GE15_^1_%LDA- TEMPQ,I_^1_%ADD* LRSINS_^1_%STA* LRS1_^1_%ADD- ONEBIT_'DELTA-BETA+1_^1_%STA* LRS_^1_%LDA- B,I_*DELTA-BETA .LT. 15_^1_%LDQ- AI,I_^1LRS_"LRS 0_^1_%ARS €€1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- B,I_^1_%LDQ- A,I_^1_%LDA- AI,I_^1LRS1_!LRS 0_^1***_"EIN 0_,***UTILIZE FOREGROUND***_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- AI,I_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- A,I_^1_%JMP* STEP5_^1GE15_!LDA- AI,I_)DELTA-BETA .GE. 15_^1_%LDQ- A,I_^1LRS2_!LRS 0_^1***_"EIN 0_,***UTILIZE FOREGROUND***_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%ST€€A- B,I_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- AI,I_^1_%LDA- A,I_^1_%ARS 13_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- A,I_^1_%EJT_]_^1*_]_^1*_*STEP 5_^1*_]_^1STEP5 LDA- R2C,I_^1_%LDQ- R2A,I_^1_%QLS 1_,SIGN OF R2 TO Q15_^1_%ARS 1_,REMOVE LSB OF R2_^1_%LLS 1_,TRANSFER SIGN OF R2 TO LSB OF R2_^1_%STA- R2C,I_^1_%CLR Q_^1_%LDA- D,I_^1_%ADD- B,I_^1_%STA- D,I_^1_%SAP AS6-*-1_^1_%AND- €€LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- D,I_*D=B+D_^1*_*STEP6_^1_%ENQ 1_^1AS6_"ADQ- CI,I_^1_%STQ- CI,I_^1_%CLR A_^1_%SQP AS60-*-1_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- CI,I_^1_%ENA 1_^1AS60_!STA- TEMPQ,I_%TEMPQ = COUNT FOR CARRYS INTO MSB_^1_%LDA- CI,I_^1_%ADD- AI,I_^1_%STA- CI,I_^1_%SAP AS601-*-1_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY B€€IT_^1_%STA- CI,I_^1_%RAO- TEMPQ,I_%TEMPQ=TEMPQ+1_^1*_*STEP7_^1AS601 LDQ- TEMPQ,I_^1_%ADQ- A,I_^1_%ADQ- C,I_^1_%SQP AS61-*-1_^1*_*SUBTRACT END AROUND CARRY-INCREASE LSB BY 1_^1_%ADQ- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%LDA- D,I_^1_%INA 1_^1_%STA- D,I_^1_%SAP AS61-*-1_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- D,I_^1_%LDA- CI,I_^1_%INA 1_^1_%STA- CI,I_^1_%SAP €€ AS61-*-1_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- CI,I_^1_%INQ 1_,INCREASE MSB BY 1 -_^1AS61_!STQ- C,I_*C = 0VS,13MSB_^1_%LDA- D,I_*SQUEEZE OUT LEADING ZERO BITS_^1_%LDQ- CI,I_^1_%ALS 1_^1_%LLS 1_^1_%STA- D,I_*D = 10LSB,6 SIGN BITS_^1_%STQ- CI,I_)CI = 16ISB_^1_%LDA- C,I_^1_%ALS 1_O**FTN 3.1**_^1_%SAP T11-*-1_^1_%LDA- D,I_^1_%EOR- LPMSK+2_%$0003_^1_%STA- D,I_*RE€€PLACE SIGN BITS_^1*_]_^1*_*IF RESULT IS MINUS ZERO, GO TO ARGO_^1*_*MINUS ZERO IS Q=7FFF, A=FFFE_^1*_]_^1T11_"LDQ- C,I_^1_%LDA- CI,I_^1_%ADQ- ONEBIT+15_#$8000_^1_%SQN AS62-*-1_^1_%INA 0_^1_%SAN AS62-*-1_^1_%LDA- D,I_^1_%INA 0_^1_%SAN AS62-*-1_^1_%JMP ARGZRO_'AGRUMENT IS ZERO_^1_%EJT_]_^1*_]_^1*_*STEP 7_^1*_*SAVE SIGN S AND OVERFLOW V IN BITS 1 AND 0_^1*_*IF S .EQ. V , THEN V €€IS SIGN EXTENSION_^1*_*IF S .NE. V , THEN RESULT OVERFLOWED INTO V_^1*_]_^1AS62_!QLS 1_^1_%LRS 15_^1_%EAQ Q_,CHECK IF SIGN AND OVERFLOW EQUAL(SAME=0,DIF=1)_^1_%LDA- CI,I_^1_%SQM SHFT1-*-1_^1SHFT2 LDQ- C,I_*S=V, SIGN EXTENSION_^1_%STQ- TEMPQ,I_%TEMPORARY STORAGE FOR C_^1_%LLS 2_^1_%STQ- C,I_^1_%LDQ- CI,I_^1_%LDA- D,I_^1_%LLS 2_^1_%STQ- CI,I_^1_%LDQ- TEMPQ,I_^1_%LDA- D,I_^1_%L€€LS 2_^1_%JMP* RESUME_^1SHFT1 RAO- DELTA,I_%S=V, OVERFLOW INTO V_"DELTA=DELTA+1_^1_%LDQ- C,I_^1_%STQ- TEMPQ,I_%TEMPORARY STORAGE FOR C_^1_%LLS 1_^1_%STQ- C,I_^1_%LDQ- CI,I_^1_%LDA- D,I_^1_%LLS 1_^1_%STQ- CI,I_^1_%LDQ- TEMPQ,I_^1_%LDA- D,I_^1_%LLS 1_^1RESUME STA- TEMPQ,I_%THIRD WORD_^1_%LDA- CI,I_^1_%LDQ- C,I_^1*_$SAVE THE SIGN AND MAGNITUDE OF THE RESULTS_^1STOCD STQ- C,I_*C=A€€ AND B IN A REG_^1_%SQP POS-*-1_^1_%TCA A_,COMPLEMENT AI OR CI_^1_%TCQ Q_,COMPLEMENT A OR C_^1_%STQ- C,I_^1_%STA- CI,I_)KEEP IN A REG._^1_%LDA- TEMPQ,I_%THIRD WORD_^1_%TCA A_^1_%AND- LPMSK+18_$$FFFC_^1_%STA- TEMPQ,I_%THIRD WORD_^1_%LDA- CI,I_)RELOAD A REG._^1_%ENQ -1_^1_%JMP* STOSGN_^1*_*POSITIVE, SET SIGN=+1_^1POS_"ENQ 1_^1STOSGN STQ- SIGN_^1_%ENQ 0_^1_%STQ- BETA,I_^1_%LDQ-€€ C,I_*RESTORE Q_^1_%SQN NORMAL-*-1_^1_%SAN NORMAL-*-1_^1_%LDA- TEMPQ,I_%THIRD WORD_^1_%SAN NORMAL-*-1_^1_%JMP ARGZRO_'AGRUMENT IS ZERO_^1NORMAL STQ- G_^1_%LDA- CI,I_^1_%STA- G+1_^1_%LDA- TEMPQ,I_%THIRD WORD_^1_%STA- D,I_*THIRD WORD_^1_%STA- G+2_^1_%JMP NRMLIZ_^1_%EJT_]_^1*_]_^1*_$CONVERT ACCUMULATOR TO FIXED POINT AND STORE_^1*_]_^1FLOF_!RTJ PACK_)REPACK ACCUMULATOR IF UNPACK€€ED_^1_%LDA- G_^1_%LDQ- G+1_^1_%SAP FX1_^1_%TCA A_,COMPLEMENT IF NEGATIVE_^1_%TCQ Q_^1FX1_"STQ- D,I_^1_%ENQ 0_^1_%LLS 2_,SIGN OF EXPONENT TO Q_^1_%SQN FX2_*SKIP IF ACCUMULATOR.GT.ZERO_^1_%ENA 0_^1_%JMP* FX4_^1FX2_"ENQ 0_^1_%LLS 3_^1_%SQZ FX3_^1_%LDA- H7FFF_(ACCUM.GT.2**16-1, MAXVALUE TO A_^1_%JMP* FX3A_^1FX3_"LDQ* LLS_*CONSTRUCT A SHIFT_^1_%LLS 4_^1_%STQ* SHIFT_^1_%ENQ 0€€_,LOW ORDER BITS COME FROM WORD 2_^1_%LLS 7_^1_%LDA- D,I_^1_%LRS 7_^1SHIFT LLS 0_,COUNT FROM EXPONENT LOW 4 BITS_^1_%TRQ A_,ANSWER TO A_^1FX3A_!LDQ- G_^1_%SQP FX4_^1_%TCA A_,COMPLEMENT IF NEGATIVE_^1FX4_"INA 0_^1_%STA- D,I_^1_%SETB IDXINH_^1_%RTJ OPERND_'GET ADDRESS TO STORE INTO_^1_%ADQ- INDEX_^1*_$RTJ* PROCHK_'CHECK FOR PROTECT VIOLATION_^1_%LDA- D,I_^1_%STA- 1,Q_*STORE €€RESULT_^1_%JMP NXTOPC_'GO TO NEXT INSTRUCTION_^1_%SPC 3_^1LLS_"NUM $00FE_^1_%EJT_]_^1*_]_^1*_$CONVERT INTEGER OPERAND TO FLOATING POINT_^1*_$AND SET IN PSEUDO ACCUMULATOR_^1*_]_^1FIXF_!SETB IDXINH_^1_%RTJ OPERND_^1_%ADQ- INDEX_^1_%LDA- 1,Q_*OPERAND TO A_^1_%STA- SIGN_)SAVE FOR LATER SIGN CHECK_^1_%SAP FL1_^1_%TCA A_,COMPLEMENT OPERAND IF NEGATIVE_^1FL1_"SAN FL2_*SKIP IF OPER€€AND NOT ZERO_^1_%CLR Q_^1_%JMP* FLX_*EXIT WITH ZERO VALUE_^1FL2_"LDQ =N$008F_%EXPONENT FOR 15 BIT INPUT_^1FL3_"ALS 1_^1_%SAM FL4_*SKIP IF BIT 15 SET_^1_%INQ -1_+DECREASE EXPONENT BY 1_^1_%JMP* FL3_*TRY AGAIN_^1FL4_"LLS 7_,MOST SIGNIFICANT 7 BITS TO Q_^1_%STQ- G_^1_%LDQ- SIGN_^1_%SQM FL5_*SKIP IF ORIGINAL OPERAND NEGATIVE_^1_%LDQ- G_^1_%JMP* FLX_^1FL5_"TCA A_,COMPLEMENT IF O€€RIGINAL OPERAND NEGATIVE_^1_%LDQ- G_^1_%TCQ Q_^1FLX_"STQ- G_^1_%STA- R3B_^1_%QRS 15_^1_%STQ- R3C_*SET R3C = SIGN OF OPERAND_^1_%JMP FLDDX_(CLEAR ACCUMULATOR UNPACKED FLAG + EXIT_^1_%EJT_]_^1AVOLA 0_"0_,SIMULATED VOLATILE STORAGE ALLOCATION ROUTINE_^1_%RTJ* HERE_^1HERE_!NUM 0_^1_%ENA BUF-HERE_^1_%ADD* HERE_^1_%STA* BUFADD_^1_%STQ* (BUFADD)_$SAVE Q REGISTER IN SIMULATED VOLATIL€€E STORAGE_^1_%LDQ* BUFADD_'BEGINNING LOCATION OF SIM. VOLATILE STORAGE_^1_%STA- 1,Q_*SAVE A REGISTER IN SIMULATED VOLATILE STORAGE_^1_%LDA- I_^1_%STA- 2,Q_*SAVE I REGISTER IN SIMULATED VOLATILE STORAGE_^1_%STQ- I_,PLACE VOLATILE STORAGE ADDRESS IN I REGISTER_^1_%JMP* (AVOLA)_%RETURN TO CALLING PROGRAM_^1AVOLR 0_"0_,SIMULATED VOLATILE STORAGE ALLOCATION ROUTINE_^1_%LDQ- I_,BEGINNIN€ G LOCATION OF SIM. VOLATILE STORAGE_^1_%LDA- 2,Q_^1_%STA- I_,RESTORE THE I REGISTER_^1_%LDA- 1,Q_*RESTORE THE A REGISTER_^1_%LDQ- (ZERO),Q_$RESTORE THE Q REGISTER_^1_%JMP* (AVOLR)_%RETURN TO CALLING PROGRAM_^1BUFADD ADC BUF_^1BUF_"BZS BUF(18)_^1_%EJT_]_^1_%END_]_^__  END/