PABZLD7 CSY/ A01 P€1_%NAM ABZLD7_'DECK-ID A01 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A02 P€1_%NAM ABZLD9_'DECK-ID A02 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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_]_^__’PABZLDC CSY/ A03 P€1_%NAM ABZLDC_'DECK-ID A03 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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_^__ NPAL1706 CSY/ A04 P€1_%NAM AL1706_'DECK-ID A04 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1706 BUFFERED DATA CHANNEL USAGE ALLOCATOR_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1************************************************************************_^1* EACH DRIVER RESPONSIBLE FOR A DEVICE ON THE 1706 MUST REQU€€EST CONTROL_^1*_"OF THE 1706 AND FOLLOWING COMPLETION OF ONE TRANSFER, RELEASE_^1*_"CONTROL._^1*_]_^1* A SAMPLE OPERATION IS AS FOLLOWS...._^1*_"DRIVER REQUESTS 1706 ACCESS...RTJ+ RQ1706_^1*_"DRIVER COMPLETES OPERATION...RTJ+ RL1706_^1*_"RETURN IS MADE TO THE DRIVER FOR CONTINUATION_^1*_]_^1* IF ACCESS IS REQUESTED AND THE 1706 IS BUSY, THE RETURN ADDRESS,_^1*_"PRIORITY LEVEL, €€AND I-REGISTER IS SAVED IN A CIRCULAR STACK UNTIL_^1*_"IT IS AVAILABLE WHEN THE REQUESTOR IS SCHEDULED AT HIS ENTRY_^1*_"PRIORITY WITH THE I-REGISTER IN Q. THE STACK IS FIRST IN, FIRST OUT_^1*_]_^1* IT IS THE RESPONSIBILITY OF THE DRIVER TO VERIFY THAT THE 1706 IS_^1*_"READY FOR DATA TRANSFER AFTER ACCESS IS OBTAINED_^1*_]_^1* ON ENTRY TO RELEASE THE 1706 THE I-REGISTER IS RETURN€€ED IN Q._^1************************************************************************_^1_%SPC 2_^1* PROGRAM ENTRY POINTS_^1_%ENT RQ1706_'ACCESS ENTRY FOR 1706_^1_%ENT RL1706_'RELEASE ENTRY FOR 1706_^1_%SPC 2_^1*_$PROGRAM EXTERNALS_^1_%EXT STACKA_'REQUEST STACK FOR 1706 NO. 1_^1_%EXT STACKB_'REQUEST STACK FOR 1706 NO. 2_^1_%EXT STACKC_'REQUEST STACK FOR 1706 NO. 3_^1_%EXT STK€€SIZ_'REQUEST STACK SIZE TABLE_^1_%EXT BUSY1_(1706 BUSY FLAG TABLE_^1_%EXT TEMPI_(TEMPORARY HOLDING AREA FOR I-REG_^1_%EXT ITEMP_(TEMPORARY HOLDING AREA FOR I-REG_^1_%EXT NXTIN_(TABLE OF POINTERS TO NEXT IN STACK_^1_%EXT NXTOUT_'TABLE OF POINTERS TO NEXT OUT STACK_^1_%EXT ONPDT_(PDT ADDRESS OF CURRENT 1706 USER_^1_%SPC 2_^1* PROGRAM EQUIVALENCES_^1_%EQU ZERO($22)_#ZERO ADDR€€ESS_^1_%EQU PRIOR($EF)_"SYSTEM PRIORITY LEVEL_^1_%EQU ADISP($EA)_"DISPATCHER_^1_%EQU AMONI($F4)_"MONITOR REQUEST ENTRY_^1_%EQU CALL(7)_%WES FIELD_^1_%SPC 2_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION IS THE 1706 REQUEST ENTRY. IF THE 1706 IS NOT_#*_^1*_$ACTIVE, RETURN IS MADE IMMEDIATELY TO THE DRIVER. IF THE 1706 *€€_^1*_$IS BUSY, THE DRIVERS I-REGISTER, PRIORITY, RETURN ARE SAVED IN *_^1*_$THE WAITING STACK. IF THE QUANTITY OF ENTRIES EXCEEDS THE_$*_^1*_$STACK SIZE, THERE IS NO ALTERNATIVE BUT TO STOP THE SYSTEM._#*_^1************************************************************************_^1_%SPC 2_^1RQ1706 NUM 0_,ACCESS ENTRY_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%RTJ* NO06_)DETERMINE 1706 €€NUMBER_^1_%LDA* (XBUSY),Q_#CHECK BUSY STATUS_^1_%SAN THREAD_'SKIP IF BUSY_^1_%RAO* (XBUSY),Q_#SET BUSY FLAG_^1_%LDA- I_,PUT I-REG. INTO A-REG. FOR RETURN_^1_%STA* (XONPDT),Q_"SAVE PDT ADDRESS OF USER_^1_%TRA Q_^1ALRDY EIN 0_,ENABLE INTERRUPTS_^1_%JMP* (RQ1706)_$RETURN TO CALLER_^1THREAD LDA- I_,CREATE TEMPORARY HOLDING AREA FOR STACK DATA_^1_%STA* TEMPII_'SAVE DRIVER I-REG._^1_€€%STQ- I_,WORD 1 = I-REG._^1_%LDQ* (XONPDT),I_"SEE IF DRIVER ALREADY HAS 1706_^1_%EAQ Q_^1_%SQN NOTON_(SKIP IF NOT CURRENT USER_^1_%TRA Q_^1_%JMP* ALRDY_(ALREADY CURRENT USER - IGNORE REQUEST_^1NOTON LDQ* STKADD,I_$PICK UP POINTER TO STACK ADDRESS_^1_%LDA* (XNXTIN),I_"PICK UP POINTER FOR NEXT IN_^1_%AAQ Q_^1_%LDA- (ZERO),Q_$PICK UP FIRST VACANT LOCATION_^1_%SAZ GOOD_^1_%NUM $€€18FF_(NO ROOM ON STACK FOR NEW ENTRY -- ERROR STOP_^1GOOD_!LDA* RQ1706_'ASSEMBLE STACK ENTRY--RETURN ADDRESS_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA* TEMPII_'DRIVER I-REGISTER_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA- PRIOR_(DRIVER PRIORITY_^1_%STA- (ZERO),Q_^1_%LDA* (XNXTIN),I_"RESET NEXT IN POINTER_^1_%LDQ* (XSTKSZ),I_"OBTAIN STACK SIZE_^1_%TCQ Q_^1_%INA 3_^1_%AAQ Q_^1_%SQN NOOVER_^€€1_%TRQ A_^1NOOVER STA* (XNXTIN),I_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER_^1TEMPII NUM 0_^1_%EJT_]_^1************************************************************************_^1*_$SUBROUTINE TO DETERMINE THE 1706 NUMBER THE DRIVER IN ON_'*_^1************************************************************************_^1_%SPC 2_^1NO06_!NUM 0_,DETERMINE 1706€€ NUMBER_^1_%LDA- CALL,I_'GET WES WORD FROM DRIVER PDT_^1_%ENQ 2_,SET UP 1706 COUNTER_^1TRY06 ALS 1_^1_%SAM GO06_)SKIP IF 1706 NUMBER MATCH_^1_%INQ -1_^1_%JMP* TRY06_^1GO06_!JMP* (NO06)_'RETURN WITH 1706 NO. IN Q-REG_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION IS ENTERED BY THE DRIVER TO RELEASE HIS 1706._$*_^1*_$IF NO €€OTHER DRIVER IS WAITING, RETURN IS MADE IMMEDIATELY TO_"*_^1*_$DRIVER. OTHERWISE, THE STACK ENTRY IS MOVED INTO THIS PROGRAM *_^1*_$AND THE RELEASING DRIVER AND REQUESTING DRIVER ARE BOTH_(*_^1*_$SCHEDULED_V*_^1************************************************************************_^1_%SPC 2_^1RL1706 NUM 0_,RELEASE ENTRY_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%RTJ* NO06_)DETERMINE €€1706 NUMBER_^1_%LDA- I_,SAVE DRIVER I-REG._^1_%STQ- I_^1_%LDQ* (XONPDT),I_"SEE IF RELEASING DRIVER HAS 1706_^1_%EAQ Q_^1_%SQZ NOT_*SAME_=**MSOS 4.1**_^1_%TRA Q_^1_%EIN 0_^1_%JMP* (RL1706)_$IGNORE REQUEST - DOES NOT HAVE 1706_^1NOT_"STA* (XITEMP),I_^1_%LDQ* (XNXTIN),I_"CHECK IF POINTERS =_^1_%LDA* (XNXTOT),I_^1_%EAQ Q_^1_%SQN DOIT_)SKIP IF PTRS NOT EQUAL_^1_%LDQ* STKADD,I_$PTR€€S = IS STACK FULL OR EMPTY_^1_%AAQ Q_^1_%LDQ- (ZERO),Q_^1_%SQN DOIT_)SKIP IF STACK FULL_^1_%ENA 0_,STACK CLEARED, ZERO BUSY FLAG_^1_%STA* (XBUSY),I_%AND RETURN_^1_%STA* (XONPDT),I_^1_%LDQ* (XITEMP),I_"RESTORE DRIVER I-REG._^1_%EIN 0_^1_%JMP* (RL1706)_$RETURN TO DRIVER_^1DOIT_!LDQ* STKADD,I_$MOVE STACK ENTRY TO TEMP_^1_%AAQ Q_^1_%LDA- (ZERO),Q_^1_%STA* SKD11_(SET LOCATION TO S€€CHEDULE_^1_%CLR A_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA- (ZERO),Q_^1_%STA* (XTEMPI),I_"SET DRIVER I-REG._^1_%CLR A_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA- (ZERO),Q_^1_%ADD* SKDMSK_^1_%STA* SKD01_(SET SCHEDULE CODE + PRIORITY_^1_%CLR A_^1_%STA- (ZERO),Q_^1_%LDA* (XNXTOT),I_"UPDATE STACK PTR_^1_%LDQ* (XSTKSZ),I_"PICK UP STACK SIZE_^1_%TCQ Q_^1_%INA 3_^1_%AAQ Q_^1_%SQN OVERNO_^1_%€€TRQ A_^1OVERNO STA* (XNXTOT),I_"UPDATE STACK POINTER_^1_%LDA* RL1706_'PICK UP RETURN ADDRESS_^1_%LDQ* SKDL,I_^1_%JMP- (ZERO),Q_$GO TO SCHEDULER ROUTINE_^1_%EJT_]_^1************************************************************************_^1*_$TABLE OF ADDRESSES AND CONSTANTS_?*_^1************************************************************************_^1_%SPC 2_^1STKADD ADC STACK€€A_'DATA STACK ADDRESSES_^1_%ADC STACKB_^1_%ADC STACKC_^1SKDL_!ADC SKDL1_(RELEASE VECTOR_^1_%ADC SKDL2_^1_%ADC SKDL3_^1SKDMSK NUM $5200_^1XITEMP ADC ITEMP_^1XTEMPI ADC TEMPI_^1XNXTOT ADC NXTOUT_^1XNXTIN ADC NXTIN_^1XSTKSZ ADC STKSIZ_^1XBUSY ADC BUSY1_^1XONPDT ADC ONPDT_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTIO€€N SCHEDULES THE REQUESTING AND RELEASING DRIVERS_#*_^1*_$AT THEIR PRIORITIES._K*_^1************************************************************************_^1_%SPC 2_^1SKDL1 STA* REL1_)SAVE DRIVER RETURN_^1_%LDA- PRIOR_(PICK UP CURRENT SYSTEM PRIORITY_^1_%ADD* SKDMSK_'SET UP TO SCHEDULE RELEASING USER_^1_%STA* REL1A_^1_%LDQ* (XITEMP)_^1*_81 CARD DELETED_^1_%RTJ- (AMONI)_%SCHEDULE€€ RELEASING USER_^1REL1A NUM 0_^1REL1_!NUM 0_^1_%LDQ* (XTEMPI)_^1_%STQ* (XONPDT)_$UPDATE FLAG TO SHOW NEW PDT IN CONTROL_^1_%RTJ- (AMONI)_%SCHEDULE NEXT USER_^1SKD01 NUM 0_^1SKD11 NUM 0_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER_^1SKDL2 STA* REL2_)SAVE DRIVER RETURN_^1_%LDA* SKD01_(MOVE SCHEDULER CALL_^1_%STA* SKD02_^1_%LDA* SKD11_^1_%STA* SKD12_^1_%LDA- PRIOR_(PICK UP CURRENT SYS€€TEM PRIORITY_^1_%ADD* SKDMSK_'SET UP TO SCHEDULE RELEASING USER_^1_%STA* REL2A_^1_%ENQ 1_^1_%LDQ* (XITEMP),Q_^1*_81 CARD DELETED_^1_%RTJ- (AMONI)_%SCHEDULE RELEASING USER_^1REL2A NUM 0_^1REL2_!NUM 0_^1_%ENQ 1_^1_%LDA* (XTEMPI),Q_^1_%STA* (XONPDT),Q_"UPDATE FLAG TO SHOW NEW PDT IN CONTROL_^1_%TRA Q_^1_%RTJ- (AMONI)_%SCHEDULE NEXT USER_^1SKD02 NUM 0_^1SKD12 NUM 0_^1_%JMP- (€€ADISP)_%EXIT TO DISPATCHER_^1SKDL3 STA* REL3_)SAVE DRIVER RETURN_^1_%LDA* SKD01_(MOVE SCHEDULER CALL_^1_%STA* SKD03_^1_%LDA* SKD11_^1_%STA* SKD13_^1_%LDA- PRIOR_(PICK UP SYSTEM PRIORITY_^1_%ADD* SKDMSK_'SET UP TO SCHEDULE RELEASING USER_^1_%STA* REL3A_^1_%ENQ 2_^1_%LDQ* (XITEMP),Q_^1*_81 CARD DELETED_^1_%RTJ- (AMONI)_%SCHEDULE RELEASING USER_^1REL3A NUM 0_^1REL3_!NUM 0_^1_%ENQ€Φ 2_^1_%LDA* (XTEMPI),Q_^1_%STA* (XONPDT),Q_"UPDATE FLAG TO SHOW NEW PDT IN CONTROL_^1_%TRA Q_^1_%RTJ- (AMONI)_%SCHEDULE NEXT USER_^1SKD03 NUM 0_^1SKD13 NUM 0_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER_^1_%END_]_^__ΦPBDK85X CSY/ A05 P€1_%NAM BDK85X_'DECK-ID A05 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSCOP BOOTSTRAP FOR 1738/853/854 AND 1733-1/853/854 DISK_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$BOOTSTRAP ENTRY POINTS_^1_%ENT COBOP_^1_%SPC 2_^1*_$BOOTSTRAP EXTERNALS_^1_%EXT COBOPS_'STARTING SECTOR FOR IMAGE(I€€N SYSDAT)_^1_%EXT MSIZV4_'LENGTH OF SYSTEM (*S DECLARATION)_^1_%SPC 2_^1*_$BOOTSTRAP EQUIVALENCES_^1_%EQU EDISK(3)_$DISK EQUIPMENT NUMBER_^1*_81 CARD DELETED_^1_%SPC 2_^1COBOP IIN 0_,STOP INTERRUPTS_^1_%JMP* OVER_^1AREG_!ADC 0_^1QREG_!ADC 0_^1START ADC COBOPS_'MM LSB SECTOR_^1LENGTH ADC MSIZV4_'LENGTH OF CORE_^1*_]_^1OVER_!STA* AREG_)SAVE REGISTERS_^1_%STQ* QREG_^1_%CLR €€ M_,CLEAR COMAPRE FLAG_^1_%LDA* CONFC_(CONNECT DISK_^1_%LDQ* GENFC_^1_%OUT -1_+LOOP ON ERROR_^1*_]_^1_%LDA* LENGTH_^1_%SAP LFFFF_(PLUS = 32K SYSTEM_^1_%LDQ* MFFFF_(SET UP FOR 65K SYSTEM_^1_%STQ* M7FFF_^1LFFFF NUM $6400_(PUT LWA INTO FWA-1_^1M7FFF NUM $7FFF_^1*_]_^1_%LDA* START_(SECTOR CALCULATIONS_^1*_81 CARD DELETED_^1_%CLR Q_^1_%DVI =N160_^1_%ALS 8_,CYLINDER_^1_%AAQ A_^€€1_%STA* TEMP_)SAVE A-REG_^1_%LDQ* GENFC2_'SEEK FUNCTION_^1_%OUT -1_^1_%RTJ* STATUS_'STATUS_^1_%INQ 2_,WRITE FUNCTION_^1_%OUT REJECT-*_^1_%RTJ* STATUS_^1_%LDA* TEMP_)SEEK PRIOR TO COMPARE_^1_%LDQ* GENFC2_^1_%OUT REJECT-*_^1_%ENA 1_,SET SEEK FLAG_^1_%TRA M_^1_%JMP* STATS1_^1COMPAR INQ 4_,DATA COMPARE_^1_%OUT REJECT-*_^1_%SET M_,SET COMPARE FLAG_^1_%JMP* STATS1_^1LOOPM CLR €€Q_,NO ERROR_^1LOOP_!ADC 0_^1_%JMP* LOOP_^1*_]_^1STATUS ADC 0_,STATUS CHECK_^1STATS1 CLR A_^1_%LDQ* GENFC_^1_%INP -1_^1_%AND* MASK1_^1_%EOR* MASK2_^1_%SAZ STATS2_^1_%ALS 9_,CHECK COMPARE STATUS_^1_%SAM REJECT_^1_%ALS 1_,CHECK ALARM STATUS_^1_%SAM REJECT_^1_%JMP* STATS1_^1*_]_^1STATS2 TRM A_,CHECK COMPARE FLAG_^1_%SAZ STATS3_^1_%SAM STATS4_^1_%LDA* LFFFF+1_%GO TO DO COMPA€BRE_^1_%JMP* COMPAR_^1STATS4 JMP* LOOPM_(EXIT FROM COMPARE_^1STATS3 LDA* LFFFF+1_%FWA-1_^1_%JMP* (STATUS)_^1*_]_^1REJECT NOP 0_,ERROR_^1_%SET Q_^1_%JMP* LOOP_^1*_]_^1GENFC ADC EDISK*$80+$1_^1GENFC2 ADC EDISK*$80+$2_^1MASK1 NUM $79_^1MASK2 NUM $19_^1CONFC NUM $100_^1TEMP_!NUM 0_^1MFFFF NUM $FFFF_^1_%END_]_^__BPBOOTC1 CSY/ A06 P€1_%NAM BOOTC1_'DECK-ID A06 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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_]_^__PBOOTC2 CSY/ A07 P€1_%NAM BOOTC2_'DECK-ID A07 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$1726-405 CARD BOOTSTRAP_^1_%SPC 2_^1BOOTC2 IIN 0_^1_%STA* START_(SAVE FWA_^1_%STA* STRADR_^1_%LDQ =N$0581_%** USE $1581 IF USING 1706 NO. 1_^1_%LDA* FUNC1_^1_%OUT -1_+CLEAR CONT€€ROLLER, DISABLE ASCII_^1LOOP1 INQ -1_^1_%NOP 0_^1_%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_%INQ 1_^1_%NOP 0_^1_%INP -1_^1_%ALS 11_+IS THIS AN EOP_^1_%SAP NOEOP_(NO, CONTINUE_^1_%LDA* EOF_*YES_^1_%EAM A_,WAS€μ THE CARD AN EOF_^1_%CLR M_^1_%SAN NOEOP_(NO_^1_%JMP* (START)_%YES, GO TO FWA OF THE PROGRAM_^1NOEOP JMP* LOOP1_(CONTINUE READING_^1FUNC1 NUM $0401_^1EOF_"NUM $0F00_^1MASK_!NUM $00FF_^1START NUM 0_^1STRADR NUM 0_^1_%END_]_^__ μPBOOTM1 CSY/ A08 P€1_%NAM BOOTM1_'DECK-ID A08 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A09 P€1_%NAM BOOTM2_'DECK-ID A09 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A10 P€1_%NAM BOOTP_(DECK-ID A10 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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_]_^__ dPB1751 CSY/ A11 P€1_%NAM B1751_(DECK-ID A11 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSCOP BOOTSTRAP FOR 1751 DRUM_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$BOOTSTRAP ENTRY POINTS_^1_%ENT COBOP_^1_%SPC 2_^1*_$BOOTSTRAP EXTERNALS_^1_%EXT COBOPS_'STARTING SECTOR FOR IMAGE(IN SYSDAT)_^1_%EXT MSIZV4_'L€€ENGTH OF SYSTEM (*S DECLARATION)_^1_%SPC 2_^1*_$BOOTSTRAP EQUIVALENCES_^1_%EQU EDRUM(2)_$DRUM EQUIPMENT NUMBER_^1*_81 CARD DELETED_^1_%SPC 2_^1COBOP IIN 0_,STOP INTERRUPTS_^1_%JMP* OVER_^1AREG_!NUM 0_^1QREG_!NUM 0_^1START ADC COBOPS_'MM LSB SECTOR_^1LENGTH ADC MSIZV4_'LENGTH OF CORE_^1*_]_^1ELOOP SET Q_,ERROR LOOP_^1LOOPR SLS 0_^1_%JMP* LOOPR_^1*_]_^1OVER_!STA* AREG_^€€1_%STQ* QREG_)SAVE REGS_^1_%LDA* START_(START ADDRESS_^1*_81 CARD DELETED_^1_%MUI =N96_^1_%LLS 5_,TRACK IN Q_^1_%ALS 11_+SECTOR RT JUSTIFIED IN A_^1_%STA* SECTOR_^1_%TRQ A_^1_%LDQ* TRADD_(TRACK ADDRESS_^1_%OUT -1_^1_%LDA* SECTOR_^1_%LDQ* SECADD_'SECTOR ADDRESS_^1_%OUT -1_^1_%ENA 0_^1_%LDQ* SCADD_(START CORE_^1_%OUT -1_^1_%LDA* LENGTH_^1_%LDQ* ECADD_(END CORE_^1_%OUT -1_^1_€€%LDQ* WRITEF_'WRITE FUNCTION_^1_%OUT -1_^1_%RTJ* STATUS_^1_%CLR Q_^1_%JMP* LOOPR_(GOOD GOING_^1*_]_^1STATUS ADC 0_,STATUS SUBROUTINE_^1STAT1 CLR A_^1_%LDQ* EWES_^1_%INP -1_^1_%TRA Q_^1_%AND* MASK1_^1_%SAZ GOON_)NO ERROR_^1_%JMP* ELOOP_^1GOON_!LRS 3_,CHECK FOR INTERRUPT_^1_%SAM EXIT_^1_%JMP* STAT1_(TRY AGAIN_^1*_]_^1EXIT_!JMP* (STATUS)_^1*_]_^1*_]_^1SECTOR NUM 0_^1TRADD €ΈADC EDRUM*$80+$8_^1SECADD ADC EDRUM*$80+$A_^1SCADD ADC EDRUM*$80+$C_^1ECADD ADC EDRUM*$80+$E_^1WRITEF ADC EDRUM*$80+$0_^1EWES_!ADC EDRUM*$80+$1_^1MASK1 NUM $D40_^1_%END_]_^__ΈPB1752 CSY/ A12 P€1_%NAM B1752_(DECK-ID A12 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSTEM CHECKOUT BOOTSTRAP PROGRAM FOR 1752 DRUM_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$BOOTSTRAP ENTRY POINTS_^1_%ENT COBOP_^1_%SPC 2_^1*_$BOOTSTRAP EXTERNALS_^1_%EXT COBOPS_'STARTING SECTOR FOR IMAGE(IN SYSDAT)_^€€1_%EXT MSIZV4_'LENGTH OF SYSTEM (*S DECLARATION)_^1_%SPC 2_^1*_$BOOTSTRAP EQUIVALENCES_^1_%EQU EDRUM(2)_$DRUM EQUIPMENT NUMBER_^1*_81 CARD DELETED_^1_%SPC 2_^1COBOP IIN 0_,STOP INTERRUPTS_^1_%JMP* OVER_^1AREG_!NUM 0_^1QREG_!NUM 0_^1START ADC COBOPS_^1LENGTH ADC MSIZV4_'LENGTH OF CORE_^1*_]_^1ELOOP SET Q_,ERROR LOOP_^1LOOPR SLS 0_^1_%JMP* LOOPR_^1*_]_^1OVER_!STA* AREG€€_^1_%STQ* QREG_)SAVE REGS_^1_%LDA* START_(COMPUTE START SECTOR_^1*_81 CARD DELETED_^1_%CLR Q_^1_%LLS 11_^1_%ALS 5_^1_%SAN 1_^1_%ENA 32_^1_%INA -1_^1_%ALS 11_^1_%LRS 11_^1_%LDQ* SECTAD_'SECTOR ADDRESS_^1_%OUT -1_^1_%LDQ* STCORE_'START CORE_^1_%ENA 0_^1_%OUT -1_^1_%LDQ* ECORE_(END CORE_^1_%LDA* LENGTH_^1_%OUT -1_^1_%LDQ* ENABLF_^1_%ENA 2_^1_%OUT -1_+CLEAR AND ENABLE INT€€ERRUPTS_^1_%LDQ* WRITEF_'WRITE FUNCTION_^1_%OUT -1_^1_%RTJ* STATUS_'TEST STATUS_^1_%CLR Q_^1_%JMP* LOOPR_(GOOD GOING_^1STATUS 0_"0_^1STAT1 CLR A_^1_%LDQ* EWES_^1_%INP -1_+READ STATUS_^1_%TRA Q_^1_%AND* MASK1_(ANY ERRORS_^1_%SAZ GOON-*-1_%SKIP IF NO_^1_%JMP* ELOOP_^1GOON_!LRS 5_,LOOK FOR END OF OPERATION_^1_%SAM EXIT-*-1_%SKIP IF EOP TRUE_^1_%JMP* STAT1_^1EXIT_!JMP* (STATUS€Β)_^1SECTAD ADC EDRUM*$80+$8_^1STCORE ADC EDRUM*$80+$C_^1ECORE ADC EDRUM*$80+$E_^1WRITEF ADC EDRUM*$80+$0_^1ENABLF ADC EDRUM*$80+$1_^1EWES_!ADC EDRUM*$80+$1_^1MASK1 NUM $420_^1_%END_]_^__ ΒPB17391 CSY/ A13 P€1_%NAM B17391_'DECK-ID A13 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSCOP BOOTSTRAP FOR 1739-1 CARTRIDGE DISK_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$BOOTSTRAP ENTRY POINTS_^1_%ENT COBOP_^1_%SPC 2_^1*_$BOOTSTRAP EXTERNALS_^1_%EXT COBOPS_'STARTING SECTOR FOR IMAGE(IN SYSDAT)_^1_%E€€XT MSIZV4_'LENGTH OF SYSTEM (*S DECLARATION)_^1_%SPC 2_^1*_$BOOTSTRAP EQUIVALENCES_^1_%EQU EDISK(3)_$DISK EQUIPMENT NUMBER_^1*_81 CARD DELETED_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_$THE M-REGISTER IS USED AS A PATH CONTROL FLAG SO THAT NO_'*_^1*_$MEMORY CELL WILL BE MODIFIED BETWEEN THE WRITE AND COMPARE_$*_^1*_$FUNCTI€€ONS._U*_^1*_$THE M-REGISTER WILL TAKE ON THE FOLLOWING VALUES..._,*_^1*_$M = 0 -- PRIOR TO WRITE OPERATION_>*_^1*_$M = + -- BETWEEN WRITE AND COMPARE OPERATIONS_2*_^1*_$M = - -- AFTER COMPARE OPERATION_?*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1COBOP IIN 0_,INHIBIT INTERRUPTS_^1_%JMP* OVER_)GO TO CONTINUE_^1*_]_^1AREG_!NUM €€ 0_,SAVED REGISTERS_^1QREG_!NUM 0_,NOTE - CO1ST EXPECTS AREG 2 WORDS AFTER COBOP_^1*_]_^1START ADC COBOPS_'IMAGE START SECTOR_^1LENGTH ADC MSIZV4_'IMAGE SIZE_^1*_]_^1OVER_!STA* AREG_)SAVE FAILED REGISTERS_^1_%STQ* QREG_^1*_]_^1_%CLR M_,SET M-REGISTER FLAG FOR WRITE/COMPARE_^1_%LDA* START_(CHECK IF NON-STANDARD FAILED IMAGE LOCATION_^1*_81 CARD DELETED_^1*_]_^1_%CLR Q_,COMPLET€€E FILE ADDRESS_^1_%DVI =N11773_%DETERMINE WHICH DISK_^1_%ALS 6_,SAVE DISK SELECT_^1_%STA* LODADR_^1_%TRQ A_,PUT NO. SECTORS ON SELECTED DISK IN A_^1_%CLR Q_^1_%DVI =N29_)COMPUTE TRACK (A) AND SECTOR IN TRACK (Q)_^1_%QLS 9_,MAKE UP LOAD ADDRESS WORD_^1_%LLS 15_^1_%ALS 8_^1_%QLS 8_^1_%AAQ A_^1_%ADD* LODADR_'PICK UP DISK SELECT_^1_%STA* LODADR_'SAVE LOAD ADDRESS WORD_^1*_]_^€€1*_]_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$PROCEDURE TO WRITE FAILED IMAGE IS..._:*_^1*_'1) CLEAR CONTROLLER - RETURN TO ZERO SEEK_4*_^1*_'2) LOAD ADDRESS REGISTER_E*_^1*_'3) LOAD BUFFER REGISTER_F*_^1*_'4) WRITE DATA_P*_^1*_'5) REPEAT 1, 2, AND 3_H*_^1*_'6) COMPARE DATA_N*_^1*_]_'*_^1*************************************€€***********************************_^1_%SPC 2_^1IO_#LDQ* EQUIP_(GET BASIC EQUIPMENT CODE_^1_%INP -1_+LOOP BACK ON ERROR - CLEAR CONTROLLER_^1_%RTJ* STATUS_'WAIT FOR COMPLETION_^1_%INQ 1_,LOAD ADDRESS REGISTER_^1_%LDA* LODADR_^1_%OUT ERROR-*_^1_%RTJ* STATUS_'WAIT FOR COMPLETION_^1_%INQ -1_+LOAD BUFFER REGISTER_^1_%LDA* LENGTH_'IMAGE SIZE_^1_%OUT ERROR-*_^1_%RTJ* STATUS_'WAIT F€€OR COMPLETION_^1_%TRM A_,LOOK AT M-REGISTER COMPARE FLAG_^1_%SAN COMPAR_'NOT ZERO INDICATES WRITE IS DONE_^1_%INQ 2_,WRITE DATA_^1_%CLR A_,FWA = $0000_^1_%OUT ERROR-*_^1_%RTJ* STATUS_'WAIT FOR COMPLETION_^1_%LDA* STATUS_'SAVE STATUS SUBROUTINE ENTRY FOR LATER COMPARE_^1_%TRA M_,OPERATION_^1_%JMP* IO_+REPEAT FIRST PART OF I/O SEQUENCE FOR COMPARE_^1COMPAR TRM A_,RESTORE SUBRO€€UTINE ENTRY TO BE SAME AS IT WAS_^1_%STA* STATUS_'DURING WRITE_^1_%SET M_,SET M-REGISTER TO INDICATE COMPARE STARTED_^1_%INQ 4_,COMPARE DATA_^1_%CLR A_,FWA = $0000_^1_%OUT ERROR-*_^1_%JMP* STLPA_(ENTER STATUS LOOP TO WAIT FOR COMPARE FINISH_^1*_]_^1*_]_^1STATUS NUM 0_,STATUS CHECKING LOOP_^1STLPA LDQ* EQUIP1_'READ DIRECTOR STATUS_^1STLOOP CLR A_^1_%INP -1_+LOOP BACK ON ERRO€€R_^1_%AND* M006B_(SAVE READY,BUSY,ON CYLINDER,ALARM,COMPARE_^1_%ALS 9_^1_%SAM ERROR_(SKIP IF NO COMPARE_^1_%ALS 1_^1_%SAM ERROR_(SKIP IF ALARM_^1_%ALS 4_^1_%SAP NTBUSY_'SKIP IF NOT BUSY_^1_%JMP* STLOOP_^1NTBUSY EOR* M4002_^1_%SAZ DONE_)SKIP IF READY,ON CYLINDER_^1_%JMP* STLOOP_^1DONE_!TRM A_,CHECK COMPARE FLAG_^1_%SAP RTN_*SKIP IF COMPARE NOT DONE_^1_%CLR Q_,EVERYTHING DO€RNE SUCCESSFULLY_^1_%JMP* LOOP_^1RTN_"JMP* (STATUS)_$STATUS = NOT ALARM,NOT BUSY,ON CYLINDER,READY_^1*_8COMPARE GOOD_^1_%SPC 2_^1ERROR NOP 0_,ERROR EXIT_^1_%SET Q_^1LOOP_!SLS 0_,WAIT FOR SLS_^1_%JMP* LOOP_^1_%SPC 2_^1M4002 NUM $4002_^1EQUIP ADC EDISK*$80_^1EQUIP1 ADC EDISK*$80+1_^1LODADR NUM 0_^1M006B NUM $6B_^1_%END_]_^__ RPCP026 CSY/ A14 P€1_%NAM CP026_(DECK-ID A14 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_*HOLLERITH (026) CARD PUNCH TABLE_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A15 P€1_%NAM CP029_(DECK-ID A15 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_*EBCDIC (029) CARD PUNCH TABLE_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A16 P€1_%NAM CR026_(DECK-ID A16 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$CARD READER HOLLERITH TO ASCII CONVERSION TABLE_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A17 P€1_%NAM CR029_(DECK-ID A17 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$CARD READER CONVERSION TABLE FOR 029(EBCDIC) CODES_^1*_$PERIPHERAL DRIVERS 1.0A_^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_]_^__ *PDMP421 CSY/ A18 P€1_%NAM DMP421_'DECK-ID A18 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$CORE DUMP ROUTINE FOR 1740/501 AND 1742-1 PRINTERS_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_1USER INSTRUCTIONS AFTER LOADING_)EG, DUMP 32K_^1*_81. PUT STARTING ADDRESS IN A_)A=0000_^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 8_,START NEXT PAGE_^1_%RTJ OUTFCT_'SET PAPER TO TOP OF FORM_^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_'NEXT HEADING FIELD_^1_%RTJ* RPTOUT_'OUTP€€UT 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* IGNFLG_*YES, IS IGNORE FLAG SET_^1_%SAZ €€OUTASK_2NO, PRINT ROW OF ASTERISKS_^1_%JMP* CHKDON_2YES, CHECK IF ALL DONE_^1*_]_^1OUTASK 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 LDA* CURADR_'OUTPUT NEXT LINE_^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* CHKLIN_^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 RTJ* OUTPUT_'OUTPUT WORD AND RESTORE WORD IN A_^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_*NO, REPEAT AGAIN_^1RPTEXT JMP* (RPTOUT)_^1_%SPC 2_^1OUTFLD 000 000_*OUTPUT NEXT FI€€ELD_^1_%STA* LSTWRD_*SAVE LAST WORD OUTPUT_^1_%RTJ* OUT2CH_'OUTPUT FIRST TWO CHARACTERS_^1_%LDA* LSTWRD_^1_%ALS 8_^1_%RTJ* OUT2CH_'OUTPUT LAST TWO CHARACTERS_^1_%LDA* TWOSPC_^1_%RTJ* OUTPUT_'OUTPUT TWO SPACES_^1_%JMP* (OUTFLD)_^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_^1RPTCTR NUM 0_,REPEAT COUNTER_^1IGNFLG NUM 0_,IGNORE FLAG_^1WRDSAV NUM 0_,WORD SAVE_^1LSTWRD NUM 0_,LAST WORD_^1ZERO_!NUM 0_,ZERO_^1TWOSPC NUM $2020_(TWO SPACES_^1TWOASK NUM $2A2A_(TWO ASTERISKS_^1WESSTA NUM $0201_(HARDWARE ADDRESS (STATUS)_(**MSOS 4.1**_^1FFFE_!NUM $FFFE_^1_%SPC 2_^1OUT2CH 000 000_*OUTPUT TWO HEX CHARACTERS_^1_%ENQ 0_/CHARACTERS IN BI€€TS 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_%RTJ* OUTPUT_'OUTPUT TWO ASCII €€CHARACTERS AND EXIT_^1_%JMP* (OUT2CH)_^1_%EJT_]_^1_%SPC 2_^1PRTSPC 000 000_*PRINT LINE AND SPACE TO THE NEXT LINE_^1_%ENA 1_^1_%RTJ* OUTFCT_'PRINT THE OUTPUTED LINE_^1_%ENA 2_^1_%RTJ* OUTFCT_^1_%JMP* (PRTSPC)_^1_%SPC 2_^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 STATU€€S AND EXIT_^1_%SPC 2_^1OUTFCT 000 000_*OUTPUT LINE PRINTER FUNCTION_^1_%LDQ* WESSTA_'FUNCTION IN 'A'_^1_%INQ 2_^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* €PINPSTA_*NO, REREAD STATUS_^1STAAOK JMP* (STATUS)_(YES, EXIT_^1_%END COUTV4_^__ PPDSKCDR CSY/ A19 P€1_%NAM DSKCDR_'DECK-ID A19 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A20 P€1_%NAM DSKDHX_'DECK-ID A20 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^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*_$CH1_^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*_$DCOD€€EC_^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*_$CH2_^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/ A21 P€1_%NAM DSKMMD_'DECK-ID A21 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A22 P€1_%NAM DSKMTI_'DECK-ID A22 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A23 P€1_%NAM DSKMTO_'DECK-ID A23 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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_^__ΰPD1711 CSY/ A24 P€1_%NAM D1711_(DECK-ID A24 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_*1711 TELETYPE AND 713-10/711-100/713-120 CRT DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1*_]_^1*P1711 ADC $520A_(00 SCHEDULER CALL_^1*_%ADC CI1711_'01 INITIATOR ADDRESS_^1*_%ADC CC1711_'02 CONTINUATO€€R 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 ALL€€OCATOR_^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 A€€DDRESS_^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 TIMERR(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_%J€€MP* 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_%LD€€A- (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 ITER._.*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 LDQ- 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 DISPATC€€HER_^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_,CONTINUAT€€OR_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 COMPLE€€TION_^1TAGIT1 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 F€€OR 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-_$ERRCO€€D,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_%JMP* 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_!CHE€€CK FOR MOTION 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 LOS€€T 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 C€€ARDS DELETED_^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- BIT15_$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 TOPF€€RM_#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_%*MSOS 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* BIT6T€€9_'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 COU€€NT_^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_2CHARAC€€TER_^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_,COMPLETEO 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 FRO€€M PDT._)*MSOS 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 PA€€RITY 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_(S€€AZ_%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-_$XFF00_^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-_$COR€€E,I_.CORE LOCATION_^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_^__ PD1713K CSY/ A25 P€1_%NAM D1713K_'DECK-ID A25 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1713 TELETYPE DRIVER - KEYBOARD MODULE_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1*_$THIS MODULE MUST BE CORE RESIDENT_^1_%SPC 2_N**MSOS 4.1**_^1_%ENT I1713K,C1713K,E1713K_;**MSOS 4.1**_^1_%EXT LOG_*ERROR LOG€€GING ENTRY_.**MSOS 4.1**_^1_%ENT W1713R,W1713P,LOKNXT_;**MSOS 4.1**_^1_(ENT_%CMPLET_^1_%ENT SETCD1_^1_'EXT S13MOD_^1_%EXT ALTDEV_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATOR_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATOR_^1_%EXT MAKEQ_^1_%EXT MI_^1_%EXT S13BZY_^1_%SPC 2_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_%COUNTER TO BE USED BY DIAGNOSTIC TIMER ROUTINE_^1_%EQU LU(€€5)_(LOGICAL UNIT CURRENTLY ASSIGNED TO THIS DEVICE_^1_%EQU REQAD(6)_$ADDRESS OF REQUEST_0*MSOS V4.0_^1_%EQU CALL(7)_%INFO TO BE PUT IN Q FOR ADDRESSING CONTROLLER_^1_%EQU ERRTAB(8)_^1_%EQU SWITCH(9)_^1_%EQU CORE(10)_$FIRST (CURRENT) LOCATION OF DATA BLOCK_^1_%EQU LASTP1(11)_"LAST LOCATION PLUS 1 OF DATA BLOCK_^1_%EQU STATUS(12)_"LAST EQUIPMENT STATUS TAKEN_^1_%EQU COREIN(13€€)_"THIS LOCATION CAN BE USED BECAUSE DRIVER IS_^1*_;NEVER MASS MEMORY_^1_%EQU TEMP(15)_^1_%EQU ERRCOD(16)_^1_%EQU DIAGLU(19)_"DIAGNOSTIC LOGICAL UNIT_***MSOS 4.1**_^1_%EQU TMPWRD(11)_"TEMP.MOTION REQUEST PARAMETERS_#*MSOS V4.0_^1_%SPC 2_^1***_"ERROR CODES_^1_%SPC 2_^1_%EQU TIMERR(0)_#TIME OUT ERROR_^1_%EQU LOSDAT(1)_#LOST DATA_^1_%EQU ALARM(2)_$ALARM_^1_%EQU PARERR(3)_^1_€€%EQU INTREJ(5)_G*MSOS V4.0_^1_%EQU EXTREJ(6)_G*MSOS V4.0_^1_%EJT_]_^1***_"MASKS_^1_%SPC 2_^1_%EQU H001F(7)_^1_%EQU HFFF0($16)_^1_%EQU XFF00($1A)_^1_%EQU H003F(8)_^1_%EQU B14A15($20)_^1_%EQU BIT3($26)_^1_%EQU BIT8($2B)_^1_%EQU BIT9($2C)_^1_%EQU BIT11($2E)_^1_%EQU BIT15($32)_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU TFORM($0C)_^1_%SPC 2_^1***_"TIME OUT VALUES ARE€€ IN SECONDS_^1_%SPC 2_^1_%EQU INPVAL(60)_"KEYBOARD INPUT TIMEOUT PERIOD_^1_%EQU OUTVAL(2)_#KEYBOARD OUTPUT TIMEOUT PERIOD_^1_%SPC 2_^1_%EQU AFNR($B5)_^1_%EQU ACOMPR($B6)_^1_%EQU DISPAD($EA)_^1_%EJT_]_^1E1713K STQ- I_,DIAGNOSTIC TIMER ERROR ENTRY_$**MSOS 4.1**_^1_%ENA TIMERR_'TIMEOUT ERROR_^1TSETCD JMP SETCOD_^1_%SPC 2_^1FLAG_!NUM 0_^1EOPFLG ADC S13MOD_^1BIT6A7 NUM $3C0€€_^1_%EJT_]_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1713K STQ- I_N**MSOS 4.1**_^1_%LDA+ S13BZY_^1_%SAZ TOFNR_(IS 1713 BUSY_^1_%STQ W1713K_'SET UP PDT ADDRESS TO WAIT FOR_"**MSOS 4.1**_^1_%JMP- (DISPAD)_%OTHER USER TO FINISH_,**MSOS 4.1**_^1TOFNR RTJ- (AFNR)_'NO - TO FIND NEXT REQUEST, IS REQUEST WAITING_^1_%JMP* CLROUT_'NO - TO CLEAR AND EXIT ROUTINE_^1_%LDA- I_N**MSOS 4.1**_€€^1_%STA+ S13BZY_'SET BUSY FLAG_^1*_82 CARDS DELETED FOR PSR 83*2129_^1_%RTJ CLEAR_^1_%LDA* (EOPFLG)_$CHECK IF IN_^1_%AND- ONEBIT+10_#KEYBOARD MODE_^1_%SAZ SELKMD_'CHECK KEYBOARD MODE_^1_%JMP* INIT2_(ALREADY IN KEYBOARD MODE_^1SELKMD LDA- ONEBIT+15_^1_%STA* (EOPFLG)_^1_%LDA- ONEBIT+10_#SELECT KEYBOARD MODE AND_^1_%OUT ERRJMP-*_^1_%ENA 8_,EOP INTERRUPT_^1_%JMP* EXIT-1_'OUTPUT AND€€ EXIT_^1INIT2 ENA -8_+CLEAR COMPLETION SWITCH._^1_%AND- SWITCH,I_^1_%STA- SWITCH,I_^1_%LDA- CORE,I_'NO_^1_%STA- COREIN,I_$STORE 1ST LOCATION OF DATA BLOCK IN COREIN_^1_%LDQ- CALL,I_^1_%LDA- BIT8_)WRITE MODE_^1_%INA $14_'DATA AND ALARM INTERRUPTS_^1_%OUT ERRJMP-*_^1_%LDQ- REQAD,I_%REQUEST ADDRESS_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- H001F_K*MSOS V4.0_^1_%INA -14_*CHECK FOR MOT€€ION REQUEST_^1_%SAN SENULL_'SKIP IF NOT MC_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_*GET PARAMETER STRING_^1_%SAP P3-*-1_'SKIP IF NOT ITERATIVE_^1_%AND =N$7000_%GET ONLY PARA._^1P3_#AND- HFFF0_(GET THREE PARAMETERS_^1_%STA- TMPWRD,I_$SAVE PARA. STRING_^1_%JMP MOTREQ_'PROCESS MOTION REQUEST_^1SENULL ENA 1_^1_%AND- SWITCH,I_^1_%SAZ SENDCH_'SKIP IF €€READ OPERATION TO OUTPUT NULL CHAR._^1_%JMP AWRITE_#TO WRITE ROUTINE_^1SENCAN ENA $7F_^1SENDCH LDQ- CALL,I_^1_%INQ -1_^1_%OUT JMPERR-*_$OUTPUT CHARACTER IN ORDER TO CAUSE INTERRUPT_^1EXIT_!ENA 0_^1_%STA ROFLAG_^1_%LDQ- CALL,I_^1_%INP JMPERR-*_$TAKE STATUS_^1_%STA- STATUS,I_$SAVE STATUS_^1_%AND- BIT9_)READ MODE_^1_%ENQ OUTVAL_'OUTPUT TIME OUT VALUE_^1_%SAZ STIME_^1_%ENQ IN€€PVAL_'INTPUT TIME OUT VALUE_^1STIME STQ- TIME,I_'SET DIAG. CLOCK_^1_%JMP- (DISPAD)_$EXIT TO DISPATCHER_^1ERRJMP JMP* JMPERR_'INTERNAL REJECT_^1_%JMP* JMPERR+1_$EXTERNAL REJECT_^1_%EJT_]_^1***_"DRIVER CONTINUATOR ENTRY_^1FLAGIT NUM 0_^1_%SPC 2_^1C1713K STQ- I_,SAVE PDT ADDRESS_1**MSOS 4.1**_^1_%LDQ- CALL,I_^1_%INP JMPERR-*_$TAKE STATUS_^1_%STA- STATUS,I_^1_%ENA 6_^1_%OUT JMPER€€R-*_$CLEAR AND SELECT DATA INTERRUPT_^1_%LDA- STATUS,I_^1_%AND- BIT11_(MANUAL INT._^1_%SAN GOMAN_$SKIP IF MANUAL INTERRUPT_^1_%JMP* NOMAN_(GO TO TEST LOGICAL UNIT NUMBER_^1GOMAN LDA* FLAGIT_'MI BEFORE_^1_%SAZ TAGIT1_'NO_^1*_82 CARDS DELETED (FOR 97*3168)_^1_%JMP- (DISPAD)_$YES, WAIT FOR COMPLETION_^1TAGIT1 RAO* FLAGIT_'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* FLAGIT_^1_%LDA- (I)_*PICKUP SCHEDULER CALL FROM PHYSTB_^1_%STA* SCHCAL_^1_%RTJ- ($F4)_(SCHEDULE MANUAL INTERRUPT PROCESSER_^1SCHCAL NUM $1200_^1_%ADC MI_^1_%RTJ RLAQ_)RELEASE A/Q_^1_%STQ- I_^1_%ENA $28_^1_%AND- STATUS,I_^1_%SAN NOMAN_^1_%LDA* (EOPFLG)_$TEST IF EOP INT NECESSARY_^1_%SAM EOP_^1_%LDA* FLAG_^1_%LDQ- €€CALL,I_^1_%SAN EOP_^1_%ENA $16_*CLR INT, SEL INT ON DATA AND ALARM**MSOS 4.1**_^1_%JMP* EX_^1EOP_"ENA $1A_(CLR INT, SEL INT ON ALARM, EOP_^1EX_#OUT JMPERR-*_^1*_81 CARD DELETED (FOR 97*3168)_^1_%JMP- (DISPAD)_$EXIT_^1NOMAN ENA $20_^1_%AND- STATUS,I_$CHECK ALARM_^1_%SAZ NOMAN1_^1_%ENA $40_^1_%AND- STATUS,I_^1_%SAZ ALM_^1_%ENA LOSDAT_'LOST DATA_^1_%JMP* ALM+1_^1ALM_"ENA AL€€ARM_^1_%JMP* TSETCD_'TO SETCODE_^1NOMAN1 LDA- LU,I_^1_%SAZ CLROUT_I**MSOS 4.1**_^1_%JMP* NOM1_K**MSOS 4.1**_^1CLROUT RTJ CLEAR_^1LOKNXT ENQ 2_,LOOK TO SEE IF OTHER 1713 MODULES **MSOS 4.1**_^1NXTLOK LDA* W1713K,Q_$HAVE WAITING REQUESTS_,**MSOS 4.1**_^1_%SAZ NOTACT_'SKIP IF NOT WAITING_.**MSOS 4.1**_^1_%STA- I_,SAVE PHYSTB ADDRESS_^1_%CLR A_^1_%STA* W1713K,Q_$CLEAR TABLE LOCATI€€ON_^1_%LDQ- I_,PHYSTB ADDRESS TO Q_^1_%LDA- 1,I_*INITIATOR ADDRESS_^1_%STA- I_^1_%JMP- (I)_*GO TO DRIVER INTIIATOR_+**MSOS 4.1**_^1NOTACT INQ -1_+SEE IF ALL CHECKED_/**MSOS 4.1**_^1_%SQM NOWAIT_'SKIP IF ALL CHECKED_.**MSOS 4.1**_^1_%JMP* NXTLOK_'GO TO LOOK AT NEXT_/**MSOS 4.1**_^1NOWAIT JMP- (DISPAD)_$EXIT_^1NOM1_!LDA (EOPFLG)_^1_%SAP NOMAN2_^1_%LDA- ONEBIT+10_^1_%STA (EOPFLG€€)_^1_%ENA 2_,CLEAR INTERRUPT._^1_%LDQ- CALL,I_^1_%OUT JMPERR-*_^1_%JMP* INIT2_(GO TO INITIATOR._^1NOMAN2 LDA- SWITCH,I_$CHECK MOTION REQUEST_^1_%SAP NOTMTR_^1_%JMP* MOTRTN_'PROCESS MOTION REQUEST RETURN_^1NOTMTR ENA 8_,CHECK FOR DATA_^1_%AND- STATUS,I_^1_%SAZ CLRFLG_^1_%JMP* NOTDON_'TO CONTINUE_^1CLRFLG LDQ FLAG_K**MSOS 4.1**_^1_%SQN 1_^1_%JMP- (DISPAD)_$EXIT_^1_%STA FLAG_^€€1DONE_#RTJ*_$CMPLET_^1_(JMP_%TOFNR_C**MSOS 4.1**_^1JMPERR JMP* REJECT_'INTERNAL REJECT_^1_%JMP* REJECT+1_$EXTERNAL REJECT_^1CMPLET_!NOP_%0_^1_(LDQ-_$CALL,I_^1_%ENA 2_^1_%OUT JMPERR-*_$CLEAR INTERRUPT_^1_%ENA -1_^1_%STA- TIME,I_'SET UP COUNTER FOR DIAGNOSTIC TIMER_^1_%INP JMPERR-*_$TAKE STATUS_^1_%STA- STATUS,I_$STORE STATUS IN PHYSICAL DEVICE TABLE_^1_%RTJ+ MAKEQ_^1_%RTJ- (ACOM€€PR)_$TO COMPLETE REQUEST_^1*_82 CARDS DELETED (FOR 97*3168)_^1_%ENA 0_^1_%STA+ S13BZY_^1_(JMP*_$(CMPLET)_^1_%SPC 2_^1*_82 CARDS DELETED_^1W1713K NUM 0_N**MSOS 4.1**_^1W1713R NUM 0_N**MSOS 4.1**_^1W1713P NUM 0_N**MSOS 4.1**_^1_%EJT_]_^1***_"PROCESS MOTION REQUEST_^1_%SPC 2_^1NXTMTR LDA- SWITCH,I_^1_%EOR- BIT15_^1_%STA- SWITCH,I_^1MOTREQ LDA- TMPWRD,I_$PICK UP PARAMETER STRING_€€^1_%CLR Q_^1_%LLS 4_,GET ONE PARA._^1_%SQZ TRMMCR_'SKIP IF DO-NOTHING_^1_%STA- TMPWRD,I_$SAVE REMAINDER OF STRING_^1_%INQ -2_+IS IT WEOF_^1_%SQZ TOPFRM_'SKIP IF YES_^1_%INQ -2_+IS IT REWIND UNLOAD_^1_%SQZ TRMMCR_'SKIP IF YES_^1_%JMP* MOTREQ_'CHECK NEXT PARAMETER_^1TRMMCR JMP* DONE_^1_%SPC 2_^1***_"TOP OF FORM_^1_%SPC 2_^1TOPFRM LDA- SWITCH,I_^1_%AND- H003F_(SAVE LOWER SWIT€€CHS_^1_%EOR =N$81C0_%SET BIT15 AND NULL COUNT FOR 7_^1_%STA- SWITCH,I_^1_%ENA TFORM_(ASCII TOP OF FORM(0C)_^1_%JMP* TOSND_(TO SENDCH_^1_%EJT_]_^1NOTDON ENA 1_^1_%AND- SWITCH,I_^1_%SAZ 1_,SKIP IF READ OPERATION_^1_%JMP* AWRITE_'TO WRITE ROUTINE_^1_%ENA 2_^1_%AND- STATUS,I_^1_%SAZ 1_,SKIP IF BUSY BIT OF STATUS WORD IS ON_^1_%JMP* READ_)TO READ ROUTINE_^1_%ENA 2_^1_%AND- SWITCH€€,I_^1_%SAZ NFREAD_'SKIP IF READ OPERATION IS NOT FORMATTED_^1_%ENA $40_L**MSOS 4.1**_^1_%AND- SWITCH,I_^1_%SAN NFREAD_'SKIP IF NULL COUNT IS ALREADY IN SWITCH WORD_^1_%ENA $40_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_$SET 1 IN NULL COUNT_^1_%JMP SENULL_'TO SEND NULL CHARACTER_^1NFREAD LDQ- CALL,I_^1_%ENA 2_^1_%OUT JMPERR-*_$CLEAR INTERRUPT_^1_%ENA $14_*INTERRUPT ON DATA AND ALAR€€M._^1_%OUT JMPERR-*_^1_%LDA- BIT9_^1_%JMP SENDCH+2_$TO OUTPUT DIRECTOR FUNCTION_^1AWRITE ENA 2_^1_%AND- SWITCH,I_^1_%TRA Q_^1_%ENA $10_^1_%AND- SWITCH,I_^1_%SAN NOT1ST_'SKIP IF NOT FIRST CHARACTER TO BE OUTPUTTED_^1_%ENA $10_^1_%SQN 1_^1_%ENA $30_^1_%EOR- SWITCH,I_$TURN OFF FIRST CHARACTER SWITCH_^1_%STA- SWITCH,I_^1_%SQZ NOCONT_^1_%ENA $D_^1TOSND JMP SENDCH_^1NOT1ST S€€QZ NOCONT-*-1_"SKIP IF UNFORMATTED_/58*1183_^1_%ENA $20_M58*1183_^1_%AND- SWITCH,I_^1_%SAN NOCONT_'SKIP IF CHARACTER TO BE OUTPUTTED IS NOT A_^1_%ENA $20_GCONTROL CHARACTER_^1_%EOR- SWITCH,I_$TURN OFF CONTROL CHARACTER SWITCHES_^1_%STA- SWITCH,I_^1_%ENA $A_^1_%JMP* TOSND_^1***_"RETURN FROM TOP OF FORM_^1_%EQU MOTRTN(*)_G*MSOS V4.0_^1_%SPC 2_^1NOCONT LDA- SWITCH,I_^1_%AND BI€€T6A7_^1_%SAZ NOSPCC_'SKIP IF NO CANCEL CHARACTERS TO BE SENT_^1_%LDA- SWITCH,I_^1_%INA -$40_)DECREMENT CANCEL COUNT_^1_%STA- SWITCH,I_^1_%JMP SENCAN_'TO OUTPUT CANCEL CHARACTER_^1REJECT JMP* ERROR_^1_%JMP* ERROR+1_^1_%SPC 2_^1NOSPCC LDA- SWITCH,I_^1_%SAP 1_^1_%JMP* NXTMTR_^1_%AND- BIT3_)CHECK COMPLETION SWITCH_^1_%SAZ 1_,SKIP IF COMPLETION SWITCH NOT SET_^1_%JMP* DONE_)TO EXI€€T AND COMPLETE REQUEST_^1_%LDQ- CORE,I_'LOAD Q WITH ADDRESS OF CURRENT DATA WORD_^1_%LDQ- (ZERO),Q_$LOAD Q WITH CONTENTS OF CURRENT DATA WORD_^1_%ENA 4_^1_%AND- SWITCH,I_^1_%SAN LOWER_(SKIP IF LOWER HALF OF WORD TO BE TRANSFERRED_^1_%QRS 8_,SHIFT UPPER HALF TO LOWER HALF OF Q_^1LOWER ENA $7F_^1_%LAQ A,Q_*REMOVE ANY BITS FROM UPPER HALF OF WORD_^1_%INA -3_+IS THE CHARACTER AN€€ E.O.T._^1_%SAN NOTEOT_'NO_^1_%JMP* DONE_)YES, FINISHED_^1NOTEOT TRQ A_^1_%SAN NOTNUL_'SKIP IF DATA CHARACTER IS NOT ZERO_^1_%ENA $7F_*SUBSTITUTE CANCEL CHARACTER FOR NULL CHARACTER_^1_%ENQ $7F_^1NOTNUL INA -$D_^1_%SAN NOTCR_(SKIP IF DATA CHAR NOT A CARRIAGE RETURN CHAR_^1_%ENA $20_*SET UP A REG TO TURN ON LINE FEED CHAR SWITCH_^1_%JMP* GOTCR_(GO TO TURN ON LINE FEED CHARAC€€TER SWITCH_^1NOTCR INA 1_^1_%SAZ GOTTAB_'SKIP IF FF CONTROL CHARACTER (1100)_^1_%INA 1_^1_%SAZ GOTTAB_'SKIP IF VERTICAL TAB_^1_%INA 2_^1_%SAN NOCR_)SKIP IF NOT HORIZONTAL TAB_^1GOTTAB LDA BIT6A7_'SET UP NULL COUNT_^1GOTCR EOR- SWITCH,I_$MODIFY SWITCH_^1_%STA- SWITCH,I_^1NOCR_!TRQ A_,PUT DATA IN A REGISTER_^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_^1_%OUT REJECT-*_!OUTPUT CHARACTER_^1RUBOUT LDA- CORE,I_'LAST WORD_^1_%SUB- LASTP1,I_^1_%SAZ COMPLT_'SKIP IF ALL DATA HAS BEEN TRANSFERRED_^1_%ENA 4_^1_%EOR- SWITCH€€,I_$REVERSE UPPER-LOWER SWITCH_^1_%STA- SWITCH,I_^1_%ALS 13_^1_%SAM GOGODI_'SKIP IF LOWER HALF WORD TO BE TRANSFERRED NEXT_^1_%RAO- CORE,I_'UPDATE CORE LOCATION OF DATA_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAN GOGODI_'SKIP IF ALL DATA NOT TRANSFERRED_^1COMPLT ENA 8_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_$SET COMPLETION SWITCH_^1_%JMP* GOGODO_^1GOGODI LDA* ROFLAG_'RUBOUT PRESENT F€€LAG SET_^1_%SAZ GOGODO_'NO_^1_%JMP C1713K+1_$YES, GO GET THE NEXT CHARACTER_^1GOGODO JMP EXIT_^1ROFLAG NUM 0_,RUBOUT PRESENT FLAG_^1READ_!INQ -1_^1_%ENA 0_^1_%INP REJECT-*_!INPUT CHARACTER_^1_%SPA- TEMP,I_'CHECK FOR PARITY ERROR_^1_%SAN NOPAR_(SKIP IF CORRECT PARITY_^1_%ENA PARERR_'SET UP PARITY ERROR CODE_)**MSOS 4.1**_^1_%JMP* TTSCD_^1NOPAR ENA $7F_^1_%AND- TEMP,I_'CLE€€AR UPPER BITS OF CHARACTER JUST READ_^1_%TRA Q_,STORE CHARACTER IN Q_^1_%ENA 2_^1_%AND- SWITCH,I_^1_%SAZ ZIFORM_'SKIP IF READ OPERATION NOT FORMATTED_^1_%TRQ A_,REPLACE CHARACTER JUST READ IN A_^1_%INA -$A_^1_%SAZ PASSIT_'SKIP IF LINE FEED_^1_%INA -3_^1_%SAN 1_,SKIP IF NOT CARRIAGE RETURN_^1_%JMP* CARRET_'TO HANDLE CARRIAGE RETURN_^1_%INA -$72_^1_%SAN 1_,SKIP IF NOT CANCE€€L CHARACTER_^1_%JMP* CANCEL_'TO HANDLE CANCEL CHARACTER_^1_%ENA $10_^1_%AND- SWITCH,I_^1_%SAZ ZIFORM_'SKIP IF PASS SWITCH OFF_^1PASSIT JMP* GOGODI_#TO EXIT_^1ZIFORM ENA 4_^1_%AND- SWITCH,I_^1_%SAN LOWLOW_'SKIP IF CHARACTER TO BE STORED IN LOWER HALF_^1_%ENA -0_IOF CORE LOCATION_^1_%LLS 24_+SHIFT UPPER HALF WORD TO LOWER HALF OF A REG_^1_%JMP* TOSTO_(TO CONTINUE_^1ERROR JMP* €€INRJ_^1_%ENA EXTREJ_#EXTERNAL REJECT 6_^1TTSCD JMP* SETCOD_^1INRJ_!ENA INTREJ_#INTERNAL REJECT 5_^1_%JMP* SETCOD_^1LOWLOW TRQ A_,REPLACE CHARACTER JUST READ IN A_^1_%EOR- XFF00_(SET UPPER BITS OF CHARACTER IN A REGISTER_^1_%LDQ- CORE,I_^1_%AND- (ZERO),Q_$SET UP COMPLETED WORD IN A REGISTER_^1TOSTO LDQ- CORE,I_^1_%STA- (ZERO),Q_$STORE COMPLETED WORD IN CURRENT CORE LOCATION_^1_€€%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ TGETOU_'SKIP IF ALL DATA HAS BEEN READ_^1_%ENA 4_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_$REVERSE UPPER-LOWER SWITCH_^1_%ALS 13_^1_%SAM TGODIS_'SKIP IF LOWER HALF WORD TO BE TRANSFERRED NEXT_^1_%RAO- CORE,I_'UPDATE CURRENT CORE LOCATION OF DATA_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ NGODIS_'SKIP IF LAST WORD TO BE READ_^1TGODIS JMP* GOGODI€€_#TO EXIT_^1NGODIS ENA 2_^1_%AND- SWITCH,I_^1_%SAN NOG_*SKIP IF FORMATTED READ_^1TGETOU ENA 8_,SELECT END OF OPERATION INTERRUPT_^1_%LDQ- CALL,I_^1_%OUT ERROR-*_%OUTPUT DIRECTOR FUNCTION_^1_%RAO FLAG_^1_%JMP* GOGODO_'TO EXIT_^1NOG_"ENA $10_^1_%EOR- SWITCH,I_$REVERSE PASS SWITCH_^1_%STA- SWITCH,I_^1_%JMP* GOGODI_#TO EXIT_^1CARRET ENA $20_^1_%AND- SWITCH,I_^1_%SAN 1_)SKIP IF €€CANCEL CHARACTER SWITCH ON_^1_%JMP* TGETOU_^1_%ENA -$34_^1_%AND- SWITCH,I_$CLEAR LOWER HALFWORD SWITCH, PASS SWITCH, AND_^1_%STA- SWITCH,I_**MSOS4.0**_^1REJECT JMP* BCV4_)INTERNAL REJECT_3**MSOS4.0**_^1BDV4_!ENA 6_€€,EXTERNAL REJECT_2**MSOS 4.1**_^1_%JMP* BQV4_K**MSOS 4.1**_^1BCV4_!ENA 5_O**MSOS4.0**_^1BQV4_!LDQ SAVEI_J**MSOS 4.1**_^1_%STQ- I_O**MSOS4.0**_^1_%EIN 0_O**MSOS4.0**_^1RE1J_!STA- ERRCOD,I_H**MSOS4.0**_^1_%JMP* TP5_M**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1E1731B LDA SAVEI_(TIME OUT ENTRY_3**MSOS 4.1**_^1_%STA- I_,TIME OUT ENTRY_€€3**MSOS 4.1**_^1_%ENA_!0_^1_%STA- ERRCOD,I_^1_%LDQ- WES,I_^1_%ADQ- ONEBIT+11_^1_%INP 1_,TERMINATE THE BUFFER_^1_%NOP 0_^1_%JMP* TP5_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1DYNSTB LDA =N$E280_^1_(EQU_%DYNSTA(DYNSTB)_^1_%AND- STS,I_^1_%STA* TEMP_^1_%LDA_!=N$1003_^1_%ADD* TEMP_^1_%STA- STS,I_^1_%LDA_!=XINTVAL_^1_%STA- TIME,I_^1_%JMP- (€€DISP)_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1TP5_"JMP FAILED_J**MSOS4.0**_^1ULWA_!NUM 0_^1BRTNV4 STA* ULWA_)USERS LWA_9**MSOS4.0**_^1_%LDQ- FWA,I_(USERS FWA_9**MSOS4.0**_^1_%STQ SNRAD_(SET UP SNR CHECK ADDRESSES_(**MSOS4.0**_^1_%RTJ SNRCV4_'CHECK FOR SNR_5**MSOS4.0**_^1_%JMP* NSNR_)NOT A SNR_9**MSOS4.0**_^1_%LDA* SAVLV4_^1_%STA* BUFLWA_^€€1_%JMP* IOXFER_J**MSOS4.0**_^1NSNR_!LDA* ULWA_)RESET USERS LWA_3**MSOS4.0**_^1NRMRTB STA- FWA,I_^1_%JMP CONTIU_^1_%SPC_!1_^1_%SPC 1_O**MSOS4.0**_^1*****************************************************_^1RCVCOD NUM 0_O**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1MOTITR NUM 0_O**MSOS4.0**_^1SKPFLG NUM 0_O**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1********************************************€€*********_^1_%SPC_!1_^1TPMCTL LDA* SKPFLG_'CHECK IF MORE THAN ONE OPERATION T **MSOS4.0**_^1_%SAZ NOTSKP_'PLETE REQUEST. SKIP IF ONE OPERATI **MSOS4.0**_^1_%LDA- STS,I_(MORE THAN ONE NEEDED CHECK FOR EOF **MSOS4.0**_^1_%ALS 4_O**MSOS4.0**_^1_%SAM NOTSKP_'SKIP WHEN COMPLETE TO ALLOW ITERAT **MSOS4.0**_^1_%LDQ* SKPFLG_'NOT COMPLETE. ALLOW CONTIUATION._!**MSOS4.0**_^1_%JMP* MOTNV4_€€J**MSOS4.0**_^1NOTSKP LDA- 15,I_L**MSOS4.0**_^1_%SAP SGLMOT_'SKIP IF SINGLE MOTION REQUEST._#**MSOS4.0**_^1_%AND- $E_,$0FFF. SAVE ITERATIONS._***MSOS4.0**_^1_%STA* MOTITR_J**MSOS4.0**_^1_%SAZ ZEROIT_'GO SET DONOTHING REQUEST. ITERATIO **MSOS4.0**_^1_%LDA- 15,I_L**MSOS4.0**_^1_%AND- $1E_+$F000. SAVE REQUEST AND ITERATION **MSOS4.0**_^1_%EOR* MOTITR_J**MSOS4.0**_^1_%INA -1_+DECREM€€ENT ITERATIONS._-**MSOS4.0**_^1_%STA- 15,I_)RESTORE FOR NEXT TIME THROUGH._#**MSOS4.0**_^1_%AND =N$7000_'SAVE CODE._7**MSOS4.0**_^1_%ENQ 0_O**MSOS4.0**_^1_%LLS 4_O**MSOS4.0**_^1_%JMP* TESTCD_J**MSOS4.0**_^1ZEROIT STA- 15,I_L**MSOS4.0**_^1_%STA* SKPFLG_'READY SKIP FLAG FOR NEXT TIME._#**MSOS4.0**_^1SGLMOT ENQ 0_O**MSOS4.0**_^1_%STQ* SKPFLG_'CLEAR SKPFLG NOT ITERATION REQUEST **M€€SOS4.0**_^1_%LLS_!4_*PLACE IN Q TO USE AS_^1_%STA- 15,I_'ORDINAL TO THE REQUEST_^1TESTCD INQ -8_+CHECK FOR LEGAL CODE._-**MSOS4.0**_^1_%SQM CODEOK_'MUST BE LESS THAN SEVEN._***MSOS4.0**_^1_%JMP REJ_M**MSOS4.0**_^1CODEOK INQ 8_O**MSOS4.0**_^1MOTNV4 JMP* TPMTBL,Q_H**MSOS4.0**_^1_%SPC_!2_^1BSPR_!LDA =N$198_'BKSP FUNVTION CODE_258*1131_^1TPM1A LDQ- STS,I_(CHECK FOR LOAD POINT._-€€**MSOS4.0**_^1_%QLS 5_O**MSOS4.0**_^1_%SQP TPM1_L**MSOS4.0**_^1_%LDQ* SKPFLG_'CHECK FOR ITERATIONS._-**MSOS4.0**_^1_%SQZ NOCNT_K**MSOS4.0**_^1_%ENQ 0_,CLEAR ITERATIONS._1**MSOS4.0**_^1_%STA- 15,I_L**MSOS4.0**_^1_%STQ* SKPFLG_J**MSOS4.0**_^1NOCNT JMP* TPMCTL_J**MSOS4.0**_^1TPM1_!STA- ERRCOD,I_^1_%RTJ CKBSY_^1_%LDA- ERRCOD,I_^1_%OUT REJECT-*_H**MSOS4.0**_^1_%ALS_!12_^1_%SAP_!T€€PM3-*-1_^1_%LDA- $FF_*SAVE UNIT NO. IN SAVI_^1_%STA SAVEI_K**MSOS4.0**_^1_%JMP* DYNSTA_^1_%SPC_!1_^1TPM3_!JMP* TPMCTL_^1MARKEF RTJ* ENRIV4_J**MSOS4.0**_^1_%LDA =N$298_L58*1131_^1_%JMP* TPM1_^1REWIND LDA =N$418_L58*1131_^1_%JMP* TPM1A_^1UNLOAD LDQ- WES,I_$CHECK IF AT LOAD POINT_^1_%INP REJECT-*_H**MSOS4.0**_^1_%ALS_!5_^1_%SAM UNLOD_O62*1305_^1_%LDA- $31_*SET UNLOAD AGAIN_6€€62*1305_^1_%STA- 15,I_^1_%JMP* REWIND_^1UNLOD ENA_!0_)UNLOAD_^1_%STA- 15,I_^1_%LDA_!=N$600_^1_%JMP* TPM1_^1SKRECF RTJ CKBSY_(CHECK IF UNIT IS BUSY._,**MSOS4.0**_^1_%LDA =N$108_L58*1131_^1_%OUT XREJ-*_'START MOTION_5**MSOS 4.1**_^1_%LDA- $FF_*SAVE PHYSTB ADDRESS._.**MSOS4.0**_^1_%STA SAVEI_K**MSOS4.0**_^1_%JMP* DYNSTB_'EXIT AND WAIT FOR EOP._,**MSOS4.0**_^1SKEOFF STQ* SKPFL€€G_'SAVE CODE USED AND SET EOF TERMINA **MSOS4.0**_^1_%JMP* SKRECF_'ISSUE FUNCTION._3**MSOS4.0**_^1SKEOFB STQ* SKPFLG_'SAVE CODE USED AND SET EOF TERMINA **MSOS4.0**_^1_%JMP* BSPR_)GO ISSUE FUNCTION._0**MSOS4.0**_^1_%SPC_!1_^1ENRIV4 NOP 0_O**MSOS4.0**_^1_%LDA- STS,I_K**MSOS4.0**_^1_%SAM RINGOK_J**MSOS4.0**_^1_%ENA 13_N**MSOS4.0**_^1ENRI_!STA- ERRCOD,I_H**MSOS4.0**_^1_%JMP FAILED€€_(NO WRITE RING._3**MSOS4.0**_^1RINGOK JMP* (ENRIV4)_H**MSOS4.0**_^1XREJ_!JMP* IXREJ_J**MSOS 4.1_^1_%JMP BDV4_K**MSOS 4.1**_^1IXREJ JMP BCV4_K**MSOS 4.1**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1TPMTBL JMP* DONOTH_J**MSOS4.0**_^1_%JMP* BSPR_L**MSOS4.0**_^1_%JMP* MARKEF_J**MSOS4.0**_^1_%JMP* REWIND_J**MSOS4.0**_^1_%JMP* UNLOAD_J**MSOS4.0**_€€^1_%JMP* SKEOFF_'SKIP FILE MARK FORWARD._+**MSOS4.0**_^1_%JMP* SKEOFB_'SKIP FILE MARK BACKWARD._***MSOS4.0**_^1_%JMP* SKRECF_'SKIP RECORD FORWARD._.**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1C1731B EQU C1731B(*)_#CONTINUATOR_6**MSOS 4.1**_^1_%LDA* SAVEI_^1_%STA- I RESTORE CURRENT PHYSTB_^1_%ENA -1_+RESET DIAGNOSTIC TIMER_^1_%STA- TIME,I_^1_%LDQ- WES,I_^1_%LDA- $1D_*SAVE CONVERTER BITS€€_^1_%LAQ Q_^1_%ADQ- $2E_*($800)_!A=CURRENT ADDRESS_^1_%INP BUFREJ-*_H**MSOS4.0**_^1_%STA* TERFV4_'SAVE NXT ADDRESS OF BUFFER._'**MSOS4.0**_^1_%LDQ- RQST,I_'CHECK IF TAPE MOTION REQUEST._$**MSOS4.0**_^1_%QLS 10_+DO NOT CHECK 1706 ADDRESSES IF_#**MSOS4.0**_^1_%SQP 1_O**MSOS4.0**_^1_%JMP* TAPC2_K**MSOS4.0**_^1_%LDQ BUFFWA_'FWA OF BUFFER._4**MSOS4.0**_^1_%RTJ COMPV4_'CHECK IF CUR€€RENT ADDRESS IS WITHIN **MSOS4.0**_^1_%SAZ TAPC1_(BUFFER BOUNDARY._2**MSOS4.0**_^1_%INA 0_O**MSOS4.0**_^1_%SAN TAPC1_K**MSOS4.0**_^1TAPC01 LDQ- WES,I_)CLEAR THE INTERRUPTS._,**MSOS4.0**_^1_%ENA 2_^1_%OUT BUFREJ-*_^1_%ENA 37_^1_%JMP* ENRI_L**MSOS4.0**_^1TAPC1 LDQ* TERFV4_'YES PICK UP CURRENT ADDRESS._%**MSOS4.0**_^1_%LDA BUFLWA_'ORIGINAL BUFFER LWA._.**MSOS4.0**_^1_%RTJ COM€€PV4_J**MSOS4.0**_^1_%SAZ TAPC2_K**MSOS4.0**_^1_%INA 0_O**MSOS4.0**_^1_%SAN TAPC2_K**MSOS4.0**_^1_%JMP* TAPC01_'YES._>**MSOS4.0**_^1TAPC2 EQU TAPC2(*)_H**MSOS4.0**_^1_%LDA BUFLWA_'SAVE LWA OF ORG BUFFER_,**MSOS4.0**_^1_%STA SAVLV4_J**MSOS4.0**_^1_%LDQ- WES,I_(CLEAR INTERRUPTS_2**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%OUT BUFREJ-*_H**MSOS4.0**_^1_%RTJ* STATV4_J**MSOS4.0**_^1_%€€ALS 15_+CHK 4 READY_7**MSOS4.0**_^1_%SAM REDIE_(SKIP IF READY_5**MSOS4.0**_^1_%ENA 14_+NOT READY_9**MSOS4.0**_^1_%JMP RE1J_L**MSOS4.0**_^1REDIE EQU REDIE(*)_H**MSOS4.0**_^1_%LDQ- RTRECV,I_H**MSOS4.0**_^1_%SQZ NORECV_'CHK IF ERR RECV I/O_/**MSOS4.0**_^1_%JMP- (ZERO),Q_H**MSOS4.0**_^1NORECV LDA- RQST,I_J**MSOS4.0**_^1_%ALS 10_+CHK 4 MOTION_6**MSOS4.0**_^1_%SAP NOMOT_(SKIP IF€€ NO MOTION_1**MSOS4.0**_^1_%JMP TPMCTL_J**MSOS4.0**_^1NOMOT EQU NOMOT(*)_H**MSOS4.0**_^1_%ALS 5_O**MSOS4.0**_^1_%SAP ISREAD_J**MSOS4.0**_^1_%JMP* NOREAD_J**MSOS4.0**_^1ISREAD LDQ- STS,I_(CHECK FOR EOF_5**MSOS4.0**_^1_%QLS 4_O**MSOS4.0**_^1_%SQP NEF_*SKIP IF NOT_7**MSOS4.0**_^1_%LDA- FWA,I_(IS EOF_<**MSOS4.0**_^1_%INA 1_O**MSOS4.0**_^1_%JMP NRMRTB_^1NEF_"EQU NEF(*)_J**MSOS€€4.0**_^1*_88 CARDS DELETED_^1NOREAD EQU NOREAD(*)_H**MSOS4.0**_^1NOTSNR LDQ- STS,I_K**MSOS4.0**_^1_%LRS 7_,CHECK FOR LOST DATA_/**MSOS4.0**_^1_%SAP NOLD_L**MSOS4.0**_^1_%ENQ 1_O**MSOS4.0**_^1REVR2 STQ- ERRCOD,I_H**MSOS4.0**_^1_%ADQ =N$3030_I**MSOS4.0**_^1_%LDA* REVR+1_J**MSOS4.0**_^1_%SUB $11_M**MSOS4.0**_^1_%SAZ REVR1_K**MSOS4.0**_^1REVR_!RTJ RECVTB_J**MSOS4.0**_^1REVR1 L€€DA* TERFV4_J**MSOS4.0**_^1_%STA- FWA,I_K**MSOS4.0**_^1_%JMP* FAILED_J**MSOS4.0**_^1NOLD_!LRS 2_,CHK FOR PARITY_4**MSOS4.0**_^1_%SAM YSPRTY_'SKIP IF PARITY ERROR_.**MSOS4.0**_^1_%JMP* NOPAV4_^1YSPRTY EQU YSPRTY(*)_G**MSOS4.0**_^1_%ENQ 3_,PICKUP PARITY CODE_^1_%JMP* REVR2_K**MSOS4.0**_^1NOPAV4 EQU NOPAV4(*)_G**MSOS4.0**_^1_%LDA- RQST,I_J**MSOS4.0**_^1_%AND- ONEBIT_J**MSOS4.0**_^€€1_%SAZ NOWRIT_'SKIP IF WRITE_5**MSOS4.0**_^1_%LDA- TCKSUM,I_H**MSOS4.0**_^1_%STA- ECKSUM,I_$SAVE LAST GOOD CHKSUM_-**MSOS4.0**_^1NOWRIT EQU NOWRIT(*)_H**MSOS4.0**_^1_%LDA* TERFV4_J**MSOS4.0**_^1_%LDQ- MODRTN,I_H**MSOS4.0**_^1_%JMP- (ZERO),Q_H**MSOS4.0**_^1BUFREJ JMP* BC1_M**MSOS4.0**_^1_%JMP BDV4_L**MSOS4.0**_^1BC1_"JMP BCV4_L**MSOS4.0**_^1_%SPC_!1_^1DONOTH LDA- RQST,I_J**MSOS4.€€0**_^1_%AND- $38_M**MSOS4.0**_^1_%STA- RQST,I_J**MSOS4.0**_^1_%RTJ* STATV4_J**MSOS4.0**_^1_%JMP* CONTIU_J**MSOS4.0**_^1*****************************************************_^1_%SPC_!1_^1SAVEI NUM_!$0000_^1TERFV4 NUM 0_O**MSOS4.0**_^1SAVWV4 NUM 0_O**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_N**MSOS4.0**_^1STATV4 NOP 0_O**MSOS4.0**_^1€€_%LDQ- WES,I_K**MSOS4.0**_^1_%INQ 1_,DIRECTOR 2_8**MSOS4.0**_^1_%INP BUFREJ-*_H**MSOS4.0**_^1_%LLS 13_N**MSOS4.0**_^1_%ALS 1_,WASTE BIT_9**MSOS4.0**_^1_%LLS 2_O**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1_%AND- LOWBTS+3_$MASK 4 LOWER_6**MSOS4.0**_^1_%ALS 12_N**MSOS4.0**_^1_%STA- STS,I_K**MSOS4.0**_^1_%LDQ- WES,I_(DIRECTOR ONE_6**MSOS4.0**_^1_%INP BUFREJ-*_H**MSOS4.0**_^1_%AND- LOW€€BTS+11_G**MSOS4.0**_^1_%ADD- STS,I_K**MSOS4.0**_^1_%STA- STS,I_(SAVE STATUS IN STS_0**MSOS4.0**_^1_%RTJ* EOTCHK_^1_%JMP* (STATV4)_H**MSOS4.0**_^1ASVIT NUM 0_^1QSVIT NUM 0_^1*_81-CARD DELETED_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA- EOTFLG,I_^1_%SAN HEREB4_^1_%LDA- STS,I_^1_%AND- ONEBIT+9_$EOT BIT POSITION_^1_%SAN PRTEOT_^1HEREB4 LDA* ASVIT_^1_%LDQ* €€QSVIT_^1_%JMP* (EOTCHK)_$NO EOT,RETURN EXIT_^1PRTEOT EQU PRTEOT(*)_^1_%ENA 1_^1_%STA- EOTFLG,I_$SET EOT FLAG_^1_%LDQ- WES,I_^1_%OUT BUFREJ-*_^1_%ENA -0_^1_%STA- TIME,I_'RESET DIAGNOSTIC CLOCK_^1_%LDA- SYST,I_^1_%AND- $41_*BFFF_^1_%EOR- $31_*SET BIT 14 IN WORD 8 OF PHYSTAB_^1_%STA- SYST,I_^1_%JMP* MAKQV4_'MAKE-Q PROCESSOR_^1_%SPC 5_O**MSOS4.0**_^1_%SPC_!1_^1FAILED LDA LWAD_L**€€MSOS4.0**_^1_%STA- LWA,I_K**MSOS4.0**_^1_%LDA- SYST,I_J**MSOS4.0**_^1_%ADD- $31_M**MSOS4.0**_^1_%STA- SYST,I_J**MSOS4.0**_^1_%ENA 1_,CLEAR CONTROLLER_^1_%LDQ- WES,I_^1_%OUT 1_^1_%NOP 0_^1_%RTJ RL1706_'RELEASE THE 1706_^1_%STQ- I_^1_%RTJ MAKEQ_^1_%LDA- LUN,I_(GET LOGICAL UNIT_^1_%TRA Q_^1_%QLS 6_^1_%ADQ- ERRCOD,I_$FORM ERROR CODE FOR LOG/ALTDEV_^1_%SUB- DIAGLU,I_^1_%SAZ LOGE€€RR_'TEST FOR DIAG. LU, NO ALTDEV IF SAME_^1_%LDA- (I)_*GET REQUEST CODE/PRIORITY_^1_%STA* ALTRC_^1_%RTJ LOG_*LOG THE ERROR_^1_%RTJ- ($F4)_(MONI CALL_^1ALTRC ADC *-*_*SCHEDULE ALTDEV SO WE CALL RETAIN_^1_%ADC ALTDEV_'CONTROL TO PROCESS OTHER UNITS_^1_%JMP* SEARCH_'FIND MORE REQUEST_^1LOGERR RTJ+ LOG_*GO LOG ERROR_^1_%JMP* SEARCH-1_$COMPLETE REQUEST ON DIAG. LU_^1_%SPC 1_^1CONTI€€U LDA- STS,I_^1_%ALS 4_^1_%SAP MAKQV4_J**MSOS4.0**_^1_%LDA- SYST,I_^1_%AND- ZROBIT+14_#YES,SET BIT 14_^1_%EOR- ONEBIT+14_^1_%STA- SYST,I_^1MAKQV4 LDA LWAD_L**MSOS4.0**_^1_%STA- LWA,I_^1_%RTJ MAKEQ_^1_%SPC_!1_^1_%RTJ- (COMPRQ)_^1_%SPC_!1_^1SEARCH LDA- I_^1_%STA* SAVEI_^1BACK_!LDA- THREAD,I_^1_%STA- I_^1_%SUB* SAVEI_^1_%SAN_!1_^1_%JMP* OVER_^1_%LDA- LUN,I_%CHECK IF BUSY_^1_€€%SAZ_!NO-*-1_^1_%LDA- SYST,I_^1_%AND- ONEBIT+14_^1_%SAZ 1_^1NO_#JMP* BACK_^1_%ENA_!0_^1_%STA* FOVER_K**MSOS4.0**_^1_%JMP TAPE0_^1_%SPC_!1_^1OVER_!LDA* FOVER_K**MSOS4.0**_^1_(SAN_%OV_^1_(JMP*_$OVER1_^1OV_%ENA_%0_^1_%STA* SAVEI_^1_%STA* FOVER_K**MSOS4.0**_^1RELFB EQU RELFB(*)_H**MSOS4.0**_^1_%RTJ+ RL1706_'RELEASE 1706_5**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDA- 0_^1_%ADC $18€€00+ADRPLG-CRXX_^1_%STA CRXX_^1_%JMP+ MAS300_'RELEASE DRIVERS BUFFER_+**MSOS 4.1**_^1_%SPC 2_^1OVER1 LDA- SYST,I_^1_%AND- ONEBIT+14_^1_%SAZ 1_^1_%JMP* OV_^1_%JMP TAPE0_^1FOVER NUM 0_O**MSOS4.0**_^1_%SPC 2_^1CKBSY NOP 0_^1_%LDQ- WES,I_^1_%INP R-*_^1_%ALS 14_^1_%SAP CKA_^1_%JMP* CKU_^1NOTBSY LDA SAVEI_^1_%STA- I_^1_%LDQ- WES,I_^1CKA_"JMP* (CKBSY)_^1CKU_"LDQ- I_^1*_[**MSO€€S4.0**_^1*_$SCHDLE ISBUSY,4,0,D_A**MSOS4.0**_^1*_[**MSOS4.0**_^1CKB_"RTJ- ($F4)_K**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,N4/4_3**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%JMP- (DISP)_^1_%SPC 1_^1ISBUSY STQ- I_^1_%LDQ- WES,I_^1_%INP -1_^1_%ALS 14_^1_%SAP ISNOT_^1_%JMP* ISBUSY+2_^1*_[**MSOS4.0**_^1*_$SCHDLE NOTBSY,0,0,D_A**MSOS4.0**_^1*_[**MSOS4.0**_^1ISNOT RTJ- ($F4)_K**MSO€€S4.0**_^1_%NUM 0_-SET AT PHYSTB+2._1**MSOS4.0**_^1_%ADC NOTBSY_J**MSOS4.0**_^1_%JMP- (DISP)_^1_%SPC 2_^1CKCONT NOP 0_^1_%LDQ- WES,I_^1_%INP R-*_^1_%ALS 3_^1_%SAP CONA_^1_%JMP* CONB_^1NOBSY LDA SAVEI_K**MSOS4.0**_^1_%STA- I_^1_%LDQ- WES,I_^1CONA_!JMP* (CKCONT)_^1CONB_!LDQ- I_^1*_[**MSOS4.0**_^1*_$SCHDLE CONBSY,4,0,D_A**MSOS4.0**_^1*_[**MSOS4.0**_^1CONC_!RTJ- ($F4)_J**MSOS€€4.0**_^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,N4/4_3**MSOS4.0**_^1_%ADC CONBSY_J**MSOS4.0**_^1_%JMP- (DISP)_^1_%SPC 1_^1CONBSY STQ- I_^1_%LDQ- WES,I_^1_%INP -1_^1_%ALS 3_^1_%SAP NOT_^1_%JMP* CONBSY+2_^1*_[**MSOS4.0**_^1*_$SCHDLE NOBSY,0,0,D_B**MSOS4.0**_^1*_[**MSOS4.0**_^1NOT_"RTJ- ($F4)_J**MSOS4.0**_^1_%NUM 0_-SET AT PHYSTB+3._1**MSOS4.0**_^1_%ADC NOBSY_K**MSOS4.0**_^1_%JMP- (D€€ISP)_^1R_$JMP* BC2_M**MSOS4.0**_^1_%JMP BDV4_L**MSOS4.0**_^1BC2_"JMP BCV4_L**MSOS4.0**_^1_%SPC 2_^1SNRAD NUM 0_O**MSOS4.0**_^1SNRCV4 EQU SNRCV4(*)_G**MSOS4.0**_^1NOISCK NOP 0_O**MSOS4.0**_^1_%SUB* SNRAD_K**MSOS4.0**_^1_%INA -NOISLN_M69*1590_^1_%SAZ NOISE_K**MSOS4.0**_^1_%SAP NONOIS_J**MSOS4.0**_^1NOISE RAO* NOISCK_J**MSOS4.0**_^1NONOIS JMP* (NOISCK)_H**MSOS4.0**_^1_%NUM €F 0_O**MSOS4.0**_^1BUFFER BSS BUFFER(SIZE)_D**MSOS4.0**_^1_%END_]_^__ FPD1731U CSY/ A32 P€1_%NAM D1731U_'DECK-ID A32 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT CKBUSY_^1_%ENT FAILED_J**MSOS4.0**_^1_%ENT INTAV4,PARCV4,ABSEV4_<**MSOS4.0**_^1_%ENT REJCTX_J**MSOS4.0**_^1_%€€EXT* RECOVT_J**MSOS4.0**_^1_%ENT MAKV4_K**MSOS4.0**_^1_%ENT NOPAR_^1_%EXT* RWBA_L**MSOS4.0**_^1_%EXT* FRWA_L**MSOS4.0**_^1_%EXT* FRWB_L**MSOS4.0**_^1_%EXT LOG_L**MSOS 4.1**_^1_%EXT ALTDEV_^1_%EXT MAKEQ_^1_%EXT RQAQ,RLAQ_#REQUEST,RELEASE AQ CHANNEL_'**MSOS 4.1**_^1_%ENT MOTV4,SNRV4,TEMCV4_>**MSOS4.0**_^1_%EXT* CHKV4_K**MSOS4.0**_^1NOISLN EQU NOISLN(2)_#SPECIFIES WORD LENGTH €€OF RECORD TO **MSOS4.0**_^1*_8BE DISCARDED AS NOISE._^1LOWBTS EQU LOWBTS(3)_G**MSOS4.0**_^1_%SPC 2_^1_%ENT I1731U,C1731U,E1731U_;**MSOS 4.1**_^1_%EXT MAS300_^1CLOCK EQU CLOCK(4)_H**MSOS4.0**_^1LU_#EQU LU(5)_K**MSOS4.0**_^1REQST EQU REQST(6)_H**MSOS4.0**_^1CONECT EQU CONECT(7)_G**MSOS4.0**_^1TYPE_!EQU TYPE(8)_I**MSOS4.0**_^1ERCD_!EQU ERCD(9)_I**MSOS4.0**_^1START EQU ST€€ART(10)_G**MSOS4.0**_^1STOP_!EQU STOP(11)_H**MSOS4.0**_^1STS_"EQU STS(12)_I**MSOS4.0**_^1CONTRL EQU CONTRL(16)_F**MSOS4.0**_^1_%EQU DIAGLU(17)_"DIAGNOSTIC LU LOCATION_^1ERRCOD EQU ERRCOD(18)_F**MSOS4.0**_^1RTRECV EQU RTRECV(19)_"ERROR RECOVERY RETURN_-**MSOS4.0**_^1ECKSUM EQU ECKSUM(20)_F**MSOS4.0**_^1TCKSUM EQU TCKSUM(22)_F**MSOS4.0**_^1MODRTN EQU MODRTN(23)_F**MSOS4.0**_€€^1_%EQU ZERO($22),LPMSK(2)_^1THREAD EQU THREAD(24)_"PHYSTAB THREAD_3**MSOS 4.1**_^1EOTFLG EQU EOTFLG(25)_"END-OF-TAPE FLAG_^1_%EQU ONEBIT($23),NZERO($12),ZROBIT($33)_^1_%EQU COMPRQ($B6),FNR($B5),DISP($EA)_^1_%EQU T1(14)_!HANGUP DELAY (SECONDS) FOR BSPR_^1_%EQU T2(2)_"HANGUP DELAY (SECONDS) FOR MARKEF_^1_%EQU T3(250) HANGUP DELAY (SECONDS) FOR REWIND_^1STARTA_!STQ-_$I_^1_%R€€TJ* *+1_*LOCALIZE_9**MSOS 4.1**_^1_%NUM 0_N**MSOS 4.1**_^1_%LDA* *-1_L**MSOS 4.1**_^1_%INA -2_M**MSOS 4.1**_^1_%EQU CRXX(*)_^1*_$NOTE% THE NEXT INSTRUCTION IS CHANGED BY DRIVER_^1*_,TO =JMP* ADRPLG= BEFORE EXIT TO MAS300_^1_%LDQ =XE1731U-STARTA_@**MSOS 4.1**_^1_%AAQ Q_^1_%STQ* ADRHNG_'STORE ADDRESS OF TIMEOUT_^1_%LDQ =XC1731U-STARTA_@**MSOS 4.1**_^1_%AAQ Q_^1_%STQ* ADRCON_'€€STORE ADDRESS OF CONTINUATOR_^1_%LDQ =XI1731U-STARTA_^1_%AAQ Q_^1_%STQ* ADRINI_'STORE ADDRESS OF INITIATOR_^1_%LDQ- I_^1ADRPLG LDA- 0_^1ADRINI ADC I1731U_^1_%STA- 1,Q_*STORE ADDRESS OF INITIATOR IN PHYSTB_^1_%LDA- 0_^1ADRCON ADC C1731U_^1_%STA- 2,Q_*STORE ADDRESS OF CONTINUATOR IN PHYSTB_^1_%LDA- 0_^1ADRHNG ADC E1731U_^1_%STA- 3,Q_*STORE ADDRESS OF TIMEOUT IN PHYSTB_^1_%LDA- T€€HREAD,Q_^1_%TRA Q_^1_%SUB- I_^1_%SAZ TAPE2_(SKIP IF DONE_^1_%JMP* ADRPLG_^1_%SPC 2_^1ABSEV4 NUM 0_O**MSOS4.0**_^1_%SPC 2_^1I1731U STQ- I_,INITIATOR_8**MSOS 4.1**_^1TAPE2 EQU TAPE2(*)_G**MSOS 4.1**_^1_%LDQ- THREAD,Q_$FIND OUT IF WE ARE BUSY._^1_%TRQ A_-ON SOME OTHER UNIT OR_^1_%SUB- I_-SIMPLY IN THE DEAD PERIOD_^1_%SAN TAPE3-*-1_$AFTER THE LAST REQUEST._^1_%JMP* CHECK_)EXIT€€ IF ANOTHER REQUEST_^1TAPE3 LDA- TYPE,Q_'IS BUSY_?68*1356_^1_%SAM TAPE4_O63*1356_^1_%JMP* TAPE2_^1TAPE4 JMP- (DISP)_^1CHECK RTJ- (FNR)_(GO TO FIND-NEXT-REQUEST_^1_(JMP-_$(DISP)_^1TAPE6 RTJ+ RQAQ_)REQUEST A/Q CHANNEL_^1_%STQ- I_^1_%LDQ- CONECT,I_^1_%INP RJTI-*_^1_%ALS 3_,WAIT TILL CONTROLLER_^1_%SAP TAPE7-*-1_$IS INACTIVE._^1_%JMP* TAPE6_^1TAPE7 LDQ- REQST,I_%UNPACK REQUEST€€ CODE AND_^1_%LDA- (ZERO),Q_%CHECK FOR TAPE MOTION_^1_%ARS 9_-CONTROL REQUEST._^1_%AND- LOWBTS+4_H**MSOS4.0**_^1_%INA -14_^1_%SAZ CHECK1-*-1_"SKIP ON MOTION CONTROL_^1_%JMP* TP4_^1CHECK1 LDA- ERCD,I_J**MSOS4.0**_^1_%EOR- ONEBIT+5_$BIT 5 IS MOTION BIT_/**MSOS4.0**_^1_%STA- ERCD,I_^1_%ENA 0_^1_%STA- START,I_^1_%STA- STOP,I_^1_%LDA- 4,Q_*PICK UP MOTION REQUEST_,**MSOS4.0**_^1_%SAP€€ NOITER_'CHECK FOR MOTINO ITERATIONS. SKIP **MSOS4.0**_^1_%STA- START,I_%YES. MOTION ITERATIONS. SAVE MOTIO **MSOS4.0**_^1_%JMP* TP4X_)GO SELECT UNIT AND DENSITY._'**MSOS4.0**_^1NOITER LDA- NZERO+4_%EXTRACT MOTION PARAMETERS EXCEPT D **MSOS4.0**_^1_%AND- 4,Q_^1_%STA- START,I_^1_%ENA $F_^1_%AND- 4,Q_^1_%SAN CHGDNS_'SKIP IF DENSITY CHANGE_^1_%JMP* TP4X_^1CHGDNS LDA- LPMSK+4_%ISOL€€ATE UNIT NUMBER PLUS SELECT_^1_%ALS 7_^1_%AND- CONTRL,I_^1_%LDQ- CONECT,I_^1_%INQ 1_^1_%OUT RJTI-*_'SELECT TAPE UNIT_^1_%RTJ STATUS_'READ STATUS_^1_%LDQ- STS,I_^1_%QLS 5_^1_%SQM 2_,SKIP IF TAPE AT LOAD POINT_^1_%JMP REJCTX_'REJECT REQUEST_^1_%LDQ- REQST,I_%PICK UP THE REQUEST LOCATION_^1_%ENA $F_^1_%AND- 4,Q_*GET DENSITY CODE,1=800,2=556,3=200_^1_%INA -1_+CHECK IF 800 BPI €€SELECTED_^1_%SAZ TP4X_L**MSOS4.0**_^1_%INA 1_O**MSOS4.0**_^1_%TRA Q_Q*559_^1_%LDA- ONEBIT+2,Q_"PICK UP DENSITY BIT._.**MSOS4.0**_^1_%JMP* TP3-1_M*559_^1TP4_"EQU TP4(*)_J**MSOS4.0**_^1TP4X_!EQU TP4X(*)_I**MSOS4.0**_^1MORE_!RTJ* FNDEOP_J**MSOS4.0**_^1FNDEOP NUM 0_O**MSOS4.0**_^1_%LDA =XCKEOP-FNDEOP_B**MSOS4.0**_^1_%ADD* FNDEOP_J**MSOS4.0**_^1_%STA* ABSEV4_J**MSOS4.0**_^1_%LDA-€€ ERCD,I_^1_%AND- ONEBIT+5_^1_%SAN TP31_)SKIP IF MOTION REQUEST_^1_%LDA- STOP,I_^1_%SUB- START,I_^1_%INA -NOISLN_%.LT. NOISE RECORD LENGTH REQUEST_^1_%SAP TP31_^1_%SAN 1_,ZERO WORDS REQUESTED._^1_%JMP* ILLREQ_'YES._^1TP31_!ENA $38_^1_%AND- CONTRL,I_^1_%LDQ- REQST,I_^1TP3_"LDQ- 3,Q_*COMPUTE DENSITY AND MODE_^1_%QLS 3_^1_%INA 2_^1_%SQM TP3A-*-1_^1_%INA 2_^1TP3A_!TRA Q_^1_%LD€€A- CONTRL,I_^1_%AND- NZERO+7_^1_%AAQ A_^1_%STA- CONTRL,I_^1_%LDQ- CONECT,I_^1_%INQ 1_^1_%OUT RJTI-*_'SELECT UNIT, MODE. AND DENSITY_^1_%RTJ STATUS_'GO PACK STATUS_^1_%STA TEMP_^1_%ENQ 1_,CHECK FOR READY DEVICE_^1_%LAQ Q_^1_%SQN RDY-*-1_^1STAT2 ENA 14_+NOT READY ERROR CODE_.**MSOS4.0**_^1_%JMP* FAILED_J**MSOS4.0**_^1RDY_"LDQ- ERCD,I_^1_%LRS 6_,BIT 5 OF WORD 9_3**MSOS4.0**€€_^1_%SAP NOTTPM_'NOT MOTION SKIP_3**MSOS4.0**_^1_%JMP TPMCTL_'GO PROCESS MOTION CONTROL_^1RJTI_!JMP* REJCTI_'INTERNAL REJECT_^1_%JMP* REJCTX_'EXTERNAL REJECT_^1NOTTPM EQU NOTTPM(*)_G**MSOS4.0**_^1_%LLS 5_O**MSOS4.0**_^1_%SAP TYPREQ_J**MSOS4.0**_^1_%LDA- STOP,I_'SET LWA+1 FOR CHECKSUM ROUTINE_#**MSOS4.0**_^1_%STA* TEMCV4_J**MSOS4.0**_^1_%RTJ CHKV4_K**MSOS4.0**_^1_%STA- TCKSUM,€€I_H**MSOS4.0**_^1TYPREQ LDQ- ERCD,I_J**MSOS4.0**_^1_%LRS 2_O**MSOS4.0**_^1_%SAP UFMT_L**MSOS4.0**_^1_%JMP* FMT_M**MSOS4.0**_^1UFMT_!LDA* UFMT1+1_'CHECK IF THE PROCESSOR IS PRESENT **MSOS4.0**_^1_%SUB- $11_+$7FFF_<**MSOS4.0**_^1_%SAZ ILLREQ_J**MSOS4.0**_^1UFMT1 JMP RWBA_M**MSOS4.0**_^1ILLREQ ENA 31_+NO PROCESSOR PRESENT_.**MSOS4.0**_^1_%JMP* FAILED_J**MSOS4.0**_^1FMT_"LRS 2_-C€€HECK TYPE OF FORMATTED REQ.._#**MSOS4.0**_^1_%SAP FMB_M**MSOS4.0**_^1_%LDA* FMT1+1_(CHECK IF THE PROCESSOR IS PRESENT **MSOS4.0**_^1_%SUB- $11_+$7FFF_<**MSOS4.0**_^1_%SAZ FMT2_L**MSOS4.0**_^1FMT1_!JMP FRWA_L**MSOS4.0**_^1FMT2_!JMP* ILLREQ_J**MSOS4.0**_^1FMB_"LDA* FMB1+1_(CHECK IF THE PROCESSOR IS PRESENT **MSOS4.0**_^1_%SUB- $11_M**MSOS4.0**_^1_%SAZ FMB2_L**MSOS4.0**_^1FMB1_!JM€€P FRWB_L**MSOS4.0**_^1FMB2 JMP* ILLREQ_K**MSOS4.0**_^1IX_#JMP* INTAV4_J**MSOS4.0**_^1_%JMP* REJCTX_J**MSOS4.0**_^1PARCV4 STA* TEMCV4_J**MSOS4.0**_^1_%STQ* TEMLST_J**MSOS4.0**_^1_%LDA- STS,I_K**MSOS4.0**_^1_%ALS 15_N**MSOS4.0**_^1_%SAM ALSET_(DEVICE IS READY_3**MSOS4.0**_^1_%JMP* STAT2_K**MSOS4.0**_^1ALSET EQU ALSET(*)_H**MSOS4.0**_^1_%LDQ- RTRECV,I_$CHK RECOVERY RETURN_/**MSO€€S4.0**_^1_%SQZ NORECV_'NO RECOVERY_7**MSOS4.0**_^1_%JMP- (ZERO),Q_H**MSOS4.0**_^1NORECV LDA- ERCD,I_J**MSOS4.0**_^1_%ALS 10_+CHK IF MOTION_5**MSOS4.0**_^1_%SAP NOMOT_K**MSOS4.0**_^1_%JMP TPMCTL_J**MSOS4.0**_^1NOMOT EQU NOMOT(*)_H**MSOS4.0**_^1_%ALS 5_,CHK IF LAST_7**MSOS4.0**_^1_%SAP ISREAD_(FUNCTION WAS READ_0**MSOS4.0**_^1_%JMP* NOREAD_J**MSOS4.0**_^1ISREAD LDA- STS,I_(CH€€ECK FOR EOF._^1_%ALS 4_^1_%SAP NEOF_^1_%JMP* EOF_^1NEOF_!EQU NEOF(*)_^1_%RTJ SNRV4_^1_%JMP* NOTSNR_'NOT A SNR_9**MSOS4.0**_^1_%LDQ- MODRTN,I_^1_%JMP- (ZERO),Q_H**MSOS4.0**_^1NOTSNR EQU NOTSNR(*)_^1NOREAD EQU NOREAD(*)_G**MSOS4.0**_^1_%LDQ- STS,I_K**MSOS4.0**_^1_%LRS 7_O**MSOS4.0**_^1_%SAP NOLDA_K**MSOS4.0**_^1_%ENQ 1_O**MSOS4.0**_^1REVR01 STQ- ERRCOD,I_H**MSOS4.0**_^1_%ADQ€€ =N$3030_I**MSOS4.0**_^1_%LDA* REVR05+1_^1_%SUB- $11_M**MSOS4.0**_^1_%SAZ REVR10_J**MSOS4.0**_^1REVR05 RTJ RECOVT_J**MSOS4.0**_^1REVR10 LDQ* TEMCV4_J**MSOS4.0**_^1_%STQ- START,I_I**MSOS4.0**_^1_%LDQ* TEMLST_(ADDRESSES_8**MSOS4.0**_^1_%STQ- STOP,I_J**MSOS4.0**_^1_%JMP* FAILED_J**MSOS4.0**_^1NOLDA LRS 2_O**MSOS4.0**_^1_%SAM YSPRTY_'SKIP IF PARITY ERROR._-**MSOS4.0**_^1_%JMP* NO€€PAR_K**MSOS4.0**_^1YSPRTY EQU YSPRTY(*)_G**MSOS4.0**_^1_%ENQ 3_^1_%JMP* REVR01_J**MSOS4.0**_^1NOPAR EQU NOPAR(*)_H**MSOS4.0**_^1_%LDA- ERCD,I_'CHK 4 READ_8**MSOS4.0**_^1_%AND- ONEBIT_J**MSOS4.0**_^1_%SAZ NOWRIT_'SKIP IF READ_6**MSOS4.0**_^1_%LDA- TCKSUM,I_$SAVE_>**MSOS4.0**_^1_%STA- ECKSUM,I_'CHECKSUM_8**MSOS4.0**_^1NOWRIT EQU NOWRIT(*)_G**MSOS4.0**_^1_%JMP* ONWAY_K**MSOS4.0*€€*_^1EOF_"LDA- TYPE,I_J**MSOS4.0**_^1_%EOR- ONEBIT+14_G**MSOS4.0**_^1_%STA- TYPE,I_J**MSOS4.0**_^1ONWAY LDA* TEMCV4_J**MSOS4.0**_^1_%LDQ* TEMLST_)+ LWA_;**MSOS4.0**_^1_%JMP* NORMRT_'TAKE NORMAL RETURN_0**MSOS4.0**_^1_%SPC 1_^1E1731U LDA SAVEI_(ENTRY FOR I/O HANGUP_-**MSOS 4.1**_^1_%STA- I_^1_%ENA 0_^1_%JMP* FAILED_J**MSOS4.0**_^1_%SPC 3_O**MSOS4.0**_^1TEMCV4 NUM 0_O**MSOS4.0**€€_^1TEMLST NUM 0_O**MSOS4.0**_^1_%SPC 1_^1_%SPC 1_^1REJCTI JMP* INTAV4_J**MSOS4.0**_^1REJCTX ENA 6_,EXTERNAL_:**MSOS4.0**_^1_%JMP* FAILED_J**MSOS4.0**_^1INTAV4 ENA 5_O**MSOS4.0**_^1FAILED STA- ERRCOD,I_H**MSOS4.0**_^1_%LDA- TYPE,I_J**MSOS4.0**_^1_%EOR- ONEBIT+14_^1_%STA- TYPE,I_^1_%LDA- ERCD,I_N65*1398_^1_%AND- ONEBIT+5_$MOTION_@65*1398_^1_%SAZ MFAIL_(NO_D65*1398_^1_%ENA 0_S6€€5*1398_^1_%STA- START,I_%CLEAR MOTION CONTROL WORD_-65*1398_^1MFAIL RTJ MAKEQ_O65*1398_^1_%ENA 1_^1_%LDQ- CONECT,I_$CLEAR CONTROLLER_^1_%OUT 1_^1_%NOP 0_^1_%RTJ+ RLAQ_)RELEASE A/Q CHANNEL_^1_%STQ- I_^1_%LDA- LU,I_)COMPUTE ALTDEV ENTRY PARAMETER_^1_%TRA Q_,DUPLICATE_^1_%QLS 6_^1_%ADQ- ERRCOD,I_$FORM ERR CODE FOR LOG/ALTDEV_^1_%SUB- DIAGLU,I_$MINUS DIAGNOSTIC LOGICAL UNIT_^1_%€€SAZ LOGERR_^1_%LDA- (I)_*GET SCHEDULE REQUEST/PRIORITY LEVEL_^1_%STA* GO_^1_%RTJ+ LOG_*LOG ERROR_^1_%RTJ- ($F4)_(MONITOR CALL_^1GO_#ADC *-*_*SCHEDULE ALTDEV SO WE CAN_^1_%ADC ALTDEV_'RETAIN CONTROL AND PROCESS OTHER UNITS_^1_%JMP* CYCLE_(SEARCH MORE REQUESTS_^1LOGERR RTJ+ LOG_*GO LOG ERR_^1_%JMP* CYCLE-1_%COMPLETE REQUEST ON DIA. LU_^1_%SPC 1_^1NORMRT STA- START,I_%ENTRY FOR €€SUCCESSFUL I/O_^1_%STQ- STOP,I_^1MAKV4 RTJ MAKEQ_K**MSOS4.0**_^1_%RTJ- (COMPRQ)_^1CYCLE LDA- I_^1_%STA* TEMP_^1CYCLE1 LDA- THREAD,I_$PREPARE TO CHECK NEXT TAPE_^1_%STA- I_^1_%LDA- TYPE,I_^1_%AND- ONEBIT+14_#DO NOT PROCESS TAPE WITH_^1_%SAN CYCLE2_^1_%RTJ- (FNR)_O63*1345_^1_%JMP* CYCLE2_'NO REQUEST FOUND_^1_%JMP TAPE6_(GO PROCESS NEW REQUEST_^1CYCLE2 LDA- I_,CHECK TO SEE IF WE €€HAVE_^1_%SUB* TEMP_*CYCLED ALL THE TAPES._^1_%SAZ CYCLE3-*-1_"SKIP IF YES_^1_%JMP* CYCLE1_'GO CHECK NEXT TAPE_^1CYCLE3 RTJ- (FNR)_^1_%NOP 0_^1_%RTJ+ RLAQ_)RELEASE AQ CHANNEL_/**MSOS 4.1**_^1_%LDA- 0_^1_%ADC $1800+ADRPLG-CRXX_^1_%STA CRXX_^1_%STQ- I_,RESTORE PDT ADDRESS_^1_%JMP+ MAS300_'RELEASE DRIVERS BUFFER_+**MSOS 4.1**_^1_%SPC 1_^1TEMP_!BZS TEMP(1)_^1_%SPC 1_^1STATUS NOP €€ 0_O**MSOS4.0**_^1_%LDQ- CONECT,I_H**MSOS4.0**_^1_%INQ 1_,DIR 2_<**MSOS4.0**_^1_%INP REJCTI-*_H**MSOS4.0**_^1_%LLS 13_N**MSOS4.0**_^1_%ALS 1_O**MSOS4.0**_^1_%LLS 2_O**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1_%AND- LOWBTS+3_H**MSOS4.0**_^1_%ALS 12_N**MSOS4.0**_^1_%STA- STS,I_K**MSOS4.0**_^1_%LDQ- CONECT,I_$DIR 1_<**MSOS4.0**_^1_%INP REJCTI-*_H**MSOS4.0**_^1_%AND- LOWBTS+11_G**M€€SOS4.0**_^1_%EOR- STS,I_K**MSOS4.0**_^1_%STA- STS,I_K**MSOS4.0**_^1_%RTJ* EOTCHK_^1_%JMP* (STATUS)_H**MSOS4.0**_^1CKEOP NOP 0_O**MSOS4.0**_^1_%LDQ- CONECT,I_H**MSOS4.0**_^1_%INP REJCTI-*_H**MSOS4.0**_^1_%ALS 11_N**MSOS4.0**_^1_%SAM EOPE_L**MSOS4.0**_^1_%INQ -1_N**MSOS4.0**_^1_%JMP* (CKEOP)_I**MSOS4.0**_^1EOPE_!RAO* CKEOP_K**MSOS4.0**_^1_%RTJ* STATUS_J**MSOS4.0**_^1_%JMP* (CKE€€OP)_I**MSOS4.0**_^1ASVIT NUM 0_^1QSVIT NUM 0_^1*_81-CARD DELETED_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA- EOTFLG,I_^1_%SAN HEREB4_^1_%LDA- STS,I_^1_%AND- ONEBIT+9_$EOT BIT POSITION_^1_%SAN PRTEOT_^1HEREB4 LDA* ASVIT_^1_%LDQ* QSVIT_^1_%JMP* (EOTCHK)_$NO EOT RETURN EXIT_^1PRTEOT EQU PRTEOT(*)_^1_%ENA 1_^1_%STA- EOTFLG,I_^1_%LDQ- CONECT,I_^1_%OUT RE€€JCTX-*_$CLEAR CONTROLLER_^1_%ENA -0_^1_%STA- CLOCK,I_%RESET DIAGNOSTIC CLOCK_^1_%LDA- TYPE,I_^1_%AND- $41_*BFFF_^1_%EOR- $31_*SET BIT 14 WRD8 OF PHYSTAB_^1_%STA- TYPE,I_^1_%JMP* MAKV4_(MAKE-Q PROCESSOR_^1_%SPC 2_^1_%SPC 1_O**MSOS4.0**_^1MOTITR NUM 0_O**MSOS4.0**_^1SKPFLG NUM 0_O**MSOS4.0**_^1_%SPC 1_O**MSOS4.0**_^1TPMCTL LDA* SKPFLG_'CHECK IF MORE THAN ONE OPERATION T **MSOS4€€.0**_^1_%SAZ NOTSKP_'REQUEST. SKIP IF ONE OPERATION DOE **MSOS4.0**_^1_%LDA- STS,I_(MORE THAN ONE NEEDED. CHECK FOR EO **MSOS4.0**_^1_%ALS 4_,TERMINATION CONIDITION._+**MSOS4.0**_^1_%SAM NOTSKP_'SKIP WHEN COMPLETE TO ALLOW ITERAT **MSOS4.0**_^1_%LDQ* SKPFLG_'NOT COMPLETE. USE SAME MOTION CODE **MSOS4.0**_^1_%JMP* MOTV4_K**MSOS4.0**_^1NOTSKP LDA- START,I_I**MSOS4.0**_^1_%SAP SGL€€MOT_'SKIP ID MOTION REQUEST._+**MSOS4.0**_^1_%AND- $E_,$0FFF. SAVE ITERATIONS._***MSOS4.0**_^1_%STA* MOTITR_'SAVE ITERATIONS FOR UPDATING._$**MSOS4.0**_^1_%SAZ ZEROIT_'GO SET DONOTHING REQUEST, ITERATIO **MSOS4.0**_^1_%LDA- START,I_I**MSOS4.0**_^1_%AND- $1E_+$F000. SAVE REQUEST AND ITERATION **MSOS4.0**_^1_%EOR* MOTITR_J**MSOS4.0**_^1_%INA -1_+DECREMENT ITERATIONS._-**MSOS4.0**_^€€1_%STA- START,I_%RESTORE FOR NEXT TIME THROUGH._#**MSOS4.0**_^1_%AND =N$7000_%SAVE MOTION CODE._1**MSOS4.0**_^1_%ENQ 0_O**MSOS4.0**_^1_%LLS 4_O**MSOS4.0**_^1_%JMP* TSTCOD_J**MSOS4.0**_^1ZEROIT STA- START,I_I**MSOS4.0**_^1_%STA* SKPFLG_'READY SKIP FLAG FOR NEST TIME THRO **MSOS4.0**_^1SGLMOT ENQ 0_O**MSOS4.0**_^1_%STQ* SKPFLG_'CLEAR SKIP FLAG NOT ITERATION REQU **MSOS4.0**_^1_%L€€LS 4_^1_%STA- START,I_%UNPACK A PARAMETER AND ENTER A_^1TSTCOD INQ -8_+CHECK FOR LEGAL MOTION CODE._%**MSOS4.0**_^1_%SQM CODEOK_'MUST NOT BE LARGER THAN SEVEN._#**MSOS4.0**_^1_%JMP ILLREQ_'ILLEGAL. FAIL OPERATION._***MSOS4.0**_^1CODEOK INQ 8_O**MSOS4.0**_^1MOTV4 JMP* TPMTBL,Q_H**MSOS4.0**_^1_%SPC 1_^1DONOTH LDA- ERCD,I_'CLEAR MOTION INDICATOR_^1_%AND- ZROBIT+5_$CLEAR MOTIN B€€IT_3**MSOS4.0**_^1_%STA- ERCD,I_^1_%ENA 0_S65*1398_^1_%STA- START,I_%CLEAR MOTION CONTROL WORD_-65*1398_^1_%JMP MAKV4_^1_%SPC 1_^1BSPR_!LDA =N$188_'SET MOTION CODE._2**MSOS4.0**_^1_%LDQ- STS,I_(CHECK FOR LOAD POINT._^1_%QLS 5_O**MSOS4.0**_^1_%SQP TPM1B_(SKIP IF NOT LOAD POINT._+**MSOS4.0**_^1TPM1AA ENQ -1_,LOAD POINT, CLEAR TIME OUT DELAY._^1_%STQ- CLOCK,I_I**MSOS4.0**_^1_%LD€€Q* SKPFLG_'CHECK FOR ITERATIONS._-**MSOS4.0**_^1_%SQZ NOCNT_(SKIP IF NOT ITERATIONS._+**MSOS4.0**_^1_%ENQ 0_,IF ITERATIONS IT MUST BE SAME TYPE **MSOS4.0**_^1_%STQ* SKPFLG_'CLEAR SKIP FLAG._2**MSOS4.0**_^1_%STQ- START,I_%SET DONOTHING REQUEST._,**MSOS4.0**_^1NOCNT JMP* TPMCTL_J**MSOS4.0**_^1TPM1B ENQ T1_+SET TIME OUT DELAY._/**MSOS4.0**_^1*_81 CARD DELETED_^1_%SPC 2_O**MSOS4.€€0**_^1*_*THE FOLLOWING IS A GENERAL PURPOSE TAPE MOTION **MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1TPM1_!STA* TEMP_)SAVE MOTION CODE._1**MSOS4.0**_^1_%STQ* TEMP2_(SAVE TIMEOUT DELAY_^1_%RTJ* CKBUSY_^1_%LDA* TEMP_^1_%OUT R-*_M**MSOS4.0**_^1_%ALS 12_^1_%SAP TPM2-*-1_$SKIP IF END OF OP. NOT SELECTED_^1_%LDQ* TEMP2_^1_%STQ- CLOCK,I_%SET TIMEOUT DELAY_^1_%LDA- I_^1_%STA* SAVEI_(SAVE PHY€€STB LOC. OF TAPE_^1_%JMP- (DISP)_^1TPM2_!RTJ* CKEOP_(CHECK FOR END OF OPERATION_^1_%JMP* NOEOP_(NO END OF OPERATION FOUND_^1_%JMP* TPMCTL_'END OF OPERATION FOUND_^1NOEOP ALS 4_^1_%SAP TPM3-*-1_$SKIP IF DEVICE NOT READY_^1_%JMP* TPM2_)ASSUME UNLOAD_^1TPM3_!RTJ STATUS_^1_%JMP* TPMCTL_J**MSOS4.0**_^1_%SPC 1_^1MARKEF LDA =N$288_'ENTERRED TO WRITE END OF FILE_^1_%ENQ T2_+SET HANG€€UP DELAY TIME_^1*_81 CARD DELETED_^1_%JMP* TPM1_^1_%SPC 1_^1REWIND LDA =N$408_'ENTERRED FOR REWIND_^1*_82 CARDS DELETED_^1_%LDQ- STS,I_^1_%QLS 5_,CHECK FOR LOAD POINT_^1_%SQP REW1_^1_%JMP* TPM1AA_(LOAD POINT_^1REW1_!LDQ =XT3_^1_%JMP* TPM1_)NOT LOAD POINT_^1_%SPC 1_^1UNLOAD ENA 0_,ENTERRED FOR UNLOAD_^1_%STA- START,I_%STOP FURTHER MOTION REQUESTS_^1_%LDA =N$600_^1_%JMP* TPM1€€_^1_%SPC 1_^1_%SPC 2_^1C1731U LDA* SAVEI_(CONTINUATOR_6**MSOS 4.1**_^1_%STA- I_,RESTORE I REGISTER_^1_%ENA 2_^1_%LDQ- CONECT,I_^1_%OUT R-*_^1_%ENQ -1_+RESET DIAGNOSTIC CLOCK_^1_%STQ- CLOCK,I_^1_%LDQ- RTRECV,I_H**MSOS4.0**_^1_%SQZ NOTER_K**MSOS4.0**_^1_%JMP- (ZERO),Q_H**MSOS4.0**_^1NOTER JMP* TPM2_L**MSOS4.0**_^1_%SPC 1_^1SAVEI BZS SAVEI(1)_^1_%SPC 1_^1TPMTBL JMP* DONOTH_€€^1_%JMP* BSPR_^1_%JMP* MARKEF_^1_%JMP* REWIND_^1_%JMP* UNLOAD_^1_%JMP* SKEOFF_'SKIP FILE MARK FORWARD._+**MSOS4.0**_^1_%JMP* SKEOFB_'SKIP FILE MARK BACKWARD._***MSOS4.0**_^1_%JMP* SKRECF_'SKIP RECORD FORWARD._.**MSOS4.0**_^1SKRECF RTJ CKBUSY_'CHECK UNIT FOR BUSY._.**MSOS4.0**_^1*_82 CARDS DELETED_^1_%LDA =N$108_'SET MOTION DIRECTION AND EOP INTER **MSOS4.0**_^1_%OUT R-*_*START M€€OTION._5**MSOS4.0**_^1_%ENA T1_^1_%STA- CLOCK,I_^1_%LDA- I_,SAVE PHYSTB ENTRY ADDRESS._(**MSOS4.0**_^1_%STA* SAVEI_K**MSOS4.0**_^1_%JMP- (DISP)_'EXIT AND WAIT FOR EOP._,**MSOS4.0**_^1SKEOFF STQ* SKPFLG_'SAVE CODE USED AND SET EOF TERMINA **MSOS4.0**_^1_%JMP* SKRECF_'GO ISSUE FUNCTION._0**MSOS4.0**_^1SKEOFB STQ* SKPFLG_'SAVE CODE USED AND SET EOF TERMINA **MSOS4.0**_^1_%JMP* BSPR_)€€PROCESS MOTION REQUEST._+**MSOS4.0**_^1_%SPC 2_^1TEMP2 BZS TEMP2(1)_^1_%SPC 2_^1CKBUSY NOP 0_^1_%LDQ- CONECT,I_^1CKU_"INP R-*_^1_%ALS 14_^1_%SAP CKA_^1_%JMP* CKU_^1CKA_"RTJ EOTCHK_^1_%JMP* (CKBUSY)_^1_%SPC 2_^1R_$JMP* REJT_L**MSOS4.0**_^1_%JMP REJCTX_J**MSOS4.0**_^1REJT_!JMP REJCTI_J**MSOS4.0**_^1SNRV4 EQU SNRV4(*)_^1NOISCK NOP 0_O**MSOS4.0**_^1_%LDA TEMCV4_J**MSOS4€Μ.0**_^1_%SUB- START,I_I**MSOS4.0**_^1_%INA -NOISLN_I**MSOS4.0**_^1_%SAZ NOISE_K**MSOS4.0**_^1_%SAP NONOIS_J**MSOS4.0**_^1NOISE RAO* NOISCK_J**MSOS4.0**_^1NONOIS JMP* (NOISCK)_H**MSOS4.0**_^1_(END_^__ ΜPD1732B CSY/ A33 P€1_%NAM D1732B_'DECK-ID A33 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_*1732-1 BUFFERED 608/609 DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1*_*LOW ORDER BITS MASK_^1_%EQU LOWBTS($3)_^1*_*HIGH ORDER BITS MASK_^1_%EQU HIHBTS($12)_^1*_*LOCATION CONTAINING ZERO€€_^1_%EQU ZERO($22)_^1*_*INDIVIDUAL BIT MASK_^1_%EQU BITMSK($23)_^1*_*BIT EXCLUSION OR RESET MASK_^1_%EQU ZROBIT($33)_^1*_*ADDRESS CONTAINING FIND NEXT REQUEST_^1_%EQU FNR($B5)_^1*_*ADDRESS CONTAINING COMPLETE REQUEST_^1_%EQU COMPRQ($B6)_^1*_*ADDRESS CONTAINING COMMON INTERRUPT HANDLER_^1_%EQU MONI($F4)_^1*_*ADDRESS CONTAINING DISPATCHER_^1_%EQU DISP($EA)_^1_%EQU SLCT(1),IO(€€-1)_^1_%EJT_]_^1*_*PHYSICAL DEVICE TABLE LAYOUT_^1*_$REFER TO MASS STORAGE OPERATING SYSTEM 4.1 REFERENCE MANUAL_^1*_*DIAGNOSTIC CLOCK_^1_%EQU EDCLK(4)_^1*_*LOGICAL UNIT NUMBER ASSIGNED_^1_%EQU ELU(5)_^1*_*REQUEST PARAMETER LIST LOCATION_^1_%EQU EPTR(6)_^1*_*HARDWARE EQUIPMENT CODE FOR STATUS_^1_%EQU EWES(7)_^1*_*REQUEST STATUS BITS_^1*_*BITS 4-10, EQUIPMENT TYPE, =24 FOR 608, €€=25 FOR 609_^1*_*BITS 11-14, EQUIPMENT CLASS, =3_^1_%EQU EREQST(8)_^1*_*STATUS WORD NUMBER 1_^1_%EQU ESTAT1(9)_^1*_*CURRENT LOCATION IN DRIVER_^1_%EQU ECCOR(10)_^1*_*LAST WORD+1 OF BUFFER_^1_%EQU ELSTWD(11)_^1*_*LAST EQUIPMENT STATUS, SEE ERS_^1_%EQU ESTAT2(12)_^1*_*UNIT AND MODE SELECT CODE_^1_%EQU UNTMOD(16)_^1_%EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_***MSOS 4.1**_^1*_$TE€€MP STORAGE_^1_%EQU ETEMP2(18)_^1RTRECV EQU RTRECV(19)_M0226_^1ECKSUM EQU ECKSUM(20)_F**MSOS4.0**_^1ERDIRC EQU ERDIRC(21)_F**MSOS4.0**_^1TCKSUM EQU TCKSUM(22)_F**MSOS4.0**_^1_%EQU ELINK(23)_#PHYSTAB THREAD_3**MSOS 4.1**_^1_%EQU PHSREC(24)_"MAX PHYS REC SIZE FOR 7 TRACK_)MSOS4.1_^1_%EQU ABUFF(25)_#ADDR OF PACK/UNPACK BUFFER (7 TRACK) MSOS4.1_^1EOTFLG EQU EOTFLG(26)_"END-OF€€-TAPE FLAG_^1NOISLN EQU NOISLN(2)_#SPECIFIES WORD LENGTH OF RECORD TO_!72*1609_^1*_8BE DISCARDED AS NOISE_/72*1609_^1TERM_!EQU TERM($43)_N0309_^1STOLSW EQU STOLSW($1F)_L0309_^1WRITFM EQU WRITFM($30)_L0305_^1_%SPC 2_O**MSOS4.0**_^1*_82 CARDS DELETED_572*1609_^1TRYNBR EQU TRYNBR(50)_"NUMBER OF RECOVERY RETRIES._'**MSOS4.0**_^1_%EXT MAS300_^1_%EXT REWCK_^1_%ENT I1732B,C1732B,€€E1732B_;**MSOS 4.1**_^1_%EXT COMPV4_J**MSOS4.0**_^1_%EXT RQ1706_'REQUEST 1706_5**MSOS 4.1**_^1_%EXT RL1706_'RELEASE 1706_5**MSOS 4.1**_^1_%EXT LOG_L**MSOS 4.1**_^1_%EXT ALTDEV_^1_%EJT_]_^1I1732B RTJ* HERE_)LOCALIZE_9**MSOS 4.1**_^1_%EQU LOC(*)_^1HERE_!NUM 0_^1_%STQ- I_^1*_$NOTE% THE NEXT INSTRUCTION IS CHANGED BY DRIVER_^1*_,TO =JMP* ADRPLG= BEFORE EXIT TO MAS300_^1CRXX_!LD€€Q- (ZERO),Q_F3.0 47*685_^1*_8REDEFINE REQUEST WORD OF EACH SCHED REQ TO_^1_%STQ XXX+1_(REFLECT LEVEL_^1_%STQ UPIT+1_^1_%STQ S2+1_^1*_81 CARD DELETED_665*1396_^1_%LDQ* LOC_^1_%ENA TAPINI-LOC_^1_%AAQ A_^1_%STA* ADRINI_'STORE ADDRESS OF INITIATOR_^1_%LDA =XC1732B-LOC_C**MSOS 4.1**_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA* ADRCON_'STORE ADDRESS OF CONTINUATOR_^1_%LDA =XE1732B-LOC_€€C**MSOS 4.1**_^1_%AAQ A_,INCREMENT + BASE_^1_%STA* ADRHNG_'STORE ADDRESS OF TIMEOUT_^1_%LDA =XWAIT-LOC_"CALCULATE ABSOLUTE_^1_%AAQ A_-ADDRESSES OF ALL REQUESTS._^1_%STA DOWNWT+2_)*_^1*_83 CARDS DELETED_^1_%LDA =XBSYWAT-LOC_$*_^1_%AAQ A_0*_^1_%STA S1+2_-*_^1_%LDA =XNOBUSY-LOC_$*_^1_%AAQ A_0*_^1_%STA S2+2_-*_^1*_83 CARDS DELETED_565*1396_^1_%LDA =XCONSEL-LOC_^1_%AAQ A_0*_€€^1_%STA UPIT+2_+*_^1_%LDQ- I_^1ADRPLG LDA- 0_^1ADRINI ADC TAPINI_^1_%STA- 1,Q_*STORE ADDRESS OF INITIATOR IN PHYSTB_^1_%LDA- 0_^1ADRCON ADC C1732B_^1_%STA- 2,Q_*STORE ADDRESS OF CONTINUATOR IN PHYSTB_^1_%LDA- 0_^1ADRHNG ADC E1732B_^1_%STA- 3,Q_*STORE ADDRESS OF TIMEOUT IN PHYSTB_^1_%LDA- ELINK,Q_%PICK UP ADDRESS OF NEXT PHYSTB_^1_%TRA Q_^1_%SUB- I_^1_%SAZ TAPINI_'SKIP IF DONE€€_^1_%JMP* ADRPLG_'GO BACK AND SET UP NEXT PHYSTB_^1TAPINI STQ- I_^1_%LDA =N0_^1_%EQU BUSY(*-1),LSTPT(*-1)_^1_%SAZ NOTBSY_Q0308_^1_%JMP- (DISP)_Q0308_^1ERRCNT NUM 0_^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- E€€STAT1,I_$GET BIT 5_@0308_^1_%AND- BITMSK+5_O0308_^1_%SAZ FIND_S0308_^1*_83 CARDS DELETED_^1_%LDA* RW_^1_%INA -1_^1_%STA* RW_^1*_83 CARDS DELETED_^1_%LDA- I_^1_%STA* LSTPT_(UPDATE PDT POINTER_^1_%JMP TAPC2_(GET NEXT MOTION PARAMETER_^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_%RTJ+ RQ€€1706_'REQUEST 1706_5**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^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_^1NXTPT LDA- ELINK,I_%GET NEXT PHYSTB_^1_%STA- I_^1_%EOR* LSTPT_^1_%SAZ EXIT_S0308_^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- RTRECV,I_$CLEAR RECOVERY RETURN_^1_%STA* BUSY_)SET DRIVER NOT BUSY_^1_%LDA- 0_^1_%ADC $1800+ADRPLG-CRXX_^1_%STA CRXX_^1_%RTJ+ RL1706_'RELEZSE 1706_5**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_(LDA*_$RW_^1_%SAN EXIT2_R0308_^1_%LDA* MS300_(ADDRESS MASDRV EXIT_.**MSOS 4.1**_^1_%EOR€€- LOWBTS+14_F**MSOS 4.1**_^1_%SAZ CALDSP_I**MSOS 4.1**_^1_%JMP+ MAS300_'RELEASE BUFFER_3**MSOS 4.1**_^1MS300 EQU MS300(*-1)_E**MSOS 4.1**_^1_%EQU EXIT2(*)_^1CALDSP JMP- (DISP)_I**MSOS 4.1**_^1ZEROWD ENA 31_+ZERO WORDS ERROR_668*1517_^1_%JMP FAILED_N68*1517_^1_%SPC 5_^1_%EQU XFER(*)_^1_%CLR A_^1_%RTJ UNTSEL_'GO SELECT AND STATUS_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+14_#€€BIT 14_C0308_^1_%SAZ M609_S0308_^1_%JMP* M608_S0308_^1RW_%NUM_%0_^1M609_!LDA- ECCOR,I_^1_%STA FWA_*SET FWA TO USERS BUFR_^1_%SUB- ELSTWD,I_^1_%TCA A_Q72*1609_^1_%INA -NOISLN-1_#LOGIC REC.LT.NOISE REC_.72*1609_^1_%SAP 1_Q72*1609_^1_%JMP* ZEROWD_'YES._^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* WREC1_R0329_^1_%SPC 5_^1_%JMP* M608_N72*1609_^1PRUCMP NUM 0_Q72*1609_^1_%LDA- PHSREC,I_$PHYSICAL RECORD SIZE_^1_%STA* PRUSZ_(PRUSIZE_=72*1609_^1TRYAGN ENQ 0_Q72*1609_^1_%LDA* NUMBR_(LOGIC RECORD SIZE DIVIDED BY_(72*1609_^1_%DVI* PRUSZ_(PRU SIZE_<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_372*1609_^1_%INA -NOISLN-1_#DECR PRUSZ BY NOISE-1_/72*1609_^1_%STA* PRUSZ_M72*1609_^1_%JMP* TRYAGN_'TRY REMAINDERING AGAIN_.72*1609_^1LEAVE LDA* PRUSZ_M72*1609_^1_%STA* NUMBR_(SIZE OF SEGMENT RECORDS_-72*1609_^1_%JMP* (PRUCMP)_J72*1609_^1PRUSZ NUM 0_Q72*1609_^1M608_!€€LDA- ABUFF,I_%ADDRESS OF PACK/UNPACK BUFFER_^1_%STA FWA_*SET FWA TO FIRST ALLOC_^1_%LDA- ELSTWD,I_$LAST ADDRESS_^1_%SUB- ECCOR,I_%FIRST ADDRESS_^1_%INA -NOISLN-1_#LOGIC REC.LT.NOISE RECORD_+72*1609_^1_%SAP 1_Q72*1609_^1_%JMP* ZEROWD_'YES._^1_%INA NOISLN+1_J72*1609_^1_%STA* NUMBR_(NUMBER WORDS TO TRANSFER_^1_%LDA- PHSREC,I_$PHYSICAL RECORD SIZE_^1_%SUB =N0_^1_%EQU NUMBR(*-1)_^€€1_%SAP NUMOK_(NUMBER WORDS LESS THAN OR EQUAL PHYSICAL REC._^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+1_^1_%SAZ UNF608_'SKIP IF UNFORMATTED REQUEST_^1_%LDA- PHSREC,I_^1_%STA* NUMBR_(SET LENGTH TO PHYSICAL RECORD SIZE_^1_%JMP* NUMOK_^1UNF608 RTJ* PRUCMP_'CHECK IF LAST PRU.LT.NOISE RECORD_^1NUMOK LDA- ESTAT1,I_O0311_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAN LWACAL_Q0308_^1_%LDA* NUMBR_^1_%M€€UI- 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_D03€€08_^1_%SAZ RREC_S0308_^1RASC_!ENA 2_^1_%STA* PRITYC_^1_%ENA 0_^1RREC_!JMP* WREC1_^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_%RTJ* UNPK_)GO CONVERT BINARY TO ASSM/DISM_^1_%JMP* WREC_^1WASC_!RTJ* ASCBCD_'WRITING ASC2 CONVERT TO BCD_^1_%ENA 2_^1_%STA* PRITYC_'SET PARITY CODE FOR EVEN_^1WREC€€_!EQU WREC(*)_P0329_^1_%RTJ CHKSUM_'GO CHECK SUM RECORD 1ST 16_/0308_^1_%STA- TCKSUM,I_^1_%ENA 1_V0329_^1WREC1 STA* MOTIDX_Q0329_^1_%SPC 5_^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_D0308_^1_%SAZ IOCONT_Q0308_^1_%RTJ RINGCK_^1IOCONT LDA- EOTFLG,I_$END-OF-TAPE FLAG_^1_%SA€€Z NOCHNG_^1_%ENA -$10_^1_%JMP* IOCON1_^1NOCHNG ENA -0_^1IOCON1 LDQ* MOTIDX_^1_%AND* RWMOTN,Q_^1_%STA* FUNCT1_'SET FUNCTION CODES_^1_%LDA* MOTONQ,Q_#Q CODE FOR READ/WRITE_^1_%ADD- EWES,I_^1_%STA* FUNCT2_^1_%LDQ- EWES,I_^1_%LDA- HIHBTS+11_^1_%LAQ Q_^1_%ADQ =X$1800_^1_%STQ* FUNCT3_^1_%LDQ* FWA_^1_%INQ -1_^1_%STQ* FWADR_^1_%LDA- (ZERO),Q_^1_%STA* SAVFWA_^1_%LDA* LWA_^1_%IIN 0_,S€€TORE_!LWA+1 IN FWA-1_^1_%STA- (ZERO),Q_^1_%LDQ- EWES,I_^1_%LDA =N0_^1_%EQU FUNCT1(*-1)_^1_%OUT BUFREJ-*_^1_%LDQ =N0_^1_%EQU FUNCT2(*-1)_^1_%LDA =N0_*FIRST WORD ADDRESS MINUS ONE_^1_%EQU FWADR(*-1)_^1_%OUT BUFREJ-*_^1_%LDQ =N0_^1_%EQU FUNCT3(*-1)_^1NMARD INP BUFREJ-*_^1_%SUB* FWA_*DIFFERENCE NMA,FWA_^1_%SAP 1_Q70*1611_^1_%JMP* NMARD_^1_%LDA =N0_*GET SAVED FWA-1 CONTENTS€€_^1_%EQU SAVFWA(*-1)_^1_%LDQ* FWA_*FIRST WORD ADDRESS_^1_%INQ -1_+MINUS 1_^1_%STA- (ZERO),Q_$RESTORE CONTENTS OF FWA-1_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%ENA 10_^1_%STA- EDCLK,I_^1_%JMP- (DISP)_^1_%SPC 1_^1_%EQU INC06($800)_^1MOTONQ ADC 3*INC06+IO_"READ Q CODE_^1_%ADC 2*INC06+IO_"WRITE Q CODE_^1BUFREJ JMP* BB_^1_%ENA 6_^1BA_#STA- ETEMP2,I_^1_%LDA* SAVFWA_^1_%LDQ* FWADR_^1_%ST€€A- (ZERO),Q_$RESTORE FWA-1_^1_%JMP FAILED+1_^1BB_#ENA 5_^1_%JMP* BA_^1RWMOTN NUM $10B_)READ,ZOP,CLRINT/CON_^1_%NUM $9B_)WRITE,ALARM,EOP,CLR INT,CLR_*58*1131_^1MOTIDX NUM 0_,AN INDEX INTO RWMOTN_^1PRITYC NUM 1_,PARITY CODE_^1_%SPC 5_^1ASCBCD NUM 0_,ASC TO BCD PREP_^1_%LDA* FWA_^1_%STA* CURR_^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_^1AQGET NUM 0_^1_%LDQ* FWA_^1_%TRQ A_,INTO A_^1_%TCQ Q_,COMPLEMENT_^1_%ADQ* LWA_^1_%JMP* (AQGET)_^1_%SPC 5_^1UNPK_!NUM 0_,ENTRY FOR BINARY TO A€€SSEM/DISASSEM_^1_%LDA* FWA_*FOR BINARY WRITES ON 608_^1_%STA* CURR_)INITIALIZE CURRENT STORAGE LOCATION_^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_^1GETFST NUM 0_^1_%STQ* QSAV+1_'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_^1QSAV_!LDQ =N0_*RESTORE Q_^1_%RAO- ECCOR,I_%TALLY CURRENT ADDRESS_^1_%JMP* (GETFST)_^1STRDAT 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_^1CURR_!NUM 0_^1FWA_"NUM 0_^1LWA_"NUM 0_^1SAVLWA NUM 0_V0308_^1SAVEIT NUM 0_Q72*1658_^1_%SPC 5_^1IN_#NUM 0_,RETURN ADDRESS OF IN SUBROUTINE_^1_%INP INRJT-*_^1_%JMP* (IN)_)RETURN_^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_%OUT INRJT-*_^1_%JMP* (OUT)_(RETURN_^1_%SPC 5_^1UNTSEL NUM 0_^1_%ADD- UNTMOD,I_$ADD UNIT AND MODE SELECT BITS_^1_%STA* CONCOD_^1_%LDQ- EWES,I_^1_%RTJ* IN_^1_%ALS 3_,CONTROLLER ACTIVE IN A15_^1_%SAP SLTIT_(CONTROLLER NO€€T ACTIVE_^1_%LDQ- I_,BUSY PASS PHYSTB ADDR_^1*_]_^1*_$SCHDLE WAIT,4,0,D_^1*_]_^1DOWNWT RTJ- ($F4)_(WAIT FOR CONTROLLER TO GO NOT ACTIVE._^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,N4/4_^1_%NUM 0_^1_%JMP- (DISP)_^1CONCOD NUM 0_^1CONSEL STQ- I_,THIS LOC SCHEDLED BY WAIT, CONT NOT ACT_^1_%LDQ- EWES,I_^1SLTIT INQ 1_^1_%LDA* CONCOD_^1_%RTJ* OUT_^1_%RTJ* STATUS_'UPDATE STATUS_^1_%JMP* (UNTSE€€L)_$RETURN TO USER_^1_%SPC 5_^1STATUS NUM 0_,READ STATUS 1, 2 AND STORE IN ESTAT2_^1_%LDQ- EWES,I_^1_%INQ SLCT_)CODE TO READ STATUS 2_^1_%RTJ* IN_+READ STATUS 2_^1_%LLS 13_^1_%ALS 1_,WASTE BIT_^1_%LLS 2_,4 STATUS BITS IN Q_^1_%TRQ A_^1_%AND- LOWBTS+3_$MASK 4 BITS_^1_%ALS 12_+LEFT JUSTIFY_^1_%STA- ESTAT2,I_^1_%LDQ- EWES,I_^1_%RTJ* IN_+READ STSUS 1_^1_%AND- LOWBTS+11_#MASK 1€€2 LOW BITS_^1_%ADD- ESTAT2,I_$COMBINE WITH STATUS 2_^1_%STA- ESTAT2,I_^1_%AND- BITMSK+9_^1_%SAZ RESTR1_'NO EOT SET_^1_%LDA- EOTFLG,I_$EOT FLAG SET YET_^1_%SAZ RESTR2_'NO,NOT SET YET GO PROCESS IT_^1_%LDA- ESTAT2,I_^1_%EOR- BITMSK+9_$CLEAR OUT EOT BIT_^1_%STA- ESTAT2,I_^1_%JMP* CONTUE_^1RESTR1 ENA 0_^1_%STA- EOTFLG,I_$IF BACK-SPACING OVER EOT_^1RESTR2 LDA- ESTAT2,I_$RESTORE STATU€€S WORD_^1CONTUE EQU CONTUE(*)_^1_%RTJ* EOTCHK_^1_%JMP* (STATUS)_^1ASVIT NUM 0_^1QSVIT NUM 0_^1*_81-CARD DELETED_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA- EOTFLG,I_^1_%SAN HEREB4_^1_%LDA- ESTAT2,I_^1_%AND- BITMSK+9_$EOT BIT POSITION_^1_%SAN PRTEOT_^1HEREB4 LDA* ASVIT_^1_%LDQ* QSVIT_^1_%JMP* (EOTCHK)_$NO EOT RETURN_^1PRTEOT EQU PRTEOT(*)_^1_%ENA 1_^€€1_%STA- EOTFLG,I_$SET EOT FLAG_^1_%LDQ- EWES,I_^1_%RTJ* OUT_*CLEAR CONTROLLER_^1_%ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%LDA- EREQST,I_^1_%AND- $41_*BFFF_^1_%EOR- BITMSK+14_#SET ERROR BIT 14 WRD 8 OF PHYSTB_^1_%STA- EREQST,I_^1_%JMP CMPRD_^1_%EJT_]_^1C1732B STQ- I_,CONTINUATOR_6**MSOS 4.1**_^1_%LDQ- EWES,I_^1_%LDA- HIHBTS+11_#MASK_"CONVERTER CODE_^1_%LAQ Q_^1_%ADQ- €€BITMSK+11_#TERMINATE THE BUFFER_^1_%RTJ* IN_^1_%LDQ LSTPT_(CHECK FOR GHOST INT AND SET LAST_^1_%SQN TAPC06_'PHYSTB ADDRESS. SKIP IF NO GI._^1_%JMP* TAPC2_(GI, GO CLEAR INTS. AND OUTPUT MSG.._^1TAPC06 STQ- I_^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_^1TAPC03 LDA* LWA_M**MSOS4.0**_^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_%INA 0_O**MSOS4.0**_^1_%SAN TAPC1_K**MSOS4.0**_^1TA€€PC01 LDQ- EWES,I_'CLEAR INTERRUPTS._1**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ* OUT_M**MSOS4.0**_^1_%ENA 37_N**MSOS4.0**_^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* TAPC01_'YES._>**MSOS4.€€0**_^1TAPC2 LDQ- EWES,I_'NO._?**MSOS4.0**_^1*_82 CARDS DELETED_^1_%LDA LSTPT_^1_%SAN EXPECT_'EXPECTED INTERRUPT_^1_%ENA 2_^1_%OUT 1_,CLEAR INTERRUPTS_^1_%NOP 0_^1_%JMP EXIT_)NO EXPECT, GO RELEASE CHANNEL/BUFFER_^1EXPECT STA- I_^1_%ENA 2_^1_%RTJ OUT_*CLEAR INTERRUPT_^1_%ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%RTJ STATUS_^1_%LDQ- ESTAT2,I_^1_%LRS 1_^1_%SAM RE€€DY_S0308_^1NORDY ENA 14_^1_%JMP FAILED_^1REDY_!EQU REDY(*)_P0226_^1_%LDA- RTRECV,I_$CHK 4 RECOVERY I/O_70226_^1_%SAZ REDY1_(SKIP IF NOT RECOV_80226_^1_%STA* REDY3_(SET RECV RETN_<0304_^1REDY2 JMP REDY1_(EXIT TO RECOV_<0226_^1REDY3 EQU REDY3(*-1)_M0304_^1REDY1 LDA- ESTAT1,I_$CHK MOTION REQ._:0226_^1_%ALS 10_+MOTION BIT IN A15_^1_%SAP NOMO1_R0308_^1_%JMP NXTMOT_'EXCUTE N€€EXT MOTION_70308_^1NOMO1 EQU NOMO1(*)_O0226_^1_%ALS 5_,CHK 4 READ_?0226_^1_%SAP 1_^1_%JMP* NOMO2_^1_%LDA- ESTAT2,I_^1_%ALS 4_^1_%SAP NOEF_^1_%RTJ* ATEOFM_'FILE MARK STATUS SET, GO PROCESS IT_^1_%LLS 15_+SHIFT STATUS INTO Q FOR NEXT CHECKS_^1NOEF_!EQU NOEF(*)_^1*_810 CARDS DELETED_472*1131_^1NOMO2 LRS 6_,CHK 4 LOST DATA_:0226_^1_%SAP NOMO3_(NO LOST DATA_=0226_^1_%ENA 1_^€€1_%JMP RECVR_R0226_^1NOMO3 LRS 2_,CHK 4 PARITY_=0226_^1_%SAM YESPRI_^1_%JMP* NOPAR_^1YESPRI EQU YESPRI(*)_^1_%ENA 3_^1_%JMP RECVR_(EXIT TO RECOVERY_90226_^1_%EQU NOPAR(*)_^1_%LDA FWA_O72*1131_^1_%STA* SNRADR_L72*1131_^1_%LDA LWA_O72*1131_^1_%RTJ SNRCHK_'CHECK FOR SNR_772*1131_^1_%JMP* RECV2_(NOT SNR_=72*1131_^1IODO_!LDA SAVLWA_M72*1131_^1_%STA LWA_O72*1131_^1_%JMP IOXF€€ER_L72*1131_^1RECV2 LDA- ESTAT1,I_J72*1131_^1_%AND- BITMSK+0_^1_%SAZ NOWRIT_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_^1NOWRIT EQU NOWRIT(*)_^1_%LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK STATUS 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_^1_%EQU READC(*)_^1_%LDA- ESTAT2,I_^1_%ALS 4_,FILE MARK STATUS IN A15_^1_%SAP TNOFIL_^1_%RTJ* ATEOFM_^1TNOFIL JMP* NOFILE_^1ATEOFM NOP 0_,CHECK FOR REAL FILE MARK_^1_%LDA LWA_^1_%SUB FWA_^1_%INA -2_^1_%SAP NOEFM_(SKIP IF MORE THAN ONE WORD READ_^1_%LDQ- EWES,I_^1_%RTJ IN_+GET STATUS 1_^1_%AND- BITMSK+13_^1_%SAZ NOEFM_(SKIP IF FILL STATUS NOT SET_^1_%J€€MP* ATEOF_^1NOEFM LDA- ESTAT2,I_^1_%AND- ZROBIT+11_^1_%STA- ESTAT2,I_$CLEAR FILE MARK STATUS_^1_%JMP* (ATEOFM)_^1ATEOF LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_C0308_^1_%STA- EREQST,I_O0308_^1_%JMP* CMPRD_^1_%EQU NOFILE(*)_^1_%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_%SAM BCDASC_Q030€€8_^1_%LDA- ECCOR,I_^1_%STA* SNRADR_^1_%RTJ* PACK_)GO CONVERT TO STRAIGHT BINARY_^1_%LDA- ECCOR,I_^1_%RTJ* SNRCHK_^1_%JMP* WRITEC_^1_%LDA* SNRADR_^1_%STA- ECCOR,I_^1_%JMP IODO_^1*_81 CARD DELETED_668*1558_^1_%SPC 5_^1BCDASC RTJ AQGET_^1_%RTJ BCD2A_(CONVERT_^1_%LDA FWA_^1_%STA CURR_)INITIALIZE CURRENT_^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_*CHECK FOR BUFFER COMPLETE_^1_%SAZ 2_S70*1558_^1_%JMP* BCDLOP_'MORE TO TRANSFER_^1SNRADR NUM 0_S68*1558_^1_%EQU WRITEC(*)_^1_%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_%J€€MP XFER_S0308_^1_%EQU COMPL(*)_^1READCK LDA- ESTAT1,I_^1_%AND- BITMSK+5_^1_%SAN COMPLT_Q0308_^1_%EXT MAKEQ_^1CMPRD RTJ MAKEQ_^1COMPLT RTJ- (COMPRQ)_$COMPLETE THE REQUEST_^1_%RTJ+ RL1706_'RELEASE 1706_5**MSOS 4.1**_^1_%STQ- I_,RESTORE Q_8**MSOS 4.1**_^1_%JMP FIND_^1PACK_!NUM 0_,ENTRY FOR ASSEM/DISASSEM TO BINARY_^1_%LDA FWA_^1_%STA CURR_^1NXTGET RTJ* GETFWA_'GO GET FROM FW€€A 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 REQUESTOR-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 BIT€€S_^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_^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)_$RE€€TURN_^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_$STORE DATA_^1_%LDA =N0_^1_%EQU QSAV1(*-1)_^1_%CLR Q_^1_%RAO- ECCOR,I_%TALLY STORAGE LOCATION_^1_%JMP* (STRFST)_^1SNRCHK EQU SNRCHK(*)_G**MSOS4.0**_^1NOISCK NOP 0_V0311_^1_%SUB* SNRADR_^1_%INA -NOISLN_P0226_^1_%€€SAZ NOISE_R0226_^1_%SAP NONOIS_Q0308_^1NOISE RAO* NOISCK_Q0308_^1NONOIS JMP* (NOISCK)_O0308_^1_%SPC 2_O**MSOS4.0**_^1SNR_"NUM $2D2E_R0226_^1_%NUM $2D2E_R0226_^1RECVR EQU RECVR(*)_O0309_^1_%STA ERRNO_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+11_#BIT 11_C0308_^1_%SAZ RECV_S0308_^1_%LDA- EREQST,I_O0308_^1_%ADD- BITMSK+14_#BIT 14_C0308_^1_%STA- EREQST,I_O0308_^1_%JMP READCK_^1€€TIMES NUM 0_V0311_^1TRIES NUM 0_^1_%EXT LOG_^1RECV_!LDQ- ELU,I_^1_%TRQ A_,LOGICAL UNIT TO A_^1_%EOR- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SAN T00001_'ITS NOT. CONTINUE_^1_%JMP* LPRTN_(IT IS, NO RECOVERY_^1T00001 QLS 6_^1_%LDA ERRNO_^1_%AAQ Q_^1_%ENA 15_^1_%RTJ LOG_^1_%RTJ SAVORG_'AVE ORG INFO_=0311_^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_^1BKSPCT BSS BKSPCT(1)_N0305_^1NBRBSP BSS NBRBSP(1)_^1WRCVRO CLR A_^1_%STA* NBRBSP_^1_%STA* TRIES_^1_%ENA 5_^1_%STA* TIMES_R0304_^1WRCVR LDA* TIMES_R0304_^1_%SAN DEBUMP_Q0309_^1_%STA- RTRECV,I_^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_)SKIP IF NO LP_<0304_^1_%JMP CKBKSP_'CHK BKSPCT_^1NOLP_!RTJ BKSSP_(BACKSPACE_@0311_^1_%RAO* NBRBSP_^1_%RAO* BKSPCT_Q0304_^1_%RTJ* FUNCDR_'CHK FD_C0304_^1_%JMP* REREAD_'TRY READ_A0304_^1_%JMP* WRCVR1_'CONTINUE DASHING_90304_^1FUNCDR NOP 0_V0308_^1_%LDA- ERDIRC,I_$€€FD FROM PHYSTB_;0304_^1_%SAP FUND1_(SKIP TO_B0304_^1_%ALS 1_,UPDATE DIRECTORY_90304_^1_%STA- ERDIRC,I_$RESTORE FD_?0304_^1_%RAO* FUNCDR_Q0309_^1FUND1 JMP* (FUNCDR)_$EXIT_E0304_^1_%SPC 2_V0304_^1REREAD ENQ 0_,PICK UP MOTION INDEX_50304_^1_%RTJ SWAP_*SET UP READ._^1_%RTJ CALAD_R0330_^1DUMRD ENQ 0_V0304_^1_%RTJ SWAP_*SET UP READ._^1_%RTJ CALAD_R0330_^1NONSTP LRS 8_,CHECK F€€OR PARITY._1**MSOS4.0**_^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- ECKSUM,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_^1FSTSNR LRS 8_,CHECK FOR PARITY._1**MSOS4.0**_^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_%SUB =XTR€€YNBR_^1_%SAN CONEOF_^1_%JMP* LPRTN_^1CONEOF RAO* TRIES_^1_%ENA 0_^1_%RTJ BKSSP_^1FMRTN RTJ BKSSP_^1_%ENQ 1_V0309_^1_%RTJ* SWAP_S0304_^1_%RTJ CHKSUM_(CHECK SUM SNR._^1_%STA- TCKSUM,I_^1_%RTJ CALAD_^1SNDSNR LRS 8_,CHECK FOR PARITY._1**MSOS4.0**_^1_%SAP ADVRCV_Q0310_^1_%RTJ BKSSP_^1_%JMP* WRTEOF_^1ADVRCV RTJ RESWAP_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_O0330_^1_%RTJ CHKSUM_€€^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_R0330_^1OKNOW RTJ STUSCK_Q0330_^1_%JMP* ADVRV_R0330_^1_%LDA* ERRNO_^1_%JMP RECVR_R0330_^1ERRNO NUM 0_V0310_^1ADVRV CLR A_^1_%STA- RTRECV,I_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE RECOVERY._^1_%SUB* MODCOD_^1_%SAZ YESMOD_'SKIP IF MODE RECOVERY,_^1_%JMP NOPAR_^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_^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_^1SWAP_!NOP 0_V0308_^1_%STQ MOTIDX_Q0308_^1_%RTJ* CALCUT_^1CALCUT NOP 0_^1_%SQN USNR_^1_%LDA =XREADBF-*+2_#RELATIVE ADD OF BUFFER_00312_^1_%JMP* SWAP1_^1US€€NR_!LDA =X(SNR-CALCUT)_^1SWAP1 ADD* CALCUT_Q0312_^1_%STA FWA_^1_%ADD* LWATAB,Q_O0308_^1_%STA LWA_T0308_^1_%JMP* (SWAP)_Q0308_^1LWATAB NUM 8_V0304_^1_%NUM 2_V0304_^1READBF BSS READBF(8)_N0311_^1SAVORG NOP 0_V0308_^1_%LDA FWA_*ORG FWA_B0308_^1_%STA* TEMFWA_Q0308_^1_%LDA MOTIDX_(MOTION INDEX_<0308_^1_%STA* TEMIDX_Q0308_^1_%LDA SAVLWA_(ORG LWA_A0308_^1_%STA* TEMLWA_Q0308_^1_€€%JMP* (SAVORG)_O0311_^1TEMIDX BSS TEMIDX(1)_N0304_^1TEMLWA BSS TEMLWA(1)_N0226_^1TEMFWA BSS TEMFWA(1)_N0304_^1CALAD NOP 0_V0330_^1_%LDA =XALLRTN-REDY3_I0330_^1_%STA- RTRECV,I_O0330_^1CALAE JMP IOXFER_^1ALLRTN JMP* (CALAD)_P0330_^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)_^1MODCOD NUM $3135_(SWITCH MODE RECOVERY CODE._^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_^1BKSPR€€N LDA- ZROBIT+5_%CLEAR MOTION FLAG_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* (BKSSP)_^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_^1RESWAP NOP 0_V0304_^1_%LDA* TEMIDX_'ORG MOTIDX_?0304_^1_%STA MOTIDX_Q0311_^1_%LDA* TEMFWA_Q0324_^1_%STA FWA_T0304_^1_%LDA* TEM€€LWA_'ORG LWA_B0304_^1_%STA LWA_T0304_^1_%JMP* (RESWAP)_O0304_^1TOTLSW NUM 0_V0311_^1ADVREV JMP ADVRV_^1RRCVR LDA SAVLWA_Q0309_^1_%STA LWA_T0309_^1_%LDA- STOLSW_Q0310_^1_%STA* TOTLSW_Q0311_^1LOPAGN CLR A_,SET SWS_B0305_^1_%STA* VR1_T0305_^1_%ENA -0_^1RRCVR1 RTJ* BKSSP_(BKSP_E0305_^1_%RTJ* CALAD_R0330_^1BKRD_!RTJ* STUSCK_'CHK STATUS_?0305_^1_%JMP* ADVREV_^1_%LDA =N0_*THIS LO€€OP COMPLETE_70305_^1VR1_"EQU VR1(*-1)_O0305_^1PINTCT EQU PINTCT(*-1)_^1_%EOR- TERM_S0309_^1_%SAZ STEP2_R0305_^1_%RAO* VR1_T0310_^1_%JMP* RRCVR1_'CONTINUE_A0305_^1STEP2 EQU STEP2(*)_O0309_^1_%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_^1MORD_!RTJ* STUSCK_Q0305_^1_%JMP* MODERR_Q0305€€_^1_%RTJ* BKSSP_R0305_^1_%RTJ* CALAD_R0330_^1MORD1 RTJ* STUSCK_'CHK STATUS_?0305_^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_(BKSP_E0305_^1_%RTJ* CKPINT_^1_%RTJ* CALAD_R0330_^1RELRD2 RTJ* CALAD_^1RELRD1 RTJ* CALAD_^1RELRD RTJ* STUSCK_Q03€€09_^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_^1OFFTO ENQ 0_^1_%STQ- RTRECV,I_^1_%JMP* FAILED_Q0305_^1MODERR LDA* MODCOD_'SET SWITCH MODE CODE._^1_%STA ERRNO_^1_%JMP ADVRV_^1STUSCK NOP 0_V0305_^1_%LDA- ESTAT2,I_O0330_^1_%ALS 7_V0309_^1_%SAP GODST_(SKI€€P 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_%SPC 5_^1E1732B LDA LSTPT_(GET LAST PDT ADDRESS_-**MSOS 4.1**_^1_%STA- I_^1_%LDQ- EWES,I_L70*1611_^1_%ADQ- BITMSK+11_#TERMINATE BUFFER_470€€*1611_^1_%INP 1_Q70*1611_^1_%NOP 0_Q70*1611_^1_%ENA 1_Q70*1611_^1_%LDQ- EWES,I_'CLEAR 1732_:70*1611_^1_%OUT 1_Q70*1611_^1_%NOP 0_Q70*1611_^1_%CLR A_,HANGUP CODE IN A_^1_%SPC 5_^1FAILED STA- ETEMP2,I_$ENTRY FOR FIALURES_^1_%ENA 0_Q72*1658_^1_%STA MOTITR_'CLR A15 WRD4 IF SET_172*1658_^1_%ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%EIN 0_^1_%LDA- EREQST,I_O0308_^1_%€€ADD- BITMSK+14_N0308_^1_%STA- EREQST,I_O0308_^1*_81 CARD DELETED_665*1395_^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_$CLEAR REWIND BIT_^1_%STA- ESTAT1,I_$CLEAR REWIND BIT_665*1395_^1_%LDA RW_^1_%INA -1_^1_%STA RW_^1*_81 CAR€€D DELETED_666*1395_^1_%EQU NOTRW(*)_L66*1395_^1_%RTJ+ RL1706_'RELEASE 1706_5**MSOS 4.1**_^1_%STQ- I_,RESTORE Q_8**MSOS 4.1**_^1_%LDQ- EWES,I_^1_%ENA 1_^1_%OUT 1_,CLEAR CONTROLLER_^1_%NOP 0_^1_%RTJ MAKEQ_^1_%LDQ- ETEMP2,I_^1_%QLS 10_^1_%ADQ- ELU,I_(COMBINE LU NUMBER AND ERROR CODE_^1_%QLS 6_,POSITION_^1_%RTJ+ LOG_*GO LOG ERROR_5**MSOS 4.1**_^1_%LDA- ELU,I_(CURRENT LOGICAL UNI€€T_-**MSOS 4.1**_^1_%EOR- DIAGLU,I_$DIFFER WITH DIAGNOSTIC LU_(**MSOS 4.1**_^1_%SAZ CMPLIT_'DIAG. LU. COMPLETE IT_^1*_]_^1*_$SCHDLE ALTDEV,0,0,D_^1*_]_^1XXX_"RTJ- ($F4)_^1_%NUM 0_-SET AT CRXX+1._^1_%ADC ALTDEV_^1GONXTP JMP NXTPT_(SEARCH REQUESTS OTHER LU_)**MSOS 4.1**_^1_%SPC 5_^1MOTION LDQ- EPTR,I_^1_%LDA- 4,Q_*GET USER-S CONTROL WORD_^1_%RTJ* XCTMOT_^1CMPLIT EQU CMPLIT(*)_€€^1_%JMP COMPLT_^1_%SPC 5_^1XCTMOT NUM 0_,USED BY MOTION AND RECOVERY_^1_%STA- ETEMP2,I_$SAVE MOTION CONTROL IN A_^1*_83 CARDS DELETED_568*1509_^1_%CLR A_^1_%RTJ UNTSEL_^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_Q0308_^1_%AND- LOWBTS+3_"SAVE DENSITY (0-3) ONLY_^1*_81 CARD DELETED_^1_%ST€€A* DENCOD_'SAVE DENSITY_^1_%LDA- ETEMP2,I_J72*1713_^1_%AND- HIHBTS+4_$REMOVE DENSITY(BITS 0-3)_,72*1713_^1_%STA- ETEMP2,I_J72*1713_^1_%JMP* DOMOT_(EXECUTE MOTIONS_^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_%TRA Q_V0308_^1_%SQN TABDEX_Q0323_^1_%STA* MOTITR_'ZERO COUNT IF DO NOTHING_^1TABDEX JMP* SUBMOT,Q_$INDEX ON MOTION CODE_50323_^1DENCOD NUM 0_^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* FLFR_)SEARCH FILE FORWARD_$5_^1_%JMP* FLB€€K_)SEARCH FILE BACKWARD_#6_^1_%JMP* MOTSTR_'ADVANCE RECORD_*7_^1MCODS NUM $199,$289,$401,$601,$319,$399,$109_^1MOTSTR LDA- EOTFLG,I_^1_%SAZ MOT1_^1_%ENA -$10_^1_%JMP* MOT2_^1MOT1_!ENA -0_^1MOT2_!AND* MCODS-1,Q_^1_%LDQ- EWES,I_'EQUIPMENT CODE_^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_%J€€MP- (DISP)_Q0308_^1EOPNOT ALS 10_+CHK 4 REW/UNLOAD_^1_%SAM DONEM_R0308_^1_%LDQ- I_,SCHEDULE REWIND CHECK_165*1395_^1_%SCHDLE REWCK,3,,1_^1_%JMP NXTPT_O65*1395_^1DONEM LDA* DENCOD_'PICK UP DENSITY_^1_%SAZ NODEN_R0308_^1_%LDQ- ESTAT2,I_^1_%QLS 5_^1_%SQM DEN1_)SKIP IF AT LOAD POINT_^1_%ENA 6_,FAKE EXTERNAL REJECT_^1_%JMP* FAILED_^1DEN1_!AND- LOWBTS+1_^1_%TRA Q_^1_%LDA- BITMSK€€+2,Q_^1_%RTJ UNTSEL_^1NODEN LDA- ZROBIT+5_$CLEAR MOTION FLAG_^1_%AND- ESTAT1,I_O0308_^1_%STA- ESTAT1,I_O0308_^1_%JMP* (XCTMOT)_$RETURN TO CALLER_^1_%SPC 5_^1_%EQU WRFM(*)_^1_%RTJ* RINGCK_^1_%ENQ 2_^1_%JMP* MOTSTR_^1_%SPC 5_^1REW_"RTJ* LPCHK_(CHECK FOR LOAD POINT, RETURN IF NOT L.P._^1_%LDA- ESTAT1,I_O0308_^1_%ADD- BITMSK+6_O0308_^1_%STA- ESTAT1,I_O0308_^1_%RAO RW_^1*_812 CAR€€DS DELETED_465*1395_^1_%RTJ* BUSYCK_^1_%ENQ 3_,INDEX FOR REWIND_^1_%JMP* MOTSTR_'START MOTION_^1_%SPC 5_^1BKSP_!RTJ* LPCHK_^1_%ENQ 1_,NOT LP SO BACKSPACE RECORD_^1_%JMP* MOTSTR_'START BACKSPACE RECORD_^1_%SPC 5_^1REWUN ENA 0_^1_%STA* MOTITR_'0 INTO ITERATIONS_^1_%STA- ETEMP2,I_$CONTROL TO 0 TO TERMINATE_^1_%RTJ* BUSYCK_^1_%LDA- ESTAT2,I_^1_%AND- ZROBIT_'SET EQUIPMENT STATUS T€€O NOT READY_^1_%STA- ESTAT2,I_^1_%ENQ 4_^1_%JMP* MOTSTR_^1_%SPC 5_^1_%EQU FLFR(*)_^1_%ENQ 5_^1_%JMP* MOTSTR_^1_%SPC 5_^1FLBK_!RTJ* LPCHK_(CHECK LOAD POINT_^1_%ENQ 6_^1_%JMP* MOTSTR_'START FILE BACKWARD SEARCH_^1_%EJT_]_^1MOTITR NUM 0_,NUMBER OF ITERATIONS ON MOTION REQUEST_^1NXTMOT LDA- ETEMP2,I_$PICK UP MOTION REQUEST CODE_^1_%SAM NZITR_(SKIP IF ITERATIVE_^1_%ALS 4_^1_%AN€€D- HIHBTS+4_^1_%STA- ETEMP2,I_^1_%JMP* DOMOT_^1NZITR LDA* MOTITR_'PICK UP ITERATIONS_^1_%SAZ MOTEXT_'SKIP IF DONE_^1_%INA -1_^1_%STA* MOTITR_^1_%SAZ MOTEXT_'SKIP IF DONE_^1_%JMP* DOMOT_(MORE ITERATIONS THIS MOTION_^1MOTEXT JMP* NODEN_(DONE ALL ITERATIONS THIS MOTION_^1BUSYCK NUM 0_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+1_O0308_^1_%SAN ISBUSY_Q0308_^1NOBUSY LDA LSTPT_^1_%STA€€- I_^1_%JMP* (BUSYCK)_^1ISBUSY LDQ- I_^1*_]_^1*_$SCHDLE BSYWAT,4,0,D_^1*_]_^1S1_#RTJ- ($F4)_(UNIT BUSY CHECK_^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,N4/4_^1_%NUM 0_^1_%JMP- (DISP)_^1BSYWAT STQ- I_,SAVE PHYSTB ADDRESS_^1_%RTJ* STATIN_'READ STATUS 1_^1_%ALS 14_+BUSY BIT IN A15_^1_%SAP 1_*NOT BUSY_^1_%JMP* BSYWAT+1_$BUSY SO LOOP_^1*_]_^1*_$SCHDLE NOBUSY,0,0,D_^1*_]_^1S2_#RTJ- ($F4)_^1_€€%NUM 0_-SET AT CRXX+3._^1_%NUM 0_^1_%JMP- (DISP)_'EXIT AFTER SCHEDLE_^1STATIN NUM 0_^1_%LDQ- EWES,I_^1_%INP -1_^1_%JMP* (STATIN)_^1_%SPC 5_^1RINGCK NUM 0_^1_%LDA- ESTAT2,I_O0308_^1_%SAP NORING_Q0308_^1_%JMP* (RINGCK)_O0308_^1NORING ENA 13_^1_%JMP FAILED_^1_%SPC 5_^1LPCHK NUM 0_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+10_N0308_^1_%SAN LODYES_Q0308_^1_%JMP* (LPCHK)_P0308_€€^1LODYES ENA 0_,YES ON LOAD POINT_^1_%STA* MOTITR_'ZERO ITERATIONS_^1_%JMP* NXTMOT_'NEXT MOTION_^1*_832 CARDS DELETED_^1_%SPC 5_^1WAIT_!STQ- I_,SAVE PHYSTB ADDRESS_^1_%RTJ* STATIN_^1_%ALS 3_,CONTROLLER ACTIVE IN A15_^1_%SAP UPSCD_(NOT ACTIVE_^1_%JMP* WAIT+1_'STILL ACTIVE_^1UPSCD LDQ- I_,CONTRL NOT ACTIVE, SCHED UP_^1*_]_^1*_$SCHDLE CONSEL,0,0,D_^1*_]_^1UPIT_!RTJ- ($F4)_^1_%NU€€M 0_-SET AT CRXX+2._^1_%NUM 0_^1_%JMP- (DISP)_^1_%EJT_]_^1*_$BCD-ASCII BUFFER CODE CONVERSION ROUTINES_^1_%SPC 3_^1************************************************************************_^1*_]_'*_^1*_*ASCII TO BCD CONVERSION SUBROUTINE_8*_^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_!(A) = ADDRESS OF FIRST WORD OF BUFFER_.*_^1*_1(Q) = NUMBER OF WORDS IN BUFFER_4*_^1*_]_'*_^1*_1(I)_!NOT AFFECTED BY SUBROUTINE_3*_^1**€€**********************************************************************_^1_%SPC 1_^1A2BCD 0_"0000_"ENTRY POINT TO ASCII TO BCD CONVERTION SUBROUTINE_^1_%STA* BUFFER_'SAVE STARTING ADDRESS OF BUFFER_^1_%LDA- I_^1_%STA* SAVEI_(SAVE CONTENTS OF I REGISTER_^1LOOPA ENA $7F_*MASK TO A_^1_%INQ -1_+DECREMENT Q BY ONE_^1_%SQP CONVA-*-1_#CONTINUE IF Q IS POSITIVE_^1_%SPC 1_^1_%LDA* SAV€€EI_(DONE IF Q IS NEGATIVE - GET ORIGINAL I_^1_%STA- I_,RESTORE I_^1_%JMP* (A2BCD) EXIT FROM SUBROUTINE WITH BUFFER CONVERTED_^1_%SPC 1_^1CONVA STQ- I_,SET UP I AS BUFFER INDEX_^1_%LDQ* (BUFFER),I_"GET WORD FROM BUFFER_^1_%LAQ Q_,MASK TO GET LOWER CHARACTER_^1_%RTJ* LIMCK_(ASSURE CHARACTER BETWEEN 20 AND 5F (BAD=20)_^1_%LDQ* TABLE,Q_%GET BCD CODE - USE ASCII CHARACTER AS INDEX_^1€€_%LAQ Q_,MASK TO GET BCD CODE (LOWER HALF OF WORD)_^1_%STQ* TEMP_)SAVE FIRT 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_%RTJ* LIMCK_(ASSURE CHARACTER BETWEEN 20 AND 5F (BAD=20)_^1_%LDQ* TABLE,Q_%GET BCD CODE - USE ASCII CHARACTER AS INDEX_^1_%LAQ A_,MASK TO GET BCD CODE (LOWER HALF OF WORD)_^1€€_%ALS 8_,SHIFT CODE TO UPPER HALF_^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* LOOPA_(LOOP BACK FOR NEXT WORD IN BUFFER_^1LIMCK 0_"0_^1_%INQ -$20_^1_%SQP 1_,SKIP IF NOT 0-1F_^1_%ENQ 0_,SET TO 20 FOR SPACE_^1_%INQ -$40_^1_%SQM 1_,SKIP IF NOT 60-7F_^1_%ENQ -$40_)SET TO 20 FOR SPACE_^1_%INQ $60€€_*RESTORE ORIGINAL CHARACTER_^1_%INA -$40_)MAKE 3F MASK_^1_%LAQ Q_,TRUNCATE Q TO 6 BITS_^1_%INA $40_*RESTORE 7F MASK_^1_%JMP* (LIMCK)_^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 MODIFIED 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 AFFECTE€€D_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 =N$00FF_%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),I_"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_%LDA* TABLE,Q_%GET ASCII CODE - USE BCD CODE AS INDEX_^1_%AND =N$FF00_%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_%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* THE FOLLOWING TABLE IS USED TO CONVERT CODES FROM_3*_^1*_#1. TELETYPE ASCI€€I TO EXTERNAL BCD_=*_^1*_#2. EXTERNAL BCD TO TELETYPE ASCII_=*_^1_%SPC 2_^1*_5BCD TO ASCII_$**_$ASCII TO BCD_^1*_I**_^1TABLE NUM $261F_(00_%3A_^1_%NUM $3131_'01_!1_!31_'**_'41_!A_!31_^1_%NUM $3232_'02_!2_!32_'**_'42_!B_!32_^1_%NUM $3333_'03_!3_!33_'**_'43_!C_!33_^1_%NUM $3434_'04_!4_!34_'**_'44_!D_!34_^1_%NUM $3535_'05_!5_!35_'**_'45_!E_!35_^1_%NUM $3636_'06_!6_!36_'**_'€€46_!F_!36_^1_%NUM $3737_'07_!7_!37_'**_'47_!G_!37_^1_%NUM $3838_'08_!8_!38_'**_'48_!H_!38_^1_%NUM $3939_'09_!9_!39_'**_'49_!I_!39_^1_%NUM $3021_'0A_!0_!30_'**_'4A_!J_!21_^1_%NUM $3D22_'0B_!=_!3D_'**_'4B_!K_!22_^1_%NUM $2723_%0C_%27_'**_'4C_!L_!23_^1_%NUM $3A24_'0D_%26 (3A)_!**_'4D_!M_!24_^1_%NUM $3E25_^1_%NUM $2226_^1_%NUM $2027_'10 SPACE 20_'**_'50_!P_!27_^1_%NUM $2F28_'11_!/_!€€2F_'**_'51_!Q_!28_^1_%NUM $5329_'12_!S_!53_'**_'52_!R_!29_^1_%NUM $5412_'13_!T_!54_'**_'53_!S_!12_^1_%NUM $5513_'14_!U_!55_'**_'54_!T_!13_^1_%NUM $5614_'15_!V_!56_'**_'55_!U_!14_^1_%NUM $5715_'16_!W_!57_'**_'56_!V_!15_^1_%NUM $5816_'17_!X_!58_'**_'57_!W_!16_^1_%NUM $5917_'18_!Y_!59_'**_'58_!X_!17_^1_%NUM $5A18_'19_!Z_!5A_'**_'59_!Y_!18_^1_%NUM $5F19_^1_%NUM $2C3D_^1_%NUM $281E_^€€1_%NUM $252D_^1_%NUM $5C2F_^1_%NUM $401A_^1_%NUM $2D10_'20_!-_!2D_'**_'20 SPACE 10_^1_%NUM $4A2A_'21_!J_!4A_'**_'21_%2A_^1_%NUM $4B0F_^1_%NUM $4C3F_^1_%NUM $4D2B_'24_!M_!4D_'**_'24_!$_!2B_^1_%NUM $4E1D_^1_%NUM $4F1D_^1_%NUM $500C_'27_!P_!50_'**_'27_%0C_^1_%NUM $511C_'28_!Q_!51_'**_'28_!(_!1C_^1_%NUM $523C_'29_!R_!52_'**_'29_!)_!3C_^1_%NUM $212C_'2A_%21_'**_'2A_!*_!2C_^1_%NUM€€ $2430_'2B_!$_!24_'**_'2B_!+_!30_^1_%NUM $2A1B_'2C_!*_!2A_'**_'2C_!,_!1B_^1_%NUM $5D20_^1_%NUM $3B3B_^1_%NUM $5E11_^1_%NUM $2B0A_^1_%NUM $4101_'31_!A_!41_'**_'31_!1_!01_^1_%NUM $4202_'32_!B_!42_'**_'32_!2_!02_^1_%NUM $4303_'33_!C_!43_'**_'33_!3_!03_^1_%NUM $4404_'34_!D_!44_'**_'34_!4_!04_^1_%NUM $4505_'35_!E_!45_'**_'35_!5_!05_^1_%NUM $4606_'36_!F_!46_'**_'36_!6_!06_^1_%NUM $47€*07_'37_!G_!47_'**_'37_!7_!07_^1_%NUM $4808_'38_!H_!48_'**_'38_!8_!08_^1_%NUM $4909_'39_!I_!49_'**_'39_!9_!09_^1_%NUM $3F0D_^1_%NUM $2E2E_^1_%NUM $293E_^1_%NUM $5B0B_^1_%NUM $3C0E_^1_%NUM $233A_^1_%SPC 2_^1************************************************************************_^1_%END_]_^__*PD1732U CSY/ A34 P€1_%NAM D1732U_'DECK-ID A34 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_*1732-1 UNBUFFERED 608/609 DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1*_*LOW ORDER BITS MASK_^1_%EQU LOWBTS($3)_^1*_*HIGH ORDER BITS MASK_^1_%EQU HIHBTS($12)_^1*_*LOCATION CONTAINING ZE€€RO_^1_%EQU ZERO($22)_^1*_*INDIVIDUAL BIT MASK_^1_%EQU BITMSK($23)_^1*_*BIT EXCLUSION OR RESET MASK_^1_%EQU ZROBIT($33)_^1*_*ADDRESS CONTAINING FIND NEXT REQUEST_^1_%EQU FNR($B5)_^1*_*ADDRESS CONTAINING COMPLETE REQUEST_^1_%EQU COMPRQ($B6)_^1*_*ADDRESS CONTAINING COMMON INTERRUPT HANDLER_^1_%EQU MONI($F4)_^1*_*ADDRESS CONTAINING DISPATCHER_^1_%EQU DISP($EA)_^1_%EQU SLCT(1),I€€O(-1)_^1_%EJT_]_^1*_*PHYSICAL DEVICE TABLE LAYOUT_^1*_$REFER TO MASS STORAGE OPERATING SYSTEM 4.1 REFERENCE MANUAL_^1*_*DIAGNOSTIC CLOCK_^1_%EQU EDCLK(4)_^1*_*LOGICAL UNIT NUMBER ASSIGNED_^1_%EQU ELU(5)_^1*_*REQUEST PARAMETER LIST LOCATION_^1_%EQU EPTR(6)_^1*_*HARDWARE EQUIPMENT CODE FOR STATUS_^1_%EQU EWES(7)_^1*_*REQUEST STATUS BITS_^1*_*BITS 4-10, EQUIPMENT TYPE, =24 FOR 608€€, =25 FOR 609_^1*_*BITS 11-14, EQUIPMENT CLASS, =3_^1_%EQU EREQST(8)_^1*_*STATUS WORD NUMBER 1_^1_%EQU ESTAT1(9)_^1*_*CURRENT LOCATION IN DRIVER_^1_%EQU ECCOR(10)_^1*_*LAST WORD+1 OF BUFFER_^1_%EQU ELSTWD(11)_^1*_*LAST EQUIPMENT STATUS, SEE ERS_^1_%EQU ESTAT2(12)_^1*_*UNIT AND MODE SELECT CODE_^1_%EQU UNTMOD(16)_^1_%EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_***MSOS 4.1**_^1*_$€€TEMP STORAGE_^1_%EQU ETEMP2(18)_^1RTRECV EQU RTRECV(19)_M0226_^1ECKSUM EQU ECKSUM(20)_F**MSOS4.0**_^1ERDIRC EQU ERDIRC(21)_F**MSOS4.0**_^1TCKSUM EQU TCKSUM(22)_F**MSOS4.0**_^1_%EQU ELINK(23)_#PHYSTAB THREAD_3**MSOS 4.1**_^1_%EQU PHSREC(24)_"MAX PHYS REC SIZE FOR 7 TRACK_)MSOS4.1_^1_%EQU ABUFF(25)_#ADDR OF PACK/UNPACK BUFFER (7 TRACK) MSOS4.1_^1EOTFLG EQU EOTFLG(26)_"END-€€OF-TAPE FLAG_^1NOISLN EQU NOISLN(2)_#SPECIFIES WORD LENGTH OF RECORD TO_!72*1609_^1*_8BE DISCARDED AS NOISE_/72*1609_^1TERM_!EQU TERM($43)_N0309_^1STOLSW EQU STOLSW($1F)_L0309_^1WRITFM EQU WRITFM($30)_L0305_^1*_82 CARDS DELETED_572*1609_^1TRYNBR EQU TRYNBR(50)_"NUMBER OF RECOVERY RETRIES._'**MSOS4.0**_^1_%SPC 5_^1_%ENT I1732U,C1732U,E1732U_;**MSOS 4.1**_^1_%EXT MAS300_^1_%E€€XT ALTDEV_^1_%EXT LOG_L**MSOS 4.1**_^1_%EXT RQAQ_)ACQUIRE AQ CHANNEL_/**MSOS 4.1**_^1_%EXT RLAQ_)RELEASE AQ CHANNEL_/**MSOS 4.1**_^1_%EXT REWCK_^1_%EJT_]_^1I1732U RTJ* HERE_)LOCALIZE_9**MSOS 4.1**_^1_%EQU LOC(*)_^1HERE_!NUM 0_^1_%STQ- I_^1_%EQU CRXX(*)_^1*_$NOTE% THE NEXT INSTRUCTION IS CHANGED BY DRIVER_^1*_,TO =JMP* ADRPLG= BEFORE EXIT TO MAS300_^1_%LDQ- (ZERO),Q_^1*_8RE€€DEFINE REQUEST WORD OF EACH SCHED REQ TO_^1_%STQ XXX+1_(REFLECT LEVEL_^1_%STQ UPIT+1_^1_%STQ S2+1_^1*_81 CARD DELETED_665*1396_^1_%LDQ* LOC_^1_%ENA TAPINI-LOC_^1_%AAQ A_^1_%STA* ADRINI_'STORE ADDRESS OF INITIATOR_^1_%LDA =XC1732U-LOC_C**MSOS 4.1**_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA* ADRCON_'STORE ADDRESS OF CONTINUATOR_^1_%LDA =XE1732U-LOC_C**MSOS 4.1**_^1_%AAQ A_,INCRE€€MENT + BASE_^1_%STA* ADRHNG_'STORE ADDRESS OF TIMEOUT_^1_%LDA =XWAIT-LOC_"CALCULATE ABSOLUTE_^1_%AAQ A_-ADDRESSES OF ALL REQUESTS._^1_%STA DOWNWT+2_)*_^1*_83 CARDS DELETED_^1_%LDA =XBSYWAT-LOC_$*_^1_%AAQ A_0*_^1_%STA S1+2_-*_^1_%LDA =XNOBUSY-LOC_$*_^1_%AAQ A_0*_^1_%STA S2+2_-*_^1*_83 CARDS DELETED_565*1396_^1_%LDA =XCONSEL-LOC_^1_%AAQ A_0*_^1_%STA UPIT+2_+*_^1_%LDQ- I_^€€1ADRPLG LDA- 0_^1ADRINI ADC TAPINI_^1_%STA- 1,Q_*STORE ADDRESS OF INITIATOR IN PHYSTB_^1_%LDA- 0_^1ADRCON ADC C1732U_^1_%STA- 2,Q_*STORE ADDRESS OF CONTINUATOR IN PHYSTB_^1_%LDA- 0_^1ADRHNG ADC E1732U_^1_%STA- 3,Q_*STORE ADDRESS OF TIMEOUT IN PHYSTB_^1_%LDA- ELINK,Q_%PICK UP ADDRESS OF NEXT PHYSTB_^1_%TRA Q_^1_%SUB- I_^1_%SAZ TAPINI_'SKIP IF DONE_^1_%JMP* ADRPLG_'GO BACK AND S€€ET UP NEXT PHYSTB_^1TAPINI STQ- I_^1_%LDA =N0_^1_%EQU BUSY(*-1),LSTPT(*-1)_^1_%SAZ NOTBSY_Q0308_^1_%JMP- (DISP)_Q0308_^1ERRCNT NUM 0_^1NOTBSY STA* ERRCNT_'RESET COUNTER_^1_%RTJ RQAQ_)ACQUIRE AQ CHANNEL_/**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^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*_83 CARDS DELETED_^1_%LDA* RW_^1_%INA -1_^1_%STA* RW_^1*_83 CARDS DELETED_^1_%LDA- I_^1_%STA* LSTPT_(UPDATE PDT POINTER_^1_%JMP TAPC2_(GET NEXT MOTION PARAMETER_^1FIND_!RTJ- (FNR)_(FIND NEXT REQUEST_0**MSOS 4.1**_^1_%JMP* NXTPT_(NO REQUEST THIS PHYSTB_^1_%LDQ- I_,CURR€€ENT 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_^1NXTPT LDA- ELINK,I_%GET NEXT PHYSTB_^1_%STA- I_^1_%EOR* LSTPT_^1_%SAZ EXIT_S0308_^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* BUSY_)SET DRIVER NOT BUSY_^1_%STA- RTRECV,I_$CLEAR RECOVERY RETURN_^1_%RTJ RLAQ_)RELEASE AQ CHANNEL_/**MSOS 4.1**_^1_%LDA- 0_^1_%ADC $1800+ADRPLG-CRXX_^1_%STA CRXX_^1_%STQ- I_N**MSOS 4.1**_^1_(LDA*_$RW_^1_%SAN EXIT2_R0308_^1_%LDA* MS300_(ADDRESS MASDRV EXIT_.**MSOS 4.1**_^1_%EOR- LOWBTS+€€14_F**MSOS 4.1**_^1_%SAZ CALDSP_I**MSOS 4.1**_^1_%JMP+ MAS300_'RELEASE BUFFER_3**MSOS 4.1**_^1MS300 EQU MS300(*-1)_E**MSOS 4.1**_^1_%EQU EXIT2(*)_^1CALDSP JMP- (DISP)_I**MSOS 4.1**_^1ZEROWD ENA 31_+ZERO WORDS ERROR_668*1517_^1_%JMP FAILED_N68*1517_^1_%SPC 5_^1_%EQU XFER(*)_^1_%CLR A_^1_%RTJ UNTSEL_'GO SELECT AND STATUS_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+14_#BIT 14_C0€€308_^1_%SAZ M609_S0308_^1_%JMP* M608_S0308_^1RW_%NUM_%0_^1M609_!LDA- ECCOR,I_^1_%STA FWA_*SET FWA TO USERS BUFR_^1_%SUB- ELSTWD,I_^1_%TCA A_Q72*1609_^1_%INA -NOISLN-1_#LOGIC REC.LT.NOISE REC_.72*1609_^1_%SAP 1_Q72*1609_^1_%JMP* ZEROWD_'YES._^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* WREC1_R0329_^1*_82 CARDS DELETED_568*1517_^1_%SPC 5_^1_%JMP* M608_N72*1609_^1PRUCMP NUM 0_Q72*1609_^1_%LDA- PHSREC,I_$PHYSICAL RECORD SIZE_^1_%STA* PRUSZ_(PRUSIZE_=72*1609_^1TRYAGN ENQ 0_Q72*1609_^1_%LDA* NUMBR_(LOGIC RECORD SIZE DIVIDED BY_(72*1609_^1_%DVI* PRUSZ_(PRU SIZE_<72*1609_^1_%SQZ LEAVE_(NO REMAINDER,LOGIC REC=PRU SIZ€€E_$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_372*1609_^1_%INA -NOISLN-1_#DECR PRUSZ BY NOISE-1_/72*1609_^1_%STA* PRUSZ_M72*1609_^1_%JMP* TRYAGN_'TRY REMAINDERING AGAIN_.72*1609_^1LEAVE LDA* PRUSZ_M72*1609_^1_%STA* NUMBR_(SIZE OF SEGMENT RECORDS_-72*1609_^1_%JMP* (PRUCMP)_J72*1609_^1PRUSZ NUM€€ 0_Q72*1609_^1M608_!LDA- ABUFF,I_%ADDRESS OF PACK/UNPACK BUFFER_^1_%STA FWA_*SET FWA TO FIRST ALLOC_^1_%LDA- ELSTWD,I_$LAST ADDRESS_^1_%SUB- ECCOR,I_%FIRST ADDRESS_^1_%INA -NOISLN-1_#LOGIC REC.LT.NOISE RECORD_+72*1609_^1_%SAP 1_Q72*1609_^1_%JMP* ZEROWD_'YES._^1_%INA NOISLN+1_J72*1609_^1_%STA* NUMBR_(NUMBER WORDS TO TRANSFER_^1_%LDA- PHSREC,I_$PHYSICAL RECORD SIZE_^1_%SUB =N0_€€^1_%EQU NUMBR(*-1)_^1_%SAP NUMOK_(NUMBER WORDS LESS THAN OR EQUAL PHYSICAL REC._^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+1_^1_%SAZ UNF608_'SKIP IF UNFORMATTED REQUEST_^1_%LDA- PHSREC,I_^1_%STA* NUMBR_(SET LENGTH TO PHYSICAL RECORD SIZE_^1_%JMP* NUMOK_^1UNF608 RTJ* PRUCMP_'CHECK IF LAST PRU.LT.NOISE RECORD_^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* WREC1_^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_%RTJ* UNPK_)GO CONVERT BINARY TO ASSM/DISM_^1_%JMP* WREC_^1WASC_!RTJ* ASCBCD_'WRITING ASC2 CONVERT TO BCD_^1_%ENA 2_^1_%STA* PRITYC_'SET PARITY COD€€E FOR EVEN_^1WREC_!EQU WREC(*)_P0329_^1_%RTJ CHKSUM_'GO CHECK SUM RECORD 1ST 16_/0308_^1_%STA- TCKSUM,I_^1_%ENA 1_V0329_^1WREC1 STA* MOTIDX_Q0329_^1_%SPC 5_^1_%EQU IOXFER(*)_^1_%LDA* PRITYC_^1_%RTJ UNTSEL_^1_%ALS 15_^1_%SAM TPPRDY_^1_%JMP NORDY_^1TPPRDY LDA- ESTAT1,I_^1_%AND- BITMSK+0_$BIT 0_D0308_^1_%SAZ IOCONT_Q0308_^1_%RTJ RINGCK_^1IOCONT IIN 0_^1_%LDA FWA_^1_%STA €€ CURR_^1_%LDQ* MOTIDX_^1_%LDA* RWMOTN,Q_$GET MOTION FUNCTION_^1_%SQZ RDMTN_^1_%JMP* WRTMTN_^1RDMTN LDQ- EWES,I_^1_%OUT REJX-*_^1_%INQ IO_^1CLRA_!CLR A_^1_%INP REJTI-*_^1_%STA* (CURR)_^1_%RAO* CURR_^1_%LDA* CURR_^1_%SUB* LWA_^1_%SAZ TOEOP_^1_%JMP* CLRA_^1TOEOP JMP* EOPNOW_^1REJX_!JMP* INRJT_^1_%JMP* INRJT+1_^1WRTMTN LDQ- EWES,I_^1_%OUT INRJT-*_^1_%INQ IO_^1WRTA_!LDA* (CURR€€)_^1_%OUT REJT-*_^1_%RAO* CURR_^1_%LDA* CURR_^1_%SUB* LWA_^1_%SAZ EOPNOW_^1_%JMP* WRTA_^1EOPNOW EQU EOPNOW(*)_O0308_^1_%LDA* LWA_T0310_^1_%STA* SAVLWA_Q0304_^1_%EIF_Y0308_^1_%LDA* CURR_S0304_^1_%STA* LWA_^1_%ENA 10_^1_%STA- EDCLK,I_^1_%EIN 0_^1_%JMP- (DISP)_^1REJTI JMP* INRJT_^1_%INQ 1_^1_%INP REJEX-*_%READ STATUS_^1_%AND =N$30_^1_%SAZ NOTYET_^1_%JMP* EOPNOW_^1NOTYET INQ €€-1_^1_%JMP* CLRA_^1REJT_!JMP* INRJT_^1_%INQ 1_^1_%INP REJEX-*_^1_%AND =N$30_^1_%SAZ NEDMOR_^1_%JMP* EOPNOW_^1NEDMOR INQ IO_^1_%JMP* WRTA_^1REJEX JMP* REJTI_^1_%JMP* INRJT+1_^1_%SPC 5_^1RWMOTN NUM $10B_)READ,EOP,CLR INT/CON_268*1131_^1_%NUM $8B_)WRITE,EOP,CLR INT/CON_268*1131_^1MOTIDX NUM 0_,AN INDEX INTO RWMOTN_^1PRITYC NUM 1_,PARITY CODE_^1_%SPC 5_^1ASCBCD NUM 0_,ASC €€TO BCD PREP_^1_%LDA* FWA_^1_%STA* CURR_^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_^1AQGET NUM 0_^1_%LDQ*€€ FWA_^1_%TRQ A_,INTO A_^1_%TCQ Q_,COMPLEMENT_^1_%ADQ* LWA_^1_%JMP* (AQGET)_^1_%SPC 5_^1UNPK_!NUM 0_,ENTRY FOR BINARY TO ASSEM/DISASSEM_^1_%LDA* FWA_*FOR BINARY WRITES ON 608_^1_%STA* CURR_)INITIALIZE CURRENT STORAGE LOCATION_^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 173€€2_^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_^1GETFST NUM 0_^1_%STQ* QSAV+1_'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_^1QSAV_!LDQ =N0_*RESTORE Q_^1_%RAO- ECCOR,I_%TALLY CURRENT ADDRESS_^1_%JMP* (GETFST)_^1STRDAT 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_^1CURR_!NUM 0_^1FWA_"NUM 0_^1LWA_"NUM 0_^1SAVLWA NUM 0_V0308_^1_%SPC 5_^1IN_#NUM 0_,€€RETURN ADDRESS OF IN SUBROUTINE_^1_%INP INRJT-*_^1_%JMP* (IN)_)RETURN_^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_%OUT INRJT-*_^1_%JMP* (OUT)_(RETURN_^1_%SPC 5_^1UNTSEL NUM 0_^1_%ADD- UNTMOD,I_$ADD UNIT AND MODE SELECT BITS_^1_%STA* C€€ONCOD_^1_%LDQ- EWES,I_^1_%RTJ* IN_^1_%ALS 3_,CONTROLLER ACTIVE IN A15_^1_%SAP SLTIT_(CONTROLLER NOT ACTIVE_^1_%LDQ- I_,BUSY PASS PHYSTB ADDR_^1*_]_^1*_$SCHDLE WAIT,4,0,D_^1*_]_^1DOWNWT RTJ- ($F4)_(WAIT FOR CONTROLLER TO GO NOT ACTIVE._^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,N4/4_^1_%NUM 0_^1_%JMP- (DISP)_^1CONCOD NUM 0_^1CONSEL STQ- I_,THIS LOC SCHEDLED BY WAIT, CONT NOT ACT_^1_%LDQ€€- EWES,I_^1SLTIT INQ 1_^1_%LDA* CONCOD_^1_%RTJ* OUT_^1_%RTJ* STATUS_'UPDATE STATUS_^1_%JMP* (UNTSEL)_$RETURN TO USER_^1_%SPC 5_^1STATUS NUM 0_,READ STATUS 1, 2 AND STORE IN ESTAT2_^1_%LDQ- EWES,I_^1_%INQ SLCT_)CODE TO READ STATUS 2_^1_%RTJ* IN_+READ STATUS 2_^1_%LLS 13_^1_%ALS 1_,WASTE BIT_^1_%LLS 2_,4 STATUS BITS IN Q_^1_%TRQ A_^1_%AND- LOWBTS+3_$MASK 4 BITS_^1_%ALS 12_€€+LEFT JUSTIFY_^1_%STA- ESTAT2,I_^1_%LDQ- EWES,I_^1_%RTJ* IN_+READ STSUS 1_^1_%AND- LOWBTS+11_#MASK 12 LOW BITS_^1_%ADD- ESTAT2,I_$COMBINE WITH STATUS 2_^1_%STA- ESTAT2,I_^1_%AND- BITMSK+9_^1_%SAZ RESTR1_'NO EOT SET_^1_%LDA- EOTFLG,I_$EOT FLAG SET YET_^1_%SAZ RESTR2_'NO,NOT SET YET GO PROCESS IT_^1_%LDA- ESTAT2,I_^1_%EOR- BITMSK+9_$CLEAR OUT EOT BIT_^1_%STA- ESTAT2,I_^1_%JMP* CONT€€UE_^1RESTR1 ENA 0_^1_%STA- EOTFLG,I_$IF BACK-SPACING OVER EOT_^1RESTR2 LDA- ESTAT2,I_$RESTORE STATUS WORD_^1CONTUE EQU CONTUE(*)_^1_%RTJ* EOTCHK_^1_%JMP* (STATUS)_^1ASVIT NUM 0_^1QSVIT NUM 0_^1*_81-CARD DELETED_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA- EOTFLG,I_^1_%SAN HEREB4_^1_%LDA- ESTAT2,I_^1_%AND- BITMSK+9_$EOT BIT POSITION_^1_%SAN PRTEOT_^1HE€€REB4 LDA* ASVIT_^1_%LDQ* QSVIT_^1_%JMP* (EOTCHK)_$NO EOT RETURN_^1PRTEOT EQU PRTEOT(*)_^1_%ENA 1_^1_%STA- EOTFLG,I_$SET EOT FLAG_^1_%LDQ- EWES,I_^1_%RTJ* OUT_*CLEAR CONTROLLER_^1_%ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%LDA- EREQST,I_^1_%AND- $41_*BFFF_^1_%EOR- BITMSK+14_#SET ERROR BIT 14 WRD 8 OF PHYSTB_^1_%STA- EREQST,I_^1_%JMP CMPRD_^1_%EJT_]_^1C1732U STQ- I_,CON€€TINUATOR_6**MSOS 4.1**_^1TAPC2 LDQ- EWES,I_'NO._?**MSOS4.0**_^1*_82 CARDS DELETED_^1_%LDA LSTPT_^1_%SAN EXPECT_'EXPECT INTERRUPT_^1_%ENA 2_^1_%OUT 1_,CLEAR INTERRUPTS_^1_%NOP 0_^1_%JMP EXIT_^1EXPECT STA- I_^1_%ENA 2_^1_%RTJ* OUT_*CLEAR INTERRUPT_^1_%ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%RTJ STATUS_^1_%LDQ- ESTAT2,I_^1_%LRS 1_^1_%SAM REDY_S0308_^1NORDY ENA€€ 14_^1_%JMP FAILED_^1REDY_!EQU REDY(*)_P0226_^1_%LDA- RTRECV,I_$CHK 4 RECOVERY I/O_70226_^1_%SAZ REDY1_(SKIP IF NOT RECOV_80226_^1_%STA* REDY3_(SET RECV RETN_<0304_^1REDY2 JMP REDY1_(EXIT TO RECOV_<0226_^1REDY3 EQU REDY3(*-1)_M0304_^1REDY1 LDA- ESTAT1,I_$CHK MOTION REQ._:0226_^1_%ALS 10_+MOTION BIT IN A15_^1_%SAP NOMO1_R0308_^1_%JMP NXTMOT_'EXCUTE NEXT MOTION_70308_^1NO€€MO1 EQU NOMO1(*)_O0226_^1_%ALS 5_,CHK 4 READ_?0226_^1_%SAP 1_^1_%JMP* NOMO2_^1_%LDA- ESTAT2,I_^1_%ALS 4_^1_%SAP NOEF_^1_%RTJ* ATEOFM_'FILE MARK STATUS SET, GO PROCESS IT_^1_%LLS 15_+SHIFT STATUS INTO Q FOR NEXT CHECKS_^1NOEF_!EQU NOEF(*)_^1*_810 CARDS DELETED_472*1131_^1NOMO2 LRS 6_,CHK 4 LOST DATA_:0226_^1_%SAP NOMO3_(NO LOST DATA_=0226_^1_%ENA 1_^1_%JMP RECVR_R0226_^€€1NOMO3 LRS 2_,CHK 4 PARITY_=0226_^1_%SAM YESPRI_^1_%JMP* NOPAR_^1YESPRI EQU YESPRI(*)_^1_%ENA 3_^1_%JMP RECVR_(EXIT TO RECOVERY_90226_^1_%EQU NOPAR(*)_^1_%LDA FWA_O72*1131_^1_%STA* SNRADR_L72*1131_^1_%LDA LWA_O72*1131_^1_%RTJ SNRCHK_'CHECK FOR SNR_772*1131_^1_%JMP* RECV2_(NOT SNR_=72*1131_^1IODO_!LDA SAVLWA_M72*1131_^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 EQU NOWRIT(*)_^1_%LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK STATUS 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_€€^1_%EQU READC(*)_^1_%LDA- ESTAT2,I_^1_%ALS 4_,FILE MARK STATUS IN A15_^1_%SAP TNOFIL_^1_%RTJ* ATEOFM_^1TNOFIL JMP* NOFILE_^1ATEOFM NOP 0_,CHECK FOR REAL FILE MARK_^1_%LDA LWA_^1_%SUB FWA_^1_%INA -2_^1_%SAP NOEFM_(SKIP IF MORE THAN ONE WORD READ_^1_%LDQ- EWES,I_^1_%RTJ IN_+GET STATUS 1_^1_%AND- BITMSK+13_^1_%SAZ NOEFM_(SKIP IF FILL STATUS NOT SET_^1_%JMP* ATEOF_^1NOEFM LD€€A- ESTAT2,I_^1_%AND- ZROBIT+11_^1_%STA- ESTAT2,I_$CLEAR FILE MARK STATUS_^1_%JMP* (ATEOFM)_^1ATEOF LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_C0308_^1_%STA- EREQST,I_O0308_^1_%JMP* CMPRD_^1_%EQU NOFILE(*)_^1_%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_%SAM BCDASC_Q0308_^1_%LDA- ECCOR,I_^1€€_%STA* SNRADR_^1_%RTJ* PACK_)GO CONVERT TO STRAIGHT BINARY_^1_%LDA- ECCOR,I_^1_%RTJ* SNRCHK_^1_%JMP* WRITEC_^1_%LDA* SNRADR_^1_%STA- ECCOR,I_^1_%JMP IODO_^1*_81 CARD DELETED_668*1558_^1_%SPC 5_^1BCDASC RTJ AQGET_^1_%RTJ BCD2A_(CONVERT_^1_%LDA FWA_^1_%STA CURR_)INITIALIZE CURRENT_^1BCDLOP LDQ- ECCOR,I_%GET USER-S LOCATION_^1_%LDA (CURR)_'GET DATA_^1_%STA- (ZERO),Q_$STORE IN U€€SER_^1_%RAO- ECCOR,I_%TALLY USER_^1_%RAO CURR_^1_%LDA CURR_^1_%EOR LWA_*CHECK FOR BUFFER COMPLETE_^1_%SAZ 2_S70*1558_^1_%JMP* BCDLOP_'MORE TO TRANSFER_^1SNRADR NUM 0_S68*1558_^1_%EQU WRITEC(*)_^1_%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_^1_%EQ€€U COMPL(*)_^1READCK LDA- ESTAT1,I_^1_%AND- BITMSK+5_^1_%SAN COMPLT_Q0308_^1_%EXT MAKEQ_^1CMPRD RTJ MAKEQ_^1COMPLT RTJ- (COMPRQ)_$COMPLETE THE REQUEST_^1_%RTJ+ RLAQ_)RELEASE AQ CHAN_2**MSOS 4.1**_^1_%STQ- I_,RELEASE AQ CHAN_2**MSOS 4.1**_^1_%JMP FIND_^1PACK_!NUM 0_,ENTRY FOR ASSEM/DISASSEM TO BINARY_^1_%LDA FWA_^1_%STA CURR_^1NXTGET RTJ* GETFWA_'GO GET FROM FWA BUFFER_^1_%C€€LR 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 REQUESTOR-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* STR€€FST_'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_^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_^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_$STORE DATA_^1_%LDA =N0_^1_%EQU QSAV1(*-1)_^1_%CLR Q_^1_%RAO- ECCOR,I_%TALLY STORAGE LOCATION_^1_%JMP* (STRFST)_^1SNRCHK EQU SNRCHK(*)_G**MSOS4.0**_^1NOISCK NOP 0_V0311_^1_%SUB* SNRADR_^1_%INA -NOISLN_P0226_^1_%SAZ NOISE_R02€€26_^1_%SAP NONOIS_Q0308_^1NOISE RAO* NOISCK_Q0308_^1NONOIS JMP* (NOISCK)_O0308_^1_%SPC 2_O**MSOS4.0**_^1SNR_"NUM $2D2E_R0226_^1_%NUM $2D2E_R0226_^1RECVR EQU RECVR(*)_O0309_^1_%STA ERRNO_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+11_#BIT 11_C0308_^1_%SAZ RECV_S0308_^1_%LDA- EREQST,I_O0308_^1_%ADD- BITMSK+14_#BIT 14_C0308_^1_%STA- EREQST,I_O0308_^1_%JMP READCK_^1TIMES NUM 0_€€V0311_^1TRIES NUM 0_^1_%EXT LOG_^1RECV_!LDQ- ELU,I_^1_%TRQ A_,LOGICAL UNIT TO A_^1_%EOR- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SAN T00001_'ITS NOT. CONTINUE_^1_%JMP* LPRTN_(IT IS, NO RECOVERY_^1T00001 QLS 6_^1_%LDA ERRNO_^1_%AAQ Q_^1_%ENA 15_^1_%RTJ LOG_^1_%RTJ SAVORG_'AVE ORG INFO_=0311_^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_^1BKSPCT BSS BKSPCT(1)_N0305_^1NBRBSP BSS NBRBSP(1)_^1WRCVRO CLR A_^1_%STA* NBRBSP_^1_%STA* TRIES_^1_%ENA 5_^1_%STA* TIMES_R0304_^1WRCVR LDA* TIMES_R0304_^1_%SAN DEBUMP_Q0309_^1_%STA- RTRECV,I_^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_)SKIP IF NO LP_<0304_^1_%JMP CKBKSP_'CHK BKSPCT_^1NOLP_!RTJ BKSSP_(BACKSPACE_@0311_^1_%RAO* NBRBSP_^1_%RAO* BKSPCT_Q0304_^1_%RTJ* FUNCDR_'CHK FD_C0304_^1_%JMP* REREAD_'TRY READ_A0304_^1_%JMP* WRCVR1_'CONTINUE DASHING_90304_^1FUNCDR NOP 0_V0308_^1_%LDA- ERDIRC,I_$FD FROM PHYSTB€€_;0304_^1_%SAP FUND1_(SKIP TO_B0304_^1_%ALS 1_,UPDATE DIRECTORY_90304_^1_%STA- ERDIRC,I_$RESTORE FD_?0304_^1_%RAO* FUNCDR_Q0309_^1FUND1 JMP* (FUNCDR)_$EXIT_E0304_^1_%SPC 2_V0304_^1REREAD ENQ 0_,PICK UP MOTION INDEX_50304_^1_%RTJ SWAP_*SET UP READ._^1_%RTJ CALAD_R0330_^1DUMRD ENQ 0_V0304_^1_%RTJ SWAP_*SET UP READ._^1_%RTJ CALAD_R0330_^1NONSTP LRS 8_,CHECK FOR PARITY._1**€€MSOS4.0**_^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- ECKSUM,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_^1FSTSNR LRS 8_,CHECK FOR PARITY._1**MSOS4.0**_^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_%SUB =XTRYNBR_^1_%SAN €€CONEOF_^1_%JMP* LPRTN_^1CONEOF RAO* TRIES_^1_%ENA 0_^1_%RTJ BKSSP_^1FMRTN RTJ BKSSP_^1_%ENQ 1_V0309_^1_%RTJ* SWAP_S0304_^1_%RTJ CHKSUM_(CHECK SUM SNR._^1_%STA- TCKSUM,I_^1_%RTJ CALAD_^1SNDSNR LRS 8_,CHECK FOR PARITY._1**MSOS4.0**_^1_%SAP ADVRCV_Q0310_^1_%RTJ BKSSP_^1_%JMP* WRTEOF_^1ADVRCV RTJ RESWAP_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_O0330_^1_%RTJ CHKSUM_^1_%STA- TCKSU€€M,I_^1_%RTJ* CALAD_R0330_^1OKNOW RTJ STUSCK_Q0330_^1_%JMP* ADVRV_R0330_^1_%LDA* ERRNO_^1_%JMP RECVR_R0330_^1ERRNO NUM 0_V0310_^1ADVRV CLR A_^1_%STA- RTRECV,I_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE RECOVERY._^1_%SUB* MODCOD_^1_%SAZ YESMOD_'SKIP IF MODE RECOVERY,_^1_%JMP NOPAR_^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_^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_^1SWAP_!NOP 0_V0308_^1_%STQ MOTIDX_Q0308_^1_%RTJ* CALCUT_^1CALCUT NOP 0_^1_%SQN USNR_^1_%LDA =XREADBF-*+2_#RELATIVE ADD OF BUFFER_00312_^1_%JMP* SWAP1_^1USNR_!LDA =X(SN€€R-CALCUT)_^1SWAP1 ADD* CALCUT_Q0312_^1_%STA FWA_^1_%ADD* LWATAB,Q_O0308_^1_%STA LWA_T0308_^1_%JMP* (SWAP)_Q0308_^1LWATAB NUM 8_V0304_^1_%NUM 2_V0304_^1READBF BSS READBF(8)_N0311_^1SAVORG NOP 0_V0308_^1_%LDA FWA_*ORG FWA_B0308_^1_%STA* TEMFWA_Q0308_^1_%LDA MOTIDX_(MOTION INDEX_<0308_^1_%STA* TEMIDX_Q0308_^1_%LDA SAVLWA_(ORG LWA_A0308_^1_%STA* TEMLWA_Q0308_^1_%JMP* (SAVORG)€€_O0311_^1TEMIDX BSS TEMIDX(1)_N0304_^1TEMLWA BSS TEMLWA(1)_N0226_^1TEMFWA BSS TEMFWA(1)_N0304_^1CALAD NOP 0_V0330_^1_%LDA =XALLRTN-REDY3_I0330_^1_%STA- RTRECV,I_O0330_^1CALAE JMP IOXFER_^1ALLRTN JMP* (CALAD)_P0330_^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 BEGNC€€K_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)_^1MODCOD NUM 15_+SWITCH MODE RECOVERY CODE_^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_%C€€LEAR MOTION FLAG_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* (BKSSP)_^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_^1RESWAP NOP 0_V0304_^1_%LDA* TEMIDX_'ORG MOTIDX_?0304_^1_%STA MOTIDX_Q0311_^1_%LDA* TEMFWA_Q0324_^1_%STA FWA_T0304_^1_%LDA* TEMLWA_'ORG LWA_B0304€€_^1_%STA LWA_T0304_^1_%JMP* (RESWAP)_O0304_^1TOTLSW NUM 0_V0311_^1ADVREV JMP ADVRV_^1RRCVR LDA SAVLWA_Q0309_^1_%STA LWA_T0309_^1_%LDA- STOLSW_Q0310_^1_%STA* TOTLSW_Q0311_^1LOPAGN CLR A_,SET SWS_B0305_^1_%STA* VR1_T0305_^1_%ENA -0_^1RRCVR1 RTJ* BKSSP_(BKSP_E0305_^1_%RTJ* CALAD_R0330_^1BKRD_!RTJ* STUSCK_'CHK STATUS_?0305_^1_%JMP* ADVREV_^1_%LDA =N0_*THIS LOOP COMPLETE_70305_€€^1VR1_"EQU VR1(*-1)_O0305_^1PINTCT EQU PINTCT(*-1)_^1_%EOR- TERM_S0309_^1_%SAZ STEP2_R0305_^1_%RAO* VR1_T0310_^1_%JMP* RRCVR1_'CONTINUE_A0305_^1STEP2 EQU STEP2(*)_O0309_^1_%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_^1MORD_!RTJ* STUSCK_Q0305_^1_%JMP* MODERR_Q0305_^1_%RTJ* BKSSP_R0€€305_^1_%RTJ* CALAD_R0330_^1MORD1 RTJ* STUSCK_'CHK STATUS_?0305_^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_(BKSP_E0305_^1_%RTJ* CKPINT_^1_%RTJ* CALAD_R0330_^1RELRD2 RTJ* CALAD_^1RELRD1 RTJ* CALAD_^1RELRD RTJ* STUSCK_Q0309_^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_^1OFFTO ENQ 0_^1_%STQ- RTRECV,I_^1_%JMP* FAILED_Q0305_^1MODERR LDA* MODCOD_'SET SWITCH MODE CODE._^1_%STA ERRNO_^1_%JMP ADVRV_^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_%SPC 5_^1E1732U LDA LSTPT_(GET LAST PDT ADDRESS_-**MSOS 4.1**_^1_%STA- I_^1_%CLR A_,HANGUP CODE IN A_^1_%SPC 5_^1FAILED STA- ETEMP2,I_$ENTRY FOR FIALURES_€€^1_%ENA 0_Q72*1658_^1_%STA MOTITR_'CLR A15 WRD4 IF SET_172*1658_^1_%ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%EIN 0_^1_%LDA- EREQST,I_O0308_^1_%ADD- BITMSK+14_N0308_^1_%STA- EREQST,I_O0308_^1*_81 CARD DELETED_665*1395_^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_$C€€HECK REWIND BIT_^1_%SAZ NOTRW_^1_%EOR- ESTAT1,I_$CLEAR REWIND BIT_^1_%STA- ESTAT1,I_$CLEAR REWIND BIT_665*1395_^1_%LDA RW_^1_%INA -1_^1_%STA RW_^1*_81 CARD DELETED_666*1395_^1_%EQU NOTRW(*)_L66*1395_^1_%RTJ+ RLAQ_)RELEASE AQ CHAN_2**MSOS 4.1**_^1_%STQ- I_,RELEASE AQ CHAN_2**MSOS 4.1**_^1_%LDQ- EWES,I_^1_%ENA 1_^1_%OUT 1_,CLEAR CONTROLLER AFTER FAILURE_^1_%NOP 0_^1_%RTJ MAK€€EQ_^1_%LDQ- ETEMP2,I_^1_%QLS 10_^1_%ADQ- ELU,I_(COMBINE LU NUMBER AND ERROR CODE_^1_%QLS 6_,POSITION_^1*_]_^1_%RTJ+ LOG_*GO LOG ERROR_5**MSOS 4.1**_^1_%LDA- ELU,I_(CURRENT LOGICAL UNIT_-**MSOS 4.1**_^1_%EOR- DIAGLU,I_$DIFFER WITH DIAGNOSTIC LU_(**MSOS 4.1**_^1_%SAZ CMPLIT_'DIAG. LU. COMPLETE IT_^1*_$SCHDLE ALTDEV,0,0,D_^1*_]_^1XXX_"RTJ- ($F4)_^1_%NUM 0_-SET AT CRXX+1._^1_%ADC€€ ALTDEV_^1GONXTP JMP NXTPT_(SEARCH REQUESTS OTHER LU_)**MSOS 4.1**_^1_%SPC 5_^1MOTION LDQ- EPTR,I_^1_%LDA- 4,Q_*GET USER-S CONTROL WORD_^1_%RTJ* XCTMOT_^1CMPLIT EQU CMPLIT(*)_^1_%JMP COMPLT_^1_%SPC 5_^1XCTMOT NUM 0_,USED BY MOTION AND RECOVERY_^1_%STA- ETEMP2,I_$SAVE MOTION CONTROL IN A_^1*_83 CARDS DELETED_568*1509_^1_%CLR A_^1_%RTJ UNTSEL_^1_%LDA- ESTAT1,I_L68*1509_^1_%A€€DD- BITMSK+5_$SET MOTION REQ. BIT_368*1509_^1_%STA- ESTAT1,I_L68*1509_^1_%LDA- ETEMP2,I_^1_%SAM NODENS_Q0308_^1_%AND- LOWBTS+3_"SAVE DENSITY (0-3) ONLY_^1*_81 CARD DELETED_^1_%STA* DENCOD_'SAVE DENSITY_^1_%LDA- ETEMP2,I_J72*1713_^1_%AND- HIHBTS+4_$REMOVE DENSITY(BITS 0-3)_,72*1713_^1_%STA- ETEMP2,I_J72*1713_^1_%JMP* DOMOT_(EXECUTE MOTIONS_^1NODENS AND- LOWBTS+11 MASK OUT INTERATI€€ONS_^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_%TRA Q_V0308_^1_%SQN TABDEX_Q0323_^1_%STA* MOTITR_'ZERO COUNT IF DO NOTHING_^1TABDEX JMP* SUBMOT,Q_$INDEX ON MOTION CODE_50323_^1DENCOD NUM 0_^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* FLFR_)SEARCH FILE FORWARD_$5_^1_%JMP* FLBK_)SEARCH FILE BACKWARD_#6_^1_%JMP* MOTSTR_'ADVANCE RECORD_*7_^1MCODS NUM $189,$289,$401,$601,$319,$399,$109_268*1131_^1MOTSTR LDA- EOTFLG,I_^1_%SAZ MOT1_^1_%ENA -$10_^1_%JMP* MOT2_^1MOT1_!ENA -0_^1MO€€T2_!AND* MCODS-1,Q_^1_%LDQ- EWES,I_'EQUIPMENT CODE_^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_%LDQ- I_,SCHEDULE REWIND CHECK_165*1395_^1_%SCHDLE REWCK,3,,1_^1_%JMP NXTPT_O65*1395_^1DONEM LDA* DENCOD_'PICK UP DENS€€ITY_^1_%SAZ NODEN_R0308_^1_%LDQ- ESTAT2,I_^1_%QLS 5_^1_%SQM DEN1_)SKIP IF AT LOAD POINT_^1_%ENA 6_,FAKE EXTERNAL REJECT_^1_%JMP* FAILED_^1DEN1_!AND- LOWBTS+1_^1_%TRA Q_^1_%LDA- BITMSK+2,Q_^1_%RTJ UNTSEL_^1NODEN LDA- ZROBIT+5_$CLEAR MOTION FLAG_^1_%AND- ESTAT1,I_O0308_^1_%STA- ESTAT1,I_O0308_^1_%JMP* (XCTMOT)_$RETURN TO CALLER_^1_%SPC 5_^1_%EQU WRFM(*)_^1_%RTJ* RINGCK_^1_%E€€NQ 2_^1_%JMP* MOTSTR_^1_%SPC 5_^1REW_"RTJ* LPCHK_(CHECK FOR LOAD POINT, RETURN IF NOT L.P._^1_%LDA- ESTAT1,I_O0308_^1_%ADD- BITMSK+6_O0308_^1_%STA- ESTAT1,I_O0308_^1_%RAO RW_^1*_812 CARDS DELETED_465*1395_^1_%RTJ* BUSYCK_^1_%ENQ 3_,INDEX FOR REWIND_^1_%JMP* MOTSTR_'START MOTION_^1_%SPC 5_^1BKSP_!RTJ* LPCHK_^1_%ENQ 1_,NOT LP SO BACKSPACE RECORD_^1_%JMP* MOTSTR_'START BACKSPACE€€ RECORD_^1_%SPC 5_^1REWUN ENA 0_^1_%STA* MOTITR_'0 INTO ITERATIONS_^1_%STA- ETEMP2,I_$CONTROL TO 0 TO TERMINATE_^1_%RTJ* BUSYCK_^1_%LDA- ESTAT2,I_^1_%AND- ZROBIT_'SET EQUIPMENT STATUS TO NOT READY_^1_%STA- ESTAT2,I_^1_%ENQ 4_^1_%JMP* MOTSTR_^1_%SPC 5_^1_%EQU FLFR(*)_^1_%ENQ 5_^1_%JMP* MOTSTR_^1_%SPC 5_^1FLBK_!RTJ* LPCHK_(CHECK LOAD POINT_^1_%ENQ 6_^1_%JMP* MOTSTR_'START FI€€LE BACKWARD SEARCH_^1_%EJT_]_^1MOTITR NUM 0_,NUMBER OF ITERATIONS ON MOTION REQUEST_^1NXTMOT LDA- ETEMP2,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_%JMP* DOMOT_^1NZITR LDA* MOTITR_'PICK UP ITERATIONS_^1_%SAZ MOTEXT_'SKIP IF DONE_^1_%INA -1_^1_%STA* MOTITR_^1_%SAZ MOTEXT_'SKIP IF DONE_^1_%JMP* DOMOT€€_(MORE ITERATIONS THIS MOTION_^1MOTEXT JMP* NODEN_(DONE ALL ITERATIONS THIS MOTION_^1BUSYCK NUM 0_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+1_O0308_^1_%SAN ISBUSY_Q0308_^1NOBUSY LDA LSTPT_^1_%STA- I_^1_%JMP* (BUSYCK)_^1ISBUSY LDQ- I_^1*_]_^1*_$SCHDLE BSYWAT,4,0,D_^1*_]_^1S1_#RTJ- ($F4)_(UNIT BUSY CHECK_^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,N4/4_^1_%NUM 0_^1_%JMP- (DISP)_^1BSYWAT STQ€€- I_,SAVE PHYSTB ADDRESS_^1_%RTJ* STATIN_'READ STATUS 1_^1_%ALS 14_+BUSY BIT IN A15_^1_%SAP 1_*NOT BUSY_^1_%JMP* BSYWAT+1_$BUSY SO LOOP_^1*_]_^1*_$SCHDLE NOBUSY,0,0,D_^1*_]_^1S2_#RTJ- ($F4)_^1_%NUM 0_-SET AT CRXX+3._^1_%NUM 0_^1_%JMP- (DISP)_'EXIT AFTER SCHEDLE_^1STATIN NUM 0_^1_%LDQ- EWES,I_^1_%INP -1_^1_%JMP* (STATIN)_^1_%SPC 5_^1RINGCK NUM 0_^1_%LDA- ESTAT2,I_O0308_^1_%€€SAP NORING_Q0308_^1_%JMP* (RINGCK)_O0308_^1NORING ENA 13_^1_%JMP FAILED_^1_%SPC 5_^1LPCHK NUM 0_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+10_N0308_^1_%SAN LODYES_Q0308_^1_%JMP* (LPCHK)_P0308_^1LODYES ENA 0_,YES ON LOAD POINT_^1_%STA* MOTITR_'ZERO ITERATIONS_^1_%JMP* NXTMOT_'NEXT MOTION_^1*_832 CARDS DELETED_^1_%SPC 5_^1WAIT_!STQ- I_,SAVE PHYSTB ADDRESS_^1_%RTJ* STATIN_^1_%AL€€S 3_,CONTROLLER ACTIVE IN A15_^1_%SAP UPSCD_(NOT ACTIVE_^1_%JMP* WAIT+1_'STILL ACTIVE_^1UPSCD LDQ- I_,CONTRL NOT ACTIVE, SCHED UP_^1*_]_^1*_$SCHDLE CONSEL,0,0,D_^1*_]_^1UPIT_!RTJ- ($F4)_^1_%NUM 0_-SET AT CRXX+2._^1_%NUM 0_^1_%JMP- (DISP)_^1_%EJT_]_^1*_$BCD-ASCII BUFFER CODE CONVERSION ROUTINES_^1_%SPC 3_^1**********************************************************************€€**_^1*_]_'*_^1*_*ASCII TO BCD CONVERSION SUBROUTINE_8*_^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 BUF€€FER. *_^1*_]_'*_^1*_*CALL_)RTJ A2BCD_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 BY SUBROUTINE_3*_^1************************************************************************_^1_%SPC 1_^1A2BCD 0_"0000_"ENTRY POINT TO ASCII TO BCD CONVERTION SUBROUTINE_^1_%STA* BUFFER_'SAVE STARTING ADDRESS€€ OF BUFFER_^1_%LDA- I_^1_%STA* SAVEI_(SAVE CONTENTS OF I REGISTER_^1LOOPA ENA $7F_*MASK TO A_^1_%INQ -1_+DECREMENT Q BY ONE_^1_%SQP CONVA-*-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* (A2BCD) EXIT FROM SUBROUTINE WITH BUFFER CONVERTED_^1_%SPC 1_^1CONVA STQ- I_,SET UP I AS BUFFER INDEX_^1_%LDQ* (€€BUFFER),I_"GET WORD FROM BUFFER_^1_%LAQ Q_,MASK TO GET LOWER CHARACTER_^1_%RTJ* LIMCK_(ASSURE CHARACTER BETWEEN 20 AND 5F (BAD=20)_^1_%LDQ* TABLE,Q_%GET BCD CODE - USE ASCII CHARACTER AS INDEX_^1_%LAQ Q_,MASK TO GET BCD CODE (LOWER HALF OF WORD)_^1_%STQ* TEMP_)SAVE FIRT 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_%RTJ* LIMCK_(ASSURE CHARACTER BETWEEN 20 AND 5F (BAD=20)_^1_%LDQ* TABLE,Q_%GET BCD CODE - USE ASCII CHARACTER AS INDEX_^1_%LAQ A_,MASK TO GET BCD CODE (LOWER HALF OF WORD)_^1_%ALS 8_,SHIFT CODE TO UPPER HALF_^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* LOOPA_(LOOP BACK FOR NEXT€€ WORD IN BUFFER_^1LIMCK 0_"0_^1_%INQ -$20_^1_%SQP 1_,SKIP IF NOT 0-1F_^1_%ENQ 0_,SET TO 20 FOR SPACE_^1_%INQ -$40_^1_%SQM 1_,SKIP IF NOT 60-7F_^1_%ENQ -$40_)SET TO 20 FOR SPACE_^1_%INQ $60_*RESTORE ORIGINAL CHARACTER_^1_%INA -$40_)MAKE 3F MASK_^1_%LAQ Q_,TRUNCATE Q TO 6 BITS_^1_%INA $40_*RESTORE 7F MASK_^1_%JMP* (LIMCK)_^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 MODI€€FIED 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 ADDR€€ESS OF BUFFER_^1_%LDA- I_^1_%STA* SAVEI_(SAVE CONTENTS OF I REGISTER_^1LOOPB LDA =N$00FF_%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 BUFF€€ER_^1_%LDQ* (BUFFER),I_"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_%LDA* TABLE,Q_%GET ASCII CODE - USE BCD CODE AS INDEX_^1_%AND =N$FF00_%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_%SPC 5_^1BUFFER NUM 0_,ADDRESS OF BUFFER_^1SAVEI NUM 0_,TEMPORARY STORAGE OF I_^1TEMP_!NUM 0_,TEMPORARY STORAG€€E OF PARTIAL CONVERSION_^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*_5BCD TO ASCII_$**_$ASCII TO BCD_^1*_I**_^1TABLE NUM $261F_(00_%3A_^1_%NUM $3131_'01_!1_!31_'**_'41_!€€A_!31_^1_%NUM $3232_'02_!2_!32_'**_'42_!B_!32_^1_%NUM $3333_'03_!3_!33_'**_'43_!C_!33_^1_%NUM $3434_'04_!4_!34_'**_'44_!D_!34_^1_%NUM $3535_'05_!5_!35_'**_'45_!E_!35_^1_%NUM $3636_'06_!6_!36_'**_'46_!F_!36_^1_%NUM $3737_'07_!7_!37_'**_'47_!G_!37_^1_%NUM $3838_'08_!8_!38_'**_'48_!H_!38_^1_%NUM $3939_'09_!9_!39_'**_'49_!I_!39_^1_%NUM $3021_'0A_!0_!30_'**_'4A_!J_!21_^1_%NUM $3D22_'0B_€€!=_!3D_'**_'4B_!K_!22_^1_%NUM $2723_%0C_%27_'**_'4C_!L_!23_^1_%NUM $3A24_'0D_%26 (3A)_!**_'4D_!M_!24_^1_%NUM $3E25_^1_%NUM $2226_^1_%NUM $2027_'10 SPACE 20_'**_'50_!P_!27_^1_%NUM $2F28_'11_!/_!2F_'**_'51_!Q_!28_^1_%NUM $5329_'12_!S_!53_'**_'52_!R_!29_^1_%NUM $5412_'13_!T_!54_'**_'53_!S_!12_^1_%NUM $5513_'14_!U_!55_'**_'54_!T_!13_^1_%NUM $5614_'15_!V_!56_'**_'55_!U_!14_^1_%NUM $5€€715_'16_!W_!57_'**_'56_!V_!15_^1_%NUM $5816_'17_!X_!58_'**_'57_!W_!16_^1_%NUM $5917_'18_!Y_!59_'**_'58_!X_!17_^1_%NUM $5A18_'19_!Z_!5A_'**_'59_!Y_!18_^1_%NUM $5F19_^1_%NUM $2C3D_^1_%NUM $281E_^1_%NUM $252D_^1_%NUM $5C2F_^1_%NUM $401A_^1_%NUM $2D10_'20_!-_!2D_'**_'20 SPACE 10_^1_%NUM $4A2A_'21_!J_!4A_'**_'21_%2A_^1_%NUM $4B0F_^1_%NUM $4C3F_^1_%NUM $4D2B_'24_!M_!4D_'**_'24_!$€€_!2B_^1_%NUM $4E1D_^1_%NUM $4F1D_^1_%NUM $500C_'27_!P_!50_'**_'27_%0C_^1_%NUM $511C_'28_!Q_!51_'**_'28_!(_!1C_^1_%NUM $523C_'29_!R_!52_'**_'29_!)_!3C_^1_%NUM $212C_'2A_%21_'**_'2A_!*_!2C_^1_%NUM $2430_'2B_!$_!24_'**_'2B_!+_!30_^1_%NUM $2A1B_'2C_!*_!2A_'**_'2C_!,_!1B_^1_%NUM $5D20_^1_%NUM $3B3B_^1_%NUM $5E11_^1_%NUM $2B0A_^1_%NUM $4101_'31_!A_!41_'**_'31_!1_!01_^1_%NUM $4202_'€€32_!B_!42_'**_'32_!2_!02_^1_%NUM $4303_'33_!C_!43_'**_'33_!3_!03_^1_%NUM $4404_'34_!D_!44_'**_'34_!4_!04_^1_%NUM $4505_'35_!E_!45_'**_'35_!5_!05_^1_%NUM $4606_'36_!F_!46_'**_'36_!6_!06_^1_%NUM $4707_'37_!G_!47_'**_'37_!7_!07_^1_%NUM $4808_'38_!H_!48_'**_'38_!8_!08_^1_%NUM $4909_'39_!I_!49_'**_'39_!9_!09_^1_%NUM $3F0D_^1_%NUM $2E2E_^1_%NUM $293E_^1_%NUM $5B0B_^1_%NUM $3C0E_^1_%€nNUM $233A_^1_%SPC 2_^1************************************************************************_^1_%END_]_^__nPD1738 CSY/ A35 P€1_%NAM D1738_(DECK-ID A35 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*P17380 ADC $5209_(00 SCHEDULER CALL_^1*_%ADC I1738_(01 INITIATOR ADDRESS_^1*_%ADC C1738_(02 CONTINUATOR ADDRESS_^1*_%ADC E1738_(03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 €€ DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $0181_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $1006+T854_"08 REQUEST STATUS_^1*_%NUM $0200_(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 COUNTER_^1*_%NUM 0_,14 DATA TRANSFER FUNCTI€€ON_^1*_%NUM 0_,15 SECTOR NUMBER_^1*_%NUM $811A_(16 NO COMPARE FLAG / DIRECTOR FUNCTION_^1*_%NUM 0_,17 SPARE_^1*_%NUM 0_,18 OVERLAY AREA (SCHEDULER CALL)_^1*_%NUM 0_,19 OVERLAY AREA (COMPLETION ADDRESS)_^1*_%NUM 0_,20 OVERLAY AREA (THREAD)_^1*_%NUM 0_,21 OVERLAY AREA (LOGICAL UNIT)_^1*_$ADC U17380_'22 DIAGNOSTIC LU_^1*_$ADC P17381_'23 PHYSTB THRAD_^1_%SPC 2_^1 SPC €€1_]_^1*_*THE MASS MEMORY ADDRESS GIVEN IN THE CALL_^1*_*IS INTERPRETED AS FOLLOWS_^1*_*FOR READ/WRITE AS A WORD ADDRESS_^1*_*FOR FREAD/FWRITE AS A SECTOR ADDRESS (=96 WORDS)_^1*_]_^1*_*ERROR EQUIVALENCES_^1*_]_^1_%EQU INRJER(5)_#ENTERAL REJECT_3**MSOS 4.1**_^1_%EQU EXRJER(6)_#EXTERNAL REJECT_2**MSOS 4.1**_^1_%EQU SEEKER(16)_"SEEK ERROR_7**MSOS 4.1**_^1_%EQU ADRER(18)_#ADDRESS €€ERROR_4**MSOS 4.1**_^1_%EQU PROTER(19)_"PROTECT ERROR_4**MSOS 4.1**_^1_%EQU ZROER(48)_#SECTOR ZERO ERROR_0**MSOS 4.1**_^1_%EQU PARER(3)_$PARITY ERROR_5**MSOS 4.1**_^1_%EQU LOSTER(1)_#LOST DATA ERROR_2**MSOS 4.1**_^1_%EQU CKWDER(20)_"CHECKWORD ERROR_2**MSOS 4.1**_^1_%EQU COMPER(7)_#COMPARE ERROR_4**MSOS 4.1**_^1_%SPC 3_^1_%ENT I1738,C1738,E1738_^1_%EXT LOG_M**MSOS4.0**_^1_%€€EQU CLCKVA(1)_#1 SEC. FOR DIAGNOSTIC CLOCK_^1_%EQU ZERO($22),WDSEC(6)_^1_%EQU AFNR($B5) ENTRY POINT TO FNR_^1_%EQU ASABS($BD) . . POINT TO ABSOLUTIZING S_^1_%EQU ACABS($BE) . . POINT TO ASOLUTIZING C_^1_%EQU ADISP($EA) . . POINT TO DISPATCHER_^1_%EQU ACOMPC($B6) . . POINT TO COMPLETION_^1_%EQU CLCK(4) TIME DIFFERENTIAL PHYSTB+4_^1_%EQU ELU(5)_'LOGICAL UNIT PHYSTB 5_^1_%EQU€€ GENST(7) Q-REG TO OBTAIN STATUS_^1_%EQU SYST(8) SYSTEM STATUS_^1_%EQU RQST(9) REQUEST STATUS_^1_%EQU FWD($A),LWD($B),STS($C)_^1_%EQU ERCONT($D)_^1_%EQU FDATAF($E),FILEAD($F),FCONN($10)_^1_%EQU DIAGLU(22)_"DIAGNOSTIC LOGICAL UNIT_***MSOS 4.1**_^1_%EQU OTHER(23)_#PHYSTAB THREAD_3**MSOS 4.1**_^1_%EQU ZROBIT($33),NZERO($12),LPMSK(2),ONEBIT($23)_^1_%EQU H3FFF(LPMSK+14),H1FFF(LPMS€€K+13),H7FFF(LPMSK+15)_^1_%EQU H8000(ONEBIT+15)_^1_%EQU HF000($1E)_^1_%EQU EPTR(6)_^1*_*FOR OVERLAY, WORDS 18 TO 21 MUST BE AVAILABLE IN THE P.D.T._^1_%EQU ECALL1(18),ECALL2(19),ECALL4(21)_^1_%EQU PLU(3)_^1*_]_^1* ALL ROUTINES ARE ENTERED WITH ADDRESS OF_^1*_$PHYSTB IN Q-REG._^1*_]_^1*_"I N I T I A T O R_^1*_]_^1I1738 STQ- I_,INITIATOR_8**MSOS 4.1**_^1_%LDQ- OTHER,I_%IS THERE€€ A PAIRED DISK_^1_%SQZ DK-*-1_'SKIP IF NO_^1_%SQP 1_^1_%ADQ- H7FFF_^1_%LDA- SYST,Q_'IS THE OTHER ONE BUSY_^1_%SAP DK-*-1_'SKIP IF NO_^1_%LDA- OTHER,Q_%TELL THE OTHER WE WANT IN_^1_%AND- H7FFF_(BY SETTING B15 OF-OTHER-IN THE PHYSTB_^1_%EOR- H8000_^1_%STA- OTHER,Q_^1_%JMP- (ADISP)_^1DK_#RTJ- (AFNR)_^1_%JMP* CHECK EXIT WHEN NO MORE REQUESF_^1_%LDA- LWD,I_(GET LAST WORD ADDRESS_^1_€€%INA -1_^1_%LDQ- FWD,I_(GET FIRST WORD ADDRESS_-**MSOS 4.0_^1_%RTJ SIGNCK_'CHECK IF SIGNS OF FWD SAME AS LWAD **MSOS 4.0_^1_%JMP* LENOK_(RETURN HERE IF LWAD LARGER THAN FWAD**MSOS 4.0_^1_%JMP* NOTOK_(RETURN HERE IF FWAD LARGER THAN LWAD**MSOS 4.0_^1_%SUB- FWD,I_(IF SIGNS ARE SAME,RETURN IS HERE FOR**MSOS 4.0_^1_%SAP LENOK-*-1_#COMPARE--SKIP IF LWD IS GT FWD_$**MSOS 4.0_^1NOTOK €€ LDA- FWD,I_(NO,MAKE LWA GT FWA_1**MSOS 4.0_^1_%INA 1_^1_%STA- LWD,I_^1LENOK LDQ- EPTR,I_I**MSOS 4.1**_^1_%LDA- (ZERO),Q_%READ FIRST IN LIST_^1_%AND =N$3E00_%MASK FOR REQUEST CODE_.**MSOS 4.0_^1_%STA TEMREQ_/SAVE REQUEST CODE_^1_%ARS 9_O**MSOS4.0**_^1_%INA -14_*CHECK FOR MOTION REQUEST_***MSOS4.0**_^1_%SAN NOTMC-*-1_#SKIP IF NOT MOTION REQUEST_(**MSOS4.0**_^1_%STA- FWD,I_K**€€MSOS4.0**_^1_%STA- LWD,I_K**MSOS4.0**_^1_%JMP* USEOWN_'MOTION REQUEST. IGNORE REQUEST_"**MSOS4.0**_^1NOTMC LDA TEMREQ_J**MSOS4.0**_^1_%SAN CHKREQ-*-1_"SKIP IF NOT DIRECTORY CALL_^1_%LDA- WDSEC,Q_!COMPLETE PET FOR A SYSTEM_^1*_]_^1*_=DIRECTORY REQUEST_^1_%STA- FILEAD,I SECTOR NUMBER_^1_%RTJ* READOP_^1_%JMP* USEOWN_^1*_]_^1CHKREQ AND- ONEBIT+11_#CHECK IF FORMAT R/W_^1_%SAN NORM€€AL-*-1_"YES--NORMAL FOR DISK_^1_%JMP LIKDUM_'NO LOOK LIKE A DRUM--SECTOR EQU ONE WORD_^1NORMAL LDA- (ZERO),Q_$GET REQUES WORD_4**MSOS 4.0_^1_%AND- ONEBIT+14_#CHECK FOR PART 1 TYPE REQUEST_%**MSOS 4.0_^1_%SAZ NORMO-*-1_#SKIP IF PART 0 TYPE REQUEST_(**MSOS 4.0_^1_%LDA- 7,Q_*GET SECTOR ADDRESS_1**MSOS 4.0_^1_%JMP* NORM1_L**MSOS 4.0_^1NORMO RTJ- (ASABS)_%GO ABSOLUTIZE STARTING ADDRE€€SS_$**MSOS 4.0_^1_%TRA Q_$ADDRESS OF S_^1_%LDA- 2,Q_"SECTOR NUMBER_^1NORM1 STA- FILEAD,I_$STORE IN PYSTAB_4**MSOS 4.0_^1_%LDQ- RQST,I_'REQUEST STATUS_^1_%LRS 1_^1_%SAM FREAD-*-1_^1_%RTJ CKOVRL_'MOVE PARAMS IF OVERLAY REQ_^1_%RTJ* READOP_'FORMAT READ_^1_%JMP* USEOWN_^1FREAD RTJ* WRITOP_'FORMAT WRITE REQUEST_^1* PREPARE FOR COMPLETION ROUTINE_^1*_]_^1USEOWN RTJ- (ACOMPC)_$COMP€€LETION HANDLER_/**MSOS 4.1**_^1_%LDA- OTHER,I_^1_%SAP USE10_(SKIP IF OTHER DEVICE QUIET_)**MSOS 4.0_^1_%AND- NZERO-1_J**MSOS 4.0_^1_%TRA Q_P**MSOS 4.0_^1_%LDA- OTHER,Q_%TELL OTHER WE WANT IN AGAIN_^1_%AND- H7FFF_^1_%EOR- H8000_^1USE07 STA- OTHER,Q_^1_%STQ- OTHER,I_^1_%STQ- I_,SET UP OTHER DISK FOR WORK_^1USE10 JMP* DK_^1_%SPC 2_^1CHECK LDQ- OTHER,I_^1_%SQM CHECK1-*-1_"SKIP I€€F OTHER IS WAITING_^1_%JMP- (ADISP)_%NOTHING MORE TO DO_^1CHECK1 ADQ- NZERO-1_J**MSOS 4.0_^1_%LDA- OTHER,Q_%SET UP OTHER FOR WORK_.**MSOS 4.0_^1_%AND- H7FFF_^1_%JMP* USE07_^1*_$*_"READ/WRITE THE DISK FROM FILEAD ON DISK TO OR_^1*_$*_"FROM FWD TO LWD-1_^1*_]_^1READOP 0_"0_,READ_^1_%ENA 3_,READ INDICATOR_^1_%JMP* RD2_^1WRITOP 0_"0_,FORMAT WRITE_^1_%LDA* WRITOP_'SAVE RETURN ADDRESS I€€N READOP_^1_%STA* READOP_/SET UP FOR RETURN_^1_%ENA 2_,WRITE INDICATOR_^1RD2_"ADD- GENST,I_!FUNCTION FOR GETTING STATUS_^1_%STA- FDATAF,I_!FUNCTION FOR DATA TRANSFER_^1_%LDA- FILEAD,I_$SYSTEM SECTOR NUMBER_^1*_84 CARDS DELETED_^1_%ENQ 0_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%STA- FILEAD,I_!CONVERTED TO CYLINDER NO._^1_%LDA- ERCONT,I_"ERROR COUNTER_^1_%AND- HF000_(KEEP UNIT NUMB€€ER_!CLEAR COUNTER_^1_%STA- ERCONT,I_!CLEAR COUNTER_^1*_]_^1*_8POSITION HEAD WITH A LOAD FILE_^1*_8ADDRESS COMMAND_^1*_8THIS SECTION IS EXECUTED FIRST_^1SEEKOP ENA 0_,CLEAR COMPARE SWITCH TO ZERO_^1COMPOP STA* COMPAR_^1_%LDA- RQST,I_'SET SEEK SWITCH TO 1 (BIT 3 OF RQST,I)_^1_%AND- ZROBIT+3_^1_%INA 8_^1_%STA- RQST,I_^1_%LDA- FCONN,I_%LOAD ADDRESS AND SELECT INTERRUPTS_^1_%AND =N$3€€00_'MASK UNIT SELECT_^1_%INA $14_*SELECT ALARM AND NEXT READ AND NOT_^1*_8BUSY INT_^1_%LDQ- GENST,I_%DIRECTOR FUNCTION(1)_^1_%OUT DEVERR-*_$CONNECT,SELECT INTERRUPTS_^1_%LDA- FILEAD,I_$DISK ADDRESS FOR SEEK_^1_%INQ 1_,DIRECTOR FUNCTION(2)_^1_%OUT DEVERR-*_$INITIATE SEEK OP._^1_%JMP* EXIT_^1* C O N T I N U A T O R_^1*_]_^1*_*AND ERROR ENTRY_^1*_8CONTROL RETURNS HERE WHEN AN_^1*€€_8INTERRUPT IS RECEIVED FROM THE_^1*_81738 CONTROLLER_^1*_8SELECT THE ACTIVE DISK DRIVES_^1*_8PHYSTB (B15 OF SYST=1)._^1*_]_^1*_*TIME OUT ERROR USED TO RECOVER FROM CONTROLLER_^1*_*BUSY AND NOT ABLE TO ACCEPT NEW OUTPUT COMMANDS_^1E1738 NOP 0_N**MSOS 4.1**_^1C1738 STQ- I_,PHYSTB + 0_7**MSOS 4.1**_^1_%LDA- SYST,I_^1_%SAM DKO1-*-1_^1_%LDA- OTHER,I_^1_%SAZ DKO1_^1_%AND- H7FFF_^1_€€%STA- I_^1DKO1_!ENA -1_^1_%STA- CLCK,I_^1_%LDQ- GENST,I_^1_%LDA- ELU,I_(CHECK FOR NOT ACTIVE_^1_%SAN DKCO2_J**MSOS 4.1**_^1_%ENA 2_,CLEAR INTERRUPT_2**MSOS 4.1**_^1_%OUT 1_N**MSOS 4.1**_^1_%NOP 0_N**MSOS 4.1**_^1_%JMP- (ADISP)_H**MSOS 4.1**_^1DKCO2 INP DEVERR-*_^1_%STA- STS,I_^1_%ENA 2_^1_%OUT DEVERR-*_^1_%LDA* OKMSK_^1_%ADD* COMPAR_'(MAY BE 0 OR $40)_^1_%AND- STS,I_(LOOK €€AT THESE BITS IN THE STATUS_^1*_8WORD_^1_%EOR* OKSTS_^1_%SAZ DIK02-*-1_^1_%JMP* DETERR_#SOME ERROR HAS OCCURED_^1DIK02 LDA- RQST,I_^1_%AND- ONEBIT+3_$GET SEEK INDICATOR_^1_%SAN DATA_)SEEK OPERATION IS NOW COMPLETE_^1_%LDA- FCONN,I_%IF BIT 15 OF FCONN IS A 1,DO NOT_^1*_8COMPARE_^1_%SAP CMP1_)IT IS NOT SET SO COMPARE AFTER_^1*_8READ/WRITE_^1_%JMP* (READOP)_$RETURN TO INITIATOR PO€€RTION OF DRIVER_^1*_8HAS TRANSFER BEEN COMPARED_^1CMP1_!LDA* COMPAR_^1_%SAZ CMP2_)IF COMPAR .EQ. 0, TRANSFER HAS NOT_^1*_8BEEN COMPAR_^1_%JMP* (READOP)_$EXIT_^1CMP2_!ENA $40_*COMPARE BIT IN STATUS WORD_^1_%JMP* COMPOP_'REPEAT ENTIRE OPERATION BUT COMPARE_^1*_8INSTEAD OF READING OR WRITING_^1_%EJT_R**MSOS4.0**_^1* **********************************************************_^1* *€€*********************************************************_^1*_!B I T_!P O S I T I O N_!I N_!S T A T U S_^1* -----------------------------------------------------------_^1*_!15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0_^1*_!0_!1_!1_!1_!1_!1_!1 1 0 0 1 1 0 1 1 1 OK **MSOS4.0**_^1*_!X_!0_!0_!0_!0_!0_!0 0 X X 0 1 X 1 0 1 OK **MSOS4.0**_^1* ----------------€€-------------------------------------------_^1*_!N_!P_!S_!D_!A_!S_!L C P N A E O I B R_^1*_!O_!R_!T_!E_!D_!E_!O H R O L N N N U E_^1*_!T_!O_!O_!F_!D_!E_!S E O_#A D_#T S A_^1*_%T_!R_!E_!R_!K_!T C T C R_#C E Y D_^1*_!U_!E_!A_!C_!E_)K E O M O Y R_#Y_^1*_!S_!C_!G_!T_!S_!E_!D W C M_#F L R_^1*_!E_!T_!E_!I_!S_!R_!A O T P_'I U_^1*_!D_*V_%R_!T R€€ E A_#O N P_^1*_%F_!P_!E_!E_!O_!A D D R_#P D T_^1*_%A_!A_%R_!R_+E_#E E_^1*_%U_!R_!T_!R_)E_*R R_^1*_%L_!I_!R_!O_)R_*A_^1*_%T_!T_!A_!R_)R_*T_^1*_*Y_!C_-O_*I_^1*_.K_-R_*O_^1*_IN_^1*_]_^1* **********************************************************_^1COMPAR NUM 0_,COMPARE SWITCH (0 OR $40)_^1OKMSK NUM $7F37_(SEE ABOVE FOR MASK_/**MSOS4.0**_^1OKSTS NUM $0015_(EOP, INTER€€RUPT AND READY = 1_%**MSOS4.0**_^1*_]_^1*_8DATA TRANSFER IS EXECUTED AFTER_^1*_8HEADS ARE ON CYLINDER_^1*_]_^1DATA_!LDA- RQST,I_'CLEAR SEEK INDICATOR_^1_%AND- ZROBIT+3_$CLEAR BIT 3 OF RQST WORD_^1_%STA- RQST,I_^1_%LDA- STS,I_(CHECK FOR ON CYLINDER_^1_%AND- ONEBIT+3_^1_%SAN ONCYL_^1SEKER ENQ SEEKER_I**MSOS 4.1**_^1_%JMP* REPEAT_^1ONCYL LDQ- GENST,I_%COMPARE FILE ADDRESS_^1*_8AGA€€INST THAT REQUESTED_^1_%INQ 1_,DIRECTOR FUNCTION_^1_%CLR A_^1_%INP DEVERR-*_^1_%EOR- FILEAD,I_$COMPARE TO REQUESTED FILE ADDRESS_^1_%SAZ ONCYL1_'OK,IT IS ON CYLINDER_^1_%LDA- FILEAD,I_^1_%JMP* SEKER_J**MSOS 4.1**_^1*_]_^1ONCYL1 LDQ- GENST,I_%SELECT INTERRUPTS_^1_%LDA- FCONN,I_^1_%AND =N$300_'MASK UNIT SELECT_^1_%INA $14_*SELECT ALARM AND NEXT READY AND_^1*_8NOT BUSY INT_^1_%O€€UT DEVERR-*_$CONNECT AND SELECT INTERRUPTS_^1_%IIN 0_,PREVENT CONCURRENT USE OF (FWD-1)_^1_%LDQ- FWD,I_(PREPARE FOR DATA TRANSFER_^1_%SQN NONZRO_'SPECIAL CASE FOR FWD = 0_^1_%LDQ- ($E9)_(MODE SWITCH_7**MSOS4.0**_^1_%SQN M65K_)SKIP IF 65K_7**MSOS4.0**_^1_%LDQ- H7FFF_($7FFF - 32 K_6**MSOS4.0**_^1_%JMP* SAVLWA_J**MSOS4.0**_^1M65K_!LDQ- NZERO_($FFFF - 65K_7**MSOS4.0**_^1_%JMP* SAVL€€WA_J**MSOS4.0**_^1NONZRO INQ -1_+GET FWD LESS 1_^1SAVLWA STQ* TEMP_)SAVE ADDRESS OF FWA-1_-**MSOS4.0**_^1_%LDA- (ZERO),Q_%CONTENT OF FWD-1_^1_%STA* TEMP1_"(FWD-1)_^1_%LDA- LWD,I_)LAST WORD ADD. +1_^1_%STA- (ZERO),Q_%SET IN FWD-1_^1_%LDQ- FDATAF,I_$DATA TRANSFER FUNCTION_,**MSOS4.0**_^1_%LDA* COMPAR_'IF(COMPAR.EQ. 0)THEN PERFORM A_^1*_8READ/WRITE_^1_%SAZ RWOP_^1_%LDQ- GENST,I_%LOA€€D Q WITH COMPARE FUNCTION (5)_^1_%INQ 4_^1RWOP_!LDA* TEMP_)FIRST WORD ADDRESS LESS 1_^1_%OUT ONCE-*_^1_%LDA- (ZERO),I_$THESE COMMANDS ARE INCLUDED TO_(68*1373_^1_%LDA- (ZERO),I_$ALLOW THE CONTROLLER TIME TO ACCESS_"68*1373_^1*_8FWA-1_A68*1373_^1_%LDQ* TEMP_^1_%LDA* TEMP1_!RESTORE FWD-1_^1_%STA- (ZERO),Q_^1EXIT_!ENA CLCKVA_^1_%STA- CLCK,I_'SET DIAGNOSTIC TIMER CLOCK ACTIVE_^1_%EI€€N 0_,FOR 1 SEC ENABLED AFTER(FWD-1) RESTORED_^1_%JMP- (ADISP)_^1TEMP_!ADC 0_^1TEMP1 ADC 0_^1*_]_^1*_]_^1**************************************************************_^1*_$DIAGNOSTIC SECTION FOR DISKWD_^1ONCE_!NOP 0_,I/O REJECT FROM READ/WRITE SECTION_^1_%LDQ* TEMP_)EXTERNAL REJECT_^1_%LDA* TEMP1_^1_%STA- (ZERO),Q_$RESTORE CONTENTS OF FWD-1_^1_%EIN 0_^1_%JMP* EXTREJ_'PROCESS €€LIKE A NORMAL REJECT_^1*_8ALL REJECTS NORMALLY COME HERE_^1DEVERR JMP* INTREJ_'INTERNAL REJECT- FATAL CALL DIAGNOSTIC_^1EXTREJ ENQ EXRJER_'EXTERNAL REJECT CODE IN Q_(**MSOS 4.1**_^1_%JMP* DET3_)OUTPUT MASS STG. ERR MSG._)**MSOS4.0**_^1INTREJ ENQ INRJER_I**MSOS 4.1**_^1_%JMP* DET3_)OUTPUT MASS STG. ERR MSG._)**MSOS4.0**_^1DETERR LDA- STS,I_(ERROR CODE TO BE DETERMINED_^1*_8FROM ST€€ATUS_^1_%ALS 1_,TEST FOR A PROTECT FAULT_***MSOS4.0**_^1_%SAP DETA_)SKIP IF NOT_7**MSOS4.0**_^1_%ENQ PROTER_I**MSOS 4.1**_^1_%JMP* REPEAT_J**MSOS4.0**_^1DETA_!ALS 1_,TEST FOR A STORAGE PARITY ERROR_"**MSOS4.0**_^1_%SAP DETB_)SKIP IF NOT_7**MSOS4.0**_^1_%ENQ PARER_(PARITY ERROR_!(ERROR 3)_)**MSOS 4.1**_^1_%JMP* REPEAT_J**MSOS4.0**_^1DETB_!ALS 2_,TEST FOR AN ADDRESS ERROR_)**M€€SOS4.0**_^1_%SAP DETC_)SKIP IF NOT_7**MSOS4.0**_^1_%ENQ ADRER_(ADDRESS ERROR_!(ERROR_!18)_$**MSOS 4.1**_^1_%JMP* REPEAT_J**MSOS4.0**_^1DETC_!ALS 1_,TEST FOR A SEEK ERROR_-**MSOS4.0**_^1_%ENQ SEEKER_'SEEK ERROR_!(ERROR_!16)_(**MSOS 4.1**_^1_%SAM REPEAT_'SKIP IF A SEEK ERROR_.**MSOS4.0**_^1_%ALS 1_,TEST FOR LOST DATA_0**MSOS4.0**_^1_%ENQ LOSTER_'LOST DATA_"(ERROR 1)_***MSOS 4€€.1**_^1_%SAM REPEAT_'SKIP IF LOST DATA_1**MSOS4.0**_^1_%ALS 1_,TEST FOR A CHECKWORD ERROR_(**MSOS4.0**_^1_%ENQ CKWDER_'CHECKWORD ERROR (ERROR 20)_^1_%SAM REPEAT_'SKIP IF A CHECKWORD ERROR_)**MSOS4.0**_^1_%ENQ COMPER_'COMPARE ERROR_!(ERROR_!7)_%**MSOS 4.1**_^1REPEAT RAO- ERCONT,I_$BUMP THIS REQUEST ERROR COUNT_^1_%LDA- ERCONT,I_^1_%AND- LPMSK+4_^1_%INA -10_*PER RECOMMENDATION €€IN PERIPHERAL_^1*_8REF MANUAL_^1_%SAP DET3_)IF MORE THAN 10 ATTEMPS,CALL THE_^1*_8DIAGNOSTIC OTHERWISE WAIT FOR_^1*_8CONTROLLER TO GO NOT BUSY_^1_%LDQ- GENST,I_^1_%CLR A_^1_%INP DEVERR-*_^1_%AND- LPMSK+2_%TEST FOR READ AND NOT BUSY_^1_%INA -1_^1_%SAN WAIT_^1_%JMP SEEKOP_'ATTEMPT TO SEEK AGAIN_^1WAIT_!JMP* EXIT_^1DET3_!LDA- ELU,I_(MAKE UP ERROR WORD_/**MSOS 4.1**_^1_%ALS 6_N*€€*MSOS 4.1**_^1_%EAQ Q_N**MSOS 4.1**_^1_%LDA- SYST,I_I**MSOS 4.1**_^1_%AND- H3FFF_^1_%ADD- ONEBIT+14_^1_%STA- SYST,I_'SET E = 1_^1_%LDA- RQST,I_^1_%AND- H1FFF_^1_%EOR- H8000_^1_%STA- RQST,I_'SET BIT 15 FOR USER RETURN FLAG_^1_%LDA- ELU,I_(NO LOG IF_8**MSOS 4.1**_^1_%SUB- DIAGLU,I_'DIAGNOSTIC UNIT_0**MSOS 4.1**_^1_%SAZ JMPUSE_I**MSOS 4.1**_^1_%RTJ LOG_*LOG THE ERROR_5**MSOS4.0**_^€€1JMPUSE JMP USEOWN_'GO TO COMPLETE REQUEST_^1*_8SIGN CHECK SUBROUTINE_.**MSOS 4.0_^1*_$IF (A) IS NEG(LARGER) AND (Q) IS POS, RETURN TO P+1_"**MSOS 4.0_^1*_$IF (Q) IS NEG(LARGER) AND (A) IS POS, RETURN TO P+2_"**MSOS 4.0_^1*_$IF SIGNS ARE THE SAME,RETURN TO P+3 AND TEST NORMALLY **MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1SIGNCK NOP 0_P**MSOS 4.0_^1_%SAP LIMA_)U€€PPER LIMIT IN A_3**MSOS 4.0_^1_%SQP LIMC_)LOWER LIMIT IN Q_3**MSOS 4.0_^1_%RAO* SIGNCK_K**MSOS 4.0_^1LIMA_!RAO* SIGNCK_K**MSOS 4.0_^1_%SQM LIMC_)Q IS LARGER THAN A_1**MSOS 4.0_^1_%RAO* SIGNCK_K**MSOS 4.0_^1LIMC_!JMP* (SIGNCK)_I**MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1**************************************************************_^1*_]_^1*_8SIMULATE A WORD ADDRESSABLE MASS_^1*€€_8STORAGE_^1* READ/WRITE REQUESTS-ASSUME ONE SECTOR IS ONE WORD_^1*_]_^1N96_"NUM 96_^1WORDNO NUM 0_,START WORD ADDRESS IN FIRST SECTOR OF TRANSFER_^1TEMFWD NUM 0_,LOCATION OF USERS BUFFER--FIRST WORD_^1TEMLWD NUM 0_D--LAST+1_^1ABUFF ADC BUFF_)ADDRESS OF BUFFER_^1TEMREQ NUM 0_,REQUEST CODE BITS 9 TO 15_^1TEMSEC NUM 0_,SECTOR NUMBER_^1TEMP2 NUM 0_P**MSOS 4.0_^1LIKDUM LDA- €€(ZERO),Q_$GET REQUEST WORD_3**MSOS 4.0_^1_%AND- ONEBIT+14_#CHECK FOR PART1 TYPE REQUEST_'**MSOS 4.0_^1_%SAZ LIKD0-*-1_#SKIP IF PART0 TYPE REQUEST_)**MSOS 4.0_^1_%LDA- 7,Q_*GET DISK WORD ADDRESS_.**MSOS 4.0_^1_%LDQ- 6,Q_*GET DISK WORD ADDRESS_.**MSOS 4.0_^1_%JMP* LIKD1_L**MSOS 4.0_^1LIKD0 RTJ- (ASABS)_%GO ABSOLUTIZE STARTING ADDRESS_$**MSOS 4.0_^1_%TRA Q_^1_%LDA- 2,Q_^1_%LDQ- 1,Q€€_*GET ABSOLUTE WORD ADDRESS_^1LIKD1 ALS 1_P**MSOS 4.0_^1_%LRS 1_,DOUBLE PRECISION WORD ADDRESS_^1_%DVI* N96_^1_%STA- FILEAD,I_$SECTOR INTO TABLE_^1_%STA* TEMSEC_'AND SAVE_^1_%STQ* WORDNO_'SAVE WORD NUMBER (0-95)_^1_%LDA- RQST,I_N68*1534_^1_%AND- 3_,$0001_A68*1534_^1_%SAN WTSKP_(SKIP IF WRITE_968*1534_^1_%RTJ CKOVRL_'MOVE PARAMS. IF OVRLAY REQ._'**MSOS4.0**_^1WTSKP LDA- LWD,I_€€O68*1534_^1_%STA* TEMLWD_^1_%LDA- FWD,I_^1_%STA* TEMFWD_'SAVE LOCATION USERS BUFFER_^1LASTSC LDA* ABUFF_((LAST SECTOR ENTRY)_^1_%STA- FWD,I_(PLACE INTERNAL BUFFER IN TABLE_^1_%INA 96_^1_%STA- LWD,I_^1_%RTJ READOP_'GET FIRST SECTOR INTO INTERNAL BUFFER_^1_%LDA* TEMREQ_^1_%AND- ONEBIT+9_$READ OR WRITE_^1_%SAN TRANRD-*-1_"READ_^1_%JMP* RWRITE_'REGULAR WRITE_^1TRANRD LDQ* WORDNO_'TR€€ANSFER TO USERS BUFFER_^1_%LDA* BUFF,Q_^1_%STA* (TEMFWD)_^1_%RAO* TEMFWD_^1_%LDA* TEMFWD_'CHECK IF DONE WITH ENTIRE JOB_^1_%LDQ* TEMLWD_'SIGNS ARE THE SAME BEFORE COMPARE_!**MSOS 4.0_^1_%RTJ* SIGNCK_K**MSOS 4.0_^1_%JMP* TRAN_M**MSOS 4.0_^1_%JMP* TRANON_K**MSOS 4.0_^1_%SUB* TEMLWD_^1_%SAM TRANON-*-1_"CONTINUE TRANSFER_^1TRAN_!JMP USEOWN_'TRANSFER COMPLETE,EXIT_-**MSOS 4.0_^1TRANON€€ RAO* WORDNO_^1_%LDA* WORDNO_^1_%SUB* N96_^1_%SAP MORERD-*-1_"BUFFER EMPTY BUT MORE READING TO DO_^1_%JMP* TRANRD_^1MORERD ENA 1_,MORE READING_^1_%ADD* TEMSEC_'BUMP SECTOR NO._^1_%STA- FILEAD,I_$SETUP DEVICE TABLE SECTOR NUMBER_^1_%LDA* TEMFWD_^1_%STA- FWD,I_**MSOS 4.1**_^1_%EXT LOG_O45*779_^1_%SPC 2_^1*_*DRUM PHYSICAL DEVICE TABLE FORMAT_^1*_*(SEE SYSTEM TABLES)_^1*_$EQU E(3*$80)_$EQUIPMENT CODE = 3_^1*P1751 NU€€M $520A_(SHEDULE REQUEST_2**MSOS 4.1**_^1*_$ADC I1751_(INITIATOR_8**MSOS 4.1**_^1*_$ADC C1751_(CONTINUATOR_6**MSOS 4.1**_^1*_$ADC E1751_(ERROR TIME OUT ENTRY_-**MSOS 4.1**_^1*_$NUM -1,0,0_AEDCLK,ELU,EPTR_^1*_$ADC E+1_DEWES_^1*_$NUM $66,$200_$8,9_6TYPE,ESTAT1_^1*_$BZS (3)_*10-12_4ECCOR,ELSTWD,ESTAT2_^1*_$BSS (6)_*13-18_4ECALL (FOR OVERLAY)_^1*_$ADC 0,E+8_(19,20_4TRACK_^1*_€€$ADC 0,E+$A_'21,22_4SECTOR_^1*_$ADC 0,E+$C_'23,24_4S_^1*_$ADC 0,E+$E,8,E+1 25,26,27,28_.FNCORE_^1*_$NUM 0,0,0,-1_$29,30,31_1RWCTRL_^1*_$ADC RCFR,0_'33_7READSD_^1*_$NUM 0_,34_7DN_^1*_$ADC E+0_*35_7WRITEC_^1*_$ADC E+4_*36_7READC_^1_%EQU AMONI($F4),ACABS($BE),ACOMPC($B6)_^1_%EQU AFNR($B5),ADISP($EA),ANABS($BF),ASABS($BD)_^1_%EQU LPMSK($2),NZERO($12),ZERO($22),ONEBIT($23),Z€€ROBIT($33)_^1_%EQU RCSCHD(9)_^1_%EQU PC(1),PT(2),PQ(3)_^1_%EQU PLU(3),PS(5),PN(4)_^1*_*PHYSICAL DEVICE TABLE SYMBOLS_^1ELU_"EQU ELU(5)_'LOGICAL UNIT WORD_0**MSOS 4.1**_^1_%EQU EPTR(6),EWES(7),ESTAT1(9),ESTAT2(12),ECALL(13)_^1_%EQU FWD(10)_M66*1444_^1_%EQU LWD(11)_M66*1444_^1_%EQU TRACK(19),SECTOR(21),S(23),FNCORE(25),RWCTRL(29)_^1_%EQU READSD(33),RC(34),DN(35),WRITEC(36),R€€EADC(37)_^1*_8REQUEST CODES_^1_%EQU RCRR(1)_%REGULAR READ_^1_%EQU RCFR(4)_%FORMAT READ_^1_%EQU RCFW(6)_%FORMAT WRITE_^1_%SPC 2_^1*_*INITIATOR ENTRY_^1_%SPC 2_^1I1751 STQ- I_,INITIATOR,_!I = PDT ADDRESS_$**MSOS 4.1**_^1DRMA_!RTJ- (AFNR)_'FIND NEXT REQUEST_^1_%JMP- (ADISP)_%NO MORE REQUESTS_^1_%LDQ- EPTR,I_^1_%LDA- (ZERO),Q_$WORD 0 OF PARAM LIST_^1_%AND =N$3E00_%GET REQUEST CO€€DE_3***MSOS4.0_^1_%ARS 9_S66*1444_^1_%STA* TEMREQ_'SAVE REQUEST CODE_566*1444_^1_%INA -14_*CHECK FOR MOTION REQ_266*1444_^1_%SAN NOTMC_(SKIP IF NOT MOTION REQ_066*1444_^1_%STA- FWD,I_(CLEAR FIRST_;66*1444_^1_%STA- LWD,I_(AND LAST WORD ADDRESSES_/66*1444_^1_%JMP DRMC6_(COMPLETE MOTION REQUEST_/66*1444_^1TEMREQ NUM 0_,REQUEST CODE_:66*1444_^1NOTMC LDA* TEMREQ_N66*1444_^1_%SAN €€1_^1_%JMP* DRCTRY_'DIRECTORY CALL_^1_%STA- RC,I_^1_%RTJ- (ANABS)_%NO OF WORDS TO TRANSFER_^1_%SQZ 1_^1_%INQ -1_^1_%STQ- DN,I_^1_%JMP* GETSTR_'GET START ADR_^1_%SPC 2_^1*_*DIRECTORY FORMAT FOR DRUM READ_^1_%SPC 2_^1DRCTRY LDQ- EPTR,I_^1_%LDA- 4,Q_*NO OF WORDS_^1_%SAZ 1_^1_%INA -1_^1_%STA- DN,I_)DN = LENGTH - 1_^1_%LDA- 1,Q_*COMPLETION ADR_^1_%STA- S,I_*INITIAL CORE ADR = S_^1_€€%ADD- DN,I_^1_%STA- FNCORE,I_$FINAL CORE ADR = S + N_^1_%LDA- READSD,I_$REQUEST CODE FOR SYSTEM DIRECTORY CALLS_^1_%STA- RC,I_^1_%LDA- 6,Q_*LEAST SIGNIFICANT 15 BITS OF DRUM ADR_^1_%LDQ- 5,Q_*MOST SIGNIFICANT 16 BITS OF DRUM ADR_^1_%JMP* DRMADR_^1_%SPC 2_^1GETSTR LDQ- EPTR,I_^1_%RTJ- (ASABS)_^1_%STQ- S,I_^1_%ADQ- DN,I_^1_%STQ- FNCORE,I_$FINAL CORE ADR = S + N_^1_%TRA Q_^1_%SPC €€2_^1*_*GET DRUM ADDRESS FROM NEXT TWO WORDS. AFTER S_^1_%SPC 2_^1_%LDA- 2,Q_^1_%LDQ- 1,Q_^1DRMADR STA- SECTOR,I_^1_%LDA- RC,I_)IS THIS A FORMAT WRITE_^1_%INA -RCFW_^1_%SAN G1-*-1_'NO, GO TO G1_^1_%LDA- DN,I_^1_%INA 1_,NO OF WORDS TO TRANSFER_^1_%ENQ 0_^1_%DVI =N96_)IS N A MULTIPLE OF 96_^1_%SQN G2-*-1_'NO, GO TO G2_^1G1_#JMP* A11_*CONTINUE NORMALLY_^1_%SPC 1_^1G2_#LDQ- SECT€€OR,I_^1_%STQ* TS_+SAVE START SECTOR_^1_%AAQ A_,ADD NO OF SECTORS IN XFER_^1_%STA- SECTOR,I_$LAST SECTOR NO_^1_%LDA =XBZS96_^1_%LDQ- S,I_^1_%STQ* TS+1_)SAVE START CORE (S)_^1_%STA- S,I_*START OF ZERO BLOCK_^1_%INA 95_^1_%LDQ- FNCORE,I_^1_%STQ* TS+2_)SAVE FINAL CORE_^1_%STA- FNCORE,I_^1_%ENA 1_^1_%STA* DSFLAG_'SET DISK SIMULATE FLAG_^1_%JMP* FRW_*GO TO FORMAT WRITE_^1_%SPC 1_^1T€€S_#BZS TS(3)_(TEMPORARY STORAGE_^1*_8FOR SECTOR,S,FNCORE_^1DSFLAG NUM 0_,DISK SIMULATE FLAG_^1_%SPC 2_^1A11_"LDA- RC,I_^1_%INA -RCFR_^1_%SAZ FRW-*-1_%IF FORMAT READ_^1_%INA RCFR-RCFW_^1_%SAZ FRW-*-1_%OR IF FORMAT WRITE_^1_%LDA- SECTOR,I_^1_%ALS 1_-CALCULATE SECTOR NUMBER_^1_%JMP* DRMA1_^1FRW_"LDA- SECTOR,I_$CONVERT DISK SECTOR ADDRESS_^1_%MUI =N96_)TO DRUM WORD ADDRESS_^1_€€%LLS 1_^1DRMA1 LLS 4_,EXTRACT DRUM TRACK AND SECTOR_^1_%ALS 11_+A = SECTOR = WORD NO ON TRACK_^1_%STA- SECTOR,I_^1_%STQ- TRACK,I_%Q = TRACK AND SURFACE NO_^1_%SPC 2_^1*_*SET UP HARDWARE CODE FOR READ OR WRITE_^1_%SPC 2_^1_%LDA- RC,I_^1_%INA -RCRR_^1_%SAZ DREAD-*-1_#SKIP IF READ_^1_%INA -RCFR+RCRR_^1_%SAZ DREAD-*-1_#SKIP IF FORMAT READ_^1_%LDA- WRITEC,I_$MUST BE WRITE OR F€€ORMAT WRITE_^1_%JMP* SAVWR_^1_%SPC 1_^1*_81 CARD DELETED_^1_%SPC 2_^1DREAD LDA- EPTR,I_'IF PARAMETER LIST IS_^1_%SUB- S,I_*ABOVE START ADDRESS_^1_%SAM GETRC-*-1_^1_%SUB- DN,I_)AND BELOW END ADDRESS_^1_%SAP GETRC-*-1_^1_%LDQ- EPTR,I_'MOVE PARAMS TO ECALL IN P.D.T._^1_%LDA- (ZERO),Q_$TO ALLOW OVERLAY OF PARAMS BY READ REQ._^1_%AND- LPMSK+8_^1_%ADD =XRCSCHD*512+$4000 BUILD SCHE€€DULER CALL-PART 1_!***MSOS4.0_^1_%STA- ECALL,I_^1_%LDA- PLU,Q_^1_%STA- ECALL+PLU,I_^1_%RTJ- (ACABS)_%ABSOLUTIZE COMPLETION ADDRESS_^1_%STQ- ECALL+PC,I_^1_%LDA- I_^1_%INA ECALL_^1_%STA- EPTR,I_^1_%SPC 2_^1GETRC LDA- READC,I_^1SAVWR STA- RWCTRL+1,I_^1_%SPC 2_^1*_*SEND R/W CODE TRACK, SECTOR, INITIAL CORE, FINAL CORE._^1_%SPC 2_^1A2_#LDQ- I_^1_%INQ RWCTRL-11_^1DSET1 STQ* TEMP_€€)SAVE ADR OF P.D.T._^1_%LDA- 1,Q_*DATA WORD IN A_^1_%LDQ- 2,Q_*CONTROL WORD IN Q_^1_%SQM DRMXIT-*-1_"TEST FOR END OF SEQUENCE_^1_%OUT OREJ-*_'SEND DATA WORD_^1_%LDQ* TEMP_)CONTINUE SEQUENCE_^1_%INQ 2_^1_%JMP* DSET1_^1DRMXIT JMP- (ADISP)_%SEQUENCE COMPLETE, WAIT FOR INTERRUPT_^1TEMP_!0_"0_^1OREJ_!JMP* INTREJ_'INTERNAL REJECT_!NO DRUM_^1_%RTJ* STATUS_'EXTERNAL REJECT_!DRUM BUSY_^1€€_%STA- ESTAT2,I_#SAVE STATUS_^1_%AND- ONEBIT+11_^1_%SAN OREJ1A-*-1_^1_%JMP* OREJ2_^1_%SPC 2_^1*_8TIMING ERROR OCCURRED_^1_%SPC 2_^1OREJ1A ENA 1_^1_%STA* TIMERA_'IDLE ERROR=1_^1_%CLR A_^1_%STA* TIMERB_'BUSY ERROR RESET FOR SAFETY_^1_%JMP- (ADISP)_%WAIT FOR RESYNCH INTERRUPT_^1_%SPC 2_^1OREJ2 ENQ 46_(EXTERNAL REJECT ON OUTPUT_,*MSOS V4.0_^1_%RTJ* DRMDIG_'BUT NOT A TIMING ERR€€OR, CALL DIAGNOSTIC_^1_%RTJ* SETEFD_'SET ERROR CODE IN DEVICE_^1_%JMP* A1_+AND GO BACK TO USER_^1_%SPC 2_^1TIMERA NUM 0_,TIMING ERR WHILE IDLE_^1TIMERB NUM 0_,TIMING ERR WHILE BUSY_^1MAXERR NUM 1_,MAX. NO OF REPEATS OF A REQUEST BEFORE EXIT._^1TOTERR NUM 0_,ACCUMULATION OF ERRORS_^1ERRCNT NUM 0_^1OKMSKA NUM $DD2_^1OKMSKB NUM $010_^1_%SPC 2_^1*_*DRUM CONTINUATOR. CALLED BAC€€K VIA INTERRUPT FROM THE DRUM._^1_%SPC 2_^1E1751 EQU E1751(*)_$ERROR TIME OUT_"RY_-**MSOS 4.1**_^1C1751 STQ- I_,CONTINUATOR, I = PDT ADDRESS_$**MSOS 4.1**_^1_%LDQ- EWES,I_^1_%ENA 2_,CLEAR INTERRUPT_^1_%OUT INPR2-*_^1_%RTJ* STATUS_'READ DRUM STATUS_^1_%STA* STATUS_'HOLD TEMPORARILY_^1_%LDQ- EWES,I_^1_%ENA 8_,END OF OPERATION INT._^1_%OUT INPR2-*_^1_%LDA* TIMERA_'IF IDLE TIMI€€NG ERROR IS ON,_^1_%SAZ INT4-*-1_$(NO, GO TO INTB)_^1_%CLR A_,CLEAR TIMING ERR A_^1_%STA* TIMERA_^1_%ENQ 45_(TIMING ERROR WHILE NOT BUSY_**MSOS V4.0_^1_%RTJ* DRMDIG_'CALL DIAGNOSTIC, Q = ERROR CODE_^1_%JMP* INT8_)CHECK ERROR COUNTER_^1_%SPC 2_^1INT4_!LDA* TIMERB_'IF TIMING ERROR B OCCURRED,_^1_%SAZ INT5-*-1_$THEN THIS IS RESYNCH INT._^1_%CLR A_^1_%STA* TIMERB_'CLEAR TIMING ER€€ROR B_^1_%ENQ 42_(TIMING ERROR WHILE BUSY_.*MSOS V4.0_^1_%RTJ* DRMDIG_'CALL DIAGNOSTIC, Q = ERROR CODE_^1_%JMP* INT8_^1_%SPC 2_^1INT5_!LDA* STATUS_^1_%STA- ESTAT2,I_^1_%AND* OKMSKA_'MASK DESIRED BITS_^1_%SUB* OKMSKB_^1_%SAZ INT6-*-1_^1_%JMP* INT7_)IMPLIES ERRORS._^1_%SPC 2_^1INT6_!EQU INT6(*)_^1A1_#CLR A_,NO ERRORS_^1_%STA* ERRCNT_'RESET ERROR COUNT TO 0_^1*_*IF COMPLETION AD€€DRESS IS IN READ AREA._^1*_*AND AN ERROR OCCURRED,CALL DIAGNOSTIC(8,C)_^1_%LDA- ESTAT1,I_^1_%SAM 1_^1_%JMP* NOERR_(NO ERROR OCCURRED_^1_%LDQ- EPTR,I_'GET COMPLETION ADDRESS,C_^1_%RTJ- (ACABS)_^1_%TRQ A_,IF C IS BELOW S,_^1_%SUB- S,I_^1_%SAM NOERR-*-1_#GO TO NOERR_^1_%TCQ A_,C IS IN A REG_^1_%ADD- FNCORE,I_$IF C IS ABOVE FNCORE,_^1_%SAM NOERR-*-1_#GO TO NOERROR_^1_%TRQ A_,PUT €€COMPLETION ADR IN A FOR DIAGNOSTIC_^1_%ENQ 43_(IRRECOVERABLE ERROR_2*MSOS V4.0_^1_%RTJ* DRMDIG_(CALL DIAGNOSTIC_^1_%JMP* DRMC7_(GET NEXT REQUEST._^1*_*IF THE REQUEST IS A SYSTEM DIRECTORY FORMAT READ,_^1*_*THEN PUT BIT 15-13 OF Q INTO ESTAT1, BEFORE_^1*_*CALLING COMPRQ. (ALLOWS ALL OF Q TO BE PASSED TO A_^1*_*DIRECTORY DRUM PROGRAM_^1NOERR LDA DSFLAG_'IF THE FIRST PART OF A_^1_€€%SAZ 1_,DISK SIMULATION HAS JUST_^1_%JMP* DS1_*BEEN COMPLETED, GO TO DS1_^1_%LDQ- EPTR,I_^1_%LDA- (ZERO),Q_^1_%AND =N$3E00_%GET REQUEST CODE_3***MSOS4.0_^1_%SAN DRMC6-*-1_^1_%LDA- PLU,Q_^1_%AND- NZERO+13_$FOR DIRECTORY CALLS_^1_%EOR- ESTAT1,I_$SAVE ALL 16 BITS OF Q_^1_%STA- ESTAT1,I_^1DRMC6 RTJ- (ACOMPC)_$COMPLETE THIS REQUEST_^1DRMC7 JMP DRMA_)GO TO NEXT REQUEST_^1_%SPC 2_^€€1STATUS 0_"0_,READ DEVICE STATUS_^1_%LDQ- EWES,I_^1_%INP INPR2-*_^1_%JMP* (STATUS)_^1_%SPC 2_^1INPR2 JMP* INTREJ_'INTERNAL REJECT_^1_%ENQ 47_+EXTERNAL REJECT ON INPUT_^1_%JMP* CLLDIG_^1INTREJ ENQ 5_)INTERNAL REJECT_6*MSOS V4.0_^1CLLDIG RTJ* DRMDIG_'CALL DIAGNOSTIC, Q = ERROR CODE_^1_%RTJ* SETEFD_'SET ERROR FIELD_^1_%JMP* A1_+COMPLETE THE REQUEST_^1_%SPC 2_^1INT7_!LDA- ESTAT2,€€I_^1_%AND- ONEBIT+10_^1_%SAZ INT7B-*-1_#SKIP IF BIT 10 = 0_^1_%ENQ 44_+GUARDED ADDRESS ERROR_^1_%RTJ* DRMDIG_'DIAGNOSTIC ROUTINE, ERROR CODE IN Q_^1_%RTJ* SETEFD_'SET ERROR FIELD IN P.D.T._^1_%JMP* A1_^1INT7B LDA- ESTAT2,I_$IF TIMING ERROR, SET TIMING_^1_%AND- ONEBIT+11_#ERROR FLAG B, CLEAR ERRFLG A_^1_%SAZ INT8-*-1_^1_%ENA 1_^1_%STA* TIMERB_^1_%CLR A_^1_%STA* TIMERA_^1_%JMP-€€ (ADISP)_%WAIT FOR RESYNCH_^1_%SPC 2_^1INT8_!LDA* ERRCNT_'SOME OTHER ERROR OCCURRED_^1_%RAO* TOTERR_'INCREMENT TOTAL ERRORS_^1_%SUB* MAXERR_^1_%SAN INT9-*-1_$IF ERROR COUNT = MAXERR_^1_%RTJ* SETEFD_'SET ERROR FIELD IN CALL_^1_%ENQ 41_(REJECT UNSUC. AFTER REPEAT_+*MSOS V4.0_^1_%RTJ* DRMDIG_'CALL DIAGNOSTIC, Q = ERROR CODE_^1_%JMP* A1_+COMPLETE REQUEST_^1_%SPC 2_^1INT9_!RAO* ERRC€€NT_'INCREMENT ERROR COUNTER_^1_%LDA* STATUS_'PUT STATUS INTO TABLE._^1_%STA- ESTAT2,I_^1_%ENQ 40_(LESS THAN MAXERR ATTEMPTS_,*MSOS V4.0_^1_%RTJ* DRMDIG_'HAVE BEEN MADE_^1_%JMP A2_^1_%SPC 2_^1SETEFD 0_"0_,SET ERROR FIELD IN P.D.T._^1_%LDA- ESTAT1,I_^1_%AND- LPMSK+12_^1_%ADD- ONEBIT+15_^1_%STA- ESTAT1,I_^1_%JMP* (SETEFD)_(END OF SET ERROR FIELD_^1_%SPC 2_^1DRMDIG_!0 0_,ERROR ROU€€TINE_^1_%LDA- ELU,I_(GET LU U_8**MSOS 4.1**_^1_%ALS 6_N**MSOS 4.1**_^1_%AAQ Q_,COMBINE WITH ERR CODE_,**MSOS 4.1**_^1_%RTJ LOG_*GO LOG ERROR_845*779_^1_%JMP* (DRMDIG)_$RETURN_^1_%SPC 2_^1DS1_"ENA 0_^1_%STA DSFLAG_^1_%LDQ =XTS-1_'RESTORE SECTOR,S,FNCORE_^1_%LDA- 1,Q_^1_%STA- SECTOR,I_^1_%LDA- 2,Q_^1_%STA- S,I_^1_%LDA- 3,Q_^1_%STA- FNCORE,I_^1_%JMP A11_*RETURN TO A11 TO CONT€VINUE_^1BZS96 BZS BZS96(96)_#96 WORD BLOCK OF ZEROS FOR DISK SIMULATION_^1_%END_]_^__VPD1752 CSY/ A40 P€1_%NAM D1752_(DECK-ID A40 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT I1752,C1752,E1752_>**MSOS 4.1**_^1_%EQU ANFNR($B5)_"($B5)= ADDRESS OF FIND NEXT REQUEST ROUTINE_^1_%EQU ACOMP($B6)_"($B6)= ADDRESS OF COMPLE3E REQUEST ROUTINE_^1_%EQU AZERO($2€€2)_"($22)= CONSTANT ZERO (0)_^1_%EQU ASABS($BD)_"($BD)= ADDRESS OF S ABSOLUTIZING ROUTINE_^1_%EQU ACABS($BE)_"($BE)= ADDRESS OF C ABSOLUTIZING ROUTINE_^1_%EQU ADISP($EA)_"($EA)= ADDRESS OF DISPATCHER_^1_%EQU TIMLM(1)_$DIAGNOSTIC CLOCK TIMEOUT LIMIT IN SECONDS_^1_%EQU MAXERR(5)_#MAXIMUM ALLOWED ERRORS PER REQUEST_^1_%EQU EOALIN($18)_!BITS TO ENABLE EOP, ALARM_^1_%EQU NZERO($2€€2)_^1_%EQU ONEMSK(2)_#ONE MASK TABLE_^1_%EQU ZROMSK($12)_!ZERO MASK TABLE_^1_%EQU ONEBIT($23)_!ONE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT TABLE_^1_%EXT LOG_*ENGINEERING FILE RECORDING ROUTINE_^1_%EJT_]_^1******_.D R I V E R_!E R R O R_!C O D E S_^1_%EQU LOSTD(1)_$LOST DATA ERROR_^1_%EQU ALARM(2)_$ALARM_^1_%EQU IREJ(5)_%INTERNAL REJECT_^1_%EQU EREJ(6)_%EXTERNAL REJECT_^1_%€€EQU GUARD(44)_#GUARDED ADDRESS ERROR_^1_%EQU TTE(42)_%TIMING TRACK ERROR_^1_%EQU CHECK(20)_#CHECKWORD ERROR_^1_%EQU BADADR(18)_"ADDRESS OUT OF RANGE_^1_%EQU CAERR(36)_#ADDRESS ERROR_^1_%EQU PF(52)_(POWER FAILURE_^1_%EQU EOPNS(53)_$EOP NOT SET AFTER INTERRUPT_^1_%EQU DATANS(54)_#DATA NOT SET AFTER INTERRUPT_^1_%EQU BADSTS(55)_#BAD STATUS (NONE OF THE ABOVE)_^1_%EJT_]_^1****€€**_.P H Y S I C A L_"D E V I C E_!TABLE_%******_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_'LOGICAL UNIT_^1_%EQU EPTR(6)_%REQUEST PARAMETER LIST ADDRESS_^1_%EQU EWES(7)_%CONVERTER_!EQUIPMENT CODE STATION CODE_^1_%EQU EREQST(8)_#REQUEST STATUS BITS_^1_%EQU ESTAT1(9)_#DRIVER STATUS BITS_^1_%EQU ECCOR(10)_#BEGINNING CORE LOCATION_^1_%EQU ELSTWD(11)_"LAST CORE LOCATION €€+ 1_^1_%EQU ESTAT2(12)_"LAST HARDWARE STATUS READ_^1_%EQU ERETN(15)_#RETURN ADDRESS FOR SUBROUTINE WITHIN DRIVER_^1_%EQU ESN(16)_%SECTOR NUMBER_^1_%EQU DFUN(17)_$DATA TRANSFER FUNCTION_^1_%EQU EWORD(18)_#COUNTER_^1_%EQU ESECTC(19)_"FULL SECTOR COUNTER_^1_%EQU UFWA(20)_$SAVE ECCOR_^1_%EQU ULWA(21)_$SAVE ELSTWD_^1_%EQU OVSCHD(22)_"SAVE FIRST WORD OF REQUEST (OVERLAY)_^1_%EQU€€ OVCA(23)_$SAVE COMPLETION ADDRESS_"(OVERLAY)_^1_%EQU OVTHD(24)_#SAVE REQUEST THREAD WORD_!(OVERLAY)_^1_%EQU OVLU(25)_$SAVE LOGICAL UNIT WORD_#(OVERLAY)_^1_%EQU RQERR(26)_#UNSUCCESSFUL I/O ATTEMPT COUNTER_^1_%EQU ESTATS(27)_"EQUIPMENT STATUS (ON LAST ERROR)_^1*_$WORDS 28-30 ARE ALSO USED FOR HARDWARE STATUS DATA_^1_%EJT_]_^1I1752 STQ- I_,INITIATOR, PDT ADDRESS TO --I--_!**MSO€€S 4.1**_^1GETONE RTJ- (ANFNR)_%GET A REQUEST_^1_%JMP- (ADISP)_%NONE, GO AWAY_^1_%LDA- ELSTWD,I_I**MSOS 4.1_^1_%INA -1_O**MSOS 4.1_^1_%LDQ- ECCOR,I_J**MSOS 4.1_^1_%RTJ SIGNCK_'CHECK IF SIGNS OF FWA AND LWA SAME **MSOS 4.1_^1_%JMP* LENOK_(RETURN HERE IF LWA LARGER THAN FWA **MSOS 4.1_^1_%JMP* NOTOK_(RETURN HERE IF FWA LARGER THAN LWA **MSOS 4.1_^1_%SUB- ECCOR,I_%RETURN HERE IF S€€IGNS ARE SAME_%**MSOS 4.1_^1_%SAP LENOK_(SKIP IF LWA IS GREATER THAN FWA_#**MSOS 4.1_^1NOTOK LDA- ECCOR,I_%MAKE LWA GREATER THAN FWA_***MSOS 4.1_^1_%INA 1_,ONE WORD REQUEST_3**MSOS 4.1_^1_%STA- ELSTWD,I_I**MSOS 4.1_^1LENOK LDQ- EPTR,I_'REQUEST PARAMETER LIST_-**MSOS 4.1_^1_%LDA- (AZERO),Q_H**MSOS 4.1_^1_%ARS 9_P**MSOS 4.1_^1_%AND- ONEMSK+5_$GET REQUEST CODE AND_/**MSOS 4.1_^1_€€%INA -14_*CHECK IF MOTION REQUEST_,**MSOS 4.1_^1_%SAN NOTMC_(SKIP IF NOT MOTION_1**MSOS 4.1_^1_%STA- ECCOR,I_J**MSOS 4.1_^1_%STA- ELSTWD,I_I**MSOS 4.1_^1_%JMP* RQDONE_'TERMINATE MOTION REQ._.**MSOS 4.1_^1NOTMC INA 14_+RESTORE REQUEST CODE_/**MSOS 4.1_^1_%SAN NODIR-*-1_#JMP IF NOT DIRECTORY REQUEST (RC NE 0)_^1*_81 CARD DELETED_^1************** THIS IS A DIRECTORY READ REQUEST€€_!*********************_^1_%LDA- 6,Q_*GET SECTOR ADDRESS FROM DIRECTORY_^1_%STA- ESN,I_(SAVE IN PHYSTAB_^1RD_#RTJ* READOP_'GO READ DATA INTO CORE_^1RQDONE RTJ- (ACOMP)_%GO COMPLETE THE REQUEST_^1_%JMP* GETONE_'GO GET ANOTHER REQUEST_^1NODIR RTJ CHKOVR_(MOVE PARAMETERS IF READ AND OVERLAY_^1_%LDA- ESTAT1,I_^1_%AND- ONEBIT+1_$IS THIS A FORMAT REQUEST_^1_%SAN FORMAT-*-1_"YES, SKIP_^€€1_%JMP REGULR_'NO, GO SIMULATE WORD ADDRESSABILITY_^1************** THIS IS A FORMAT REQUEST *******************************_^1FORMAT RTJ- (ASABS)_%RETURN WITH ADDRESS OF S IN A_^1_%TRA Q_^1_%LDA- 2,Q_*GET SECTOR NUMBER FROM REQUEST_^1_%STA- ESN,I_(SAVE IN PHYSTAB_^1_%LDA- ESTAT1,I_^1_%AND- ONEBIT+0_$IS THIS A READ REQUEST_^1_%SAN WRT-*-1_%NO, SKIP TO WRITE_^1_%JMP* RD_+GO DO R€€EAD OPERATION_^1WRT_"RTJ* WRITOP_'WRITE DATA TO DISK_^1_%JMP* RQDONE_'GO COMPLETE REQUEST_^1_%EJT_]_^1************* THIS SUBROUTINE TRANSFERS DATA BETWEEN CORE AND DRUM *****_^1************* THE FILE ADDRESS IS IN PHYSTAB WORD $D *******************_^1************* CORE FWA AND LWA+1 ARE IN PHYSTAB WORDS $B AND $C ********_^1************* THE RETURN ADDRESS IS SAVED IN PHYSTAB WORD€€ $F IN ORDER **_^1************* TO MAKE THE ROUTINE SERIALLY REENTRANT, WHICH IS NECESSARY_^1************* IF THE DRIVER IS TO DRIVE MORE THAN ONE DRUM AT A TIME ***_^1READOP 0_"0_^1_%ENA 3_,SET I/O FLAG TO 3 FOR A READ_^1_%LDQ* READOP_'SET RETURN ADDRESS_^1_%JMP* RETSAV_^1WRITOP 0_"0_^1_%ENA -1_+SET I/O FLAG TO-1 FOR A WRITE_^1_%LDQ* WRITOP_'GET RETURN ADDRESS_^1RETSAV STQ- ERET€€N,I_%SAVE RETURN ADDRESS IN PHYSTAB_^1_%LDQ- EWES,I_'GET EQUPIMENT ADDRESS_^1_%AAQ A_,ADD I/O FUNCTION_^1_%STA- DFUN,I_'SAVE IN DATA TRANSFER FUNCTION_^1_%ENA 0_^1_%STA- RQERR,I_%CLEAR THIS REQUEST ERROR COUNTER_^1DOAGIN LDQ- EWES,I_^1_%ENA 1_,CLEAR CONTROLLER_^1_%RTJ* OUT_^1_%RTJ* INPUT_(READ DIRECTOR STATUS_^1_%STA- ESTAT2,I_$SAVE_^1_%AND* STSMSK_^1_%EOR* INITOK_'CHECK IF OK_^€€1_%SAZ DOAG_^1_%JMP DETECT_'GO FIND WHY BAD_^1DOAG_!ENA EOALIN_^1_%RTJ* OUT_*ENABLE EOP AND ALARM INTERRUPT_^1_%LDA- ESN,I_(PICK UP REQUESTED DRUM ADDRESS_^1_%STA* TEMPAD_'SAVE FOR TRACK ADDRESS_^1_%AND- ONEMSK+5_$THE SECTOR ADDRESS IS IN BITS 0-4_^1_%SAN DO1-*-1_%SKIP IF THE SECTOR ADDRESS IS ZERO_^1_%ENA 32_+IF REQUESTED SECTOR IS ZERO, FOR ANY TRACK,_^1DO1_"INA -1_+LOAD SE€€CTOR 31, OTHERWISE LOAD REQUESTED_^1_%TRA Q_,SECTOR - 1. TRANSFER SECTOR ADDRESS TO Q_^1_%LDA* TEMPAD_(GET BIASED ADDRESS_^1_%AND- ZROMSK+5_$SAVE TRACK ADDRESS_^1_%EAQ A_,COMBINE TRACK ADDRESS AND SECTOR ADDRESS_^1_%LDQ- EWES,I_^1_%INQ 7_,Q = EQUIPMENT ADDRESS FOR LOAD INITIAL SECTOR_^1_%RTJ* OUT_*LOAD INITIAL SECTOR ADDRESS_^1_%INQ 4_^1_%LDA- ECCOR,I_%GET FWA_^1_%RTJ* OUT_*L€€OAD INITIAL CORE ADDRESS_^1_%INQ 2_^1_%LDA- ELSTWD,I_$GET LWA+1_^1_%INA -1_^1_%RTJ* OUT_*LOAD FINAL CORE ADDRESS_^1_%LDQ- DFUN,I_'GET DATA TRANSFER FUNCTION_^1_%RTJ* OUT_*START DATA TRANSFER_^1WAIT_!ENA TIMLM_^1_%STA- EDCLK,I_%SET DIAGNOSTIC CLOCK_^1_%JMP- (ADISP)_%AND WAIT FOR INTERRUPT OR TIMEOUT_^1************* OUTPUT SUBROUTINE ****************************************_^1OUT_€€"0_"0_^1_%OUT 2_^1_%JMP* (OUT)_(NO ERROR, RETURN_^1_%RTJ* INTREJ_'INTERNAL REJECT_^1_%RTJ* EXTREJ_'EXTERNAL REJECT_^1************* INPUT SUBROUTINE *****************************************_^1INPUT 0_"0_^1_%INP 2_^1_%JMP* (INPUT)_%NO ERROR, RETURN_^1_%RTJ* INTREJ_'INTERNAL REJECT_^1_%RTJ* EXTREJ_'EXTERNAL REJECT_^1_%SPC 5_^1OKSTS NUM $001D_(CHECK FOR READY,NOT BUSY, INTERRUPT€€, DATA, EOP_^1STSMSK NUM $D97F_(IGNORE DRUM WRITE INHIBIT, COMPARE, SPARE,_^1*_?PROTECTED, PROTECT FAULT_^1INITOK NUM $0009_(INITIAL STATUS_^1TEMPAD NUM 0_-TEMP STORAGE FOR BIASED ADDRESS_^1_%EJT_]_^1************* TIME OUT ERROR ENTRY *************************************_^1E1752 STQ- I_,PDT ADDRESS TO --I--_-**MSOS 4.1**_^1_%LDA- EREQST,I_$GET REQUEST STATUS WORD_^1_%AND- ZROB€€IT+14_^1_%EOR- ONEBIT+14_#SET I/O HANGUP BIT IN WORD 8 OF PHYSTAB_^1_%STA- EREQST,I_^1*_81 CARD DELETED_^1************* DRUM CONTINUATOR ENTRY ***********************************_^1C1752 STQ- I_,CONTINUATOR, PDT TO --I--_(**MSOS 4.1**_^1_%ENA -1_^1_%STA- EDCLK,I_%SHUT OF DIAGNOSTIC CLOCK_^1_%LDQ- EWES,I_'EQUIPMENT HARDWARE ADDRESS_^1_%LDA- ELU,I_(GET LOGICAL UNIT_^1_%SAN INTLEG-€€*-1_"IS A REQUEST ACTIVE FOR THIS DEVICE_^1_%ENA 1_^1_%OUT 1_,CLEAR CONTROLLER_^1_%NOP 0_,IGNORE REJECTS_^1_%JMP- (ADISP)_^1INTLEG RTJ* INPUT_(READ DIRECTOR STATUS_^1_%STA- ESTAT2,I_^1_%AND* STSMSK_'IGNORE USELESS BITS_^1_%EOR* OKSTS_(CHECK FOR GOOD BITS_^1_%SAZ DMSTS-*-1_#IS STATUS OK_^1_%JMP* DETECT_'BAD STATUS, GO FLAG ERROR_^1DMSTS INQ 2_^1_%RTJ* INPUT_(READ CORE STATUS_^€€1_%EOR- ELSTWD,I_$COMPARE WITH EXPECTED VALUE_^1_%SAN WRGLTH-*-1_"NO COMPARE_^1_%INQ -2_+RESTORE Q_^1_%ENA 1_^1_%RTJ* OUT_*CLEAR CONTROLLER_^1_%LDQ- ERETN,I_%TRANSFER OK. GET RETURN ADDRESS INTO Q_^1_%JMP- (AZERO),Q_#RETURN_^1WRGLTH ENQ CAERR_(CORE ADDRESS ERROR (WRONG LENGTH)_^1_%JMP* REPEAT_'TRY AGAIN_^1_%EJT_]_^1************* DIAGNOSTIC FOR NEW DRUM MEMORY SUBSYSTEM *******€€**********_^1INTREJ 0_"0_,ADDRESS OF LAST GUY TO GET INTERNAL REJECT_^1_%ENQ IREJ_)INTERNAL REJECT_^1_%JMP* REPEAT_^1EXTREJ 0_"0_,ADDRESS OF LAST GUY TO GET EXTERNAL REJECT_^1_%ENQ EREJ_)EXTERNAL REJECT_^1REPEAT RAO- RQERR,I_^1_%STQ* QSAVE_(SAVE THE ERROR CODE_^1_%ENQ 0_^1LLP_"STQ* LOPCT_(SET UP LOOP COUNTER_^1_%ADQ- EWES,I_'THIS LOOP TAKES HARDWARE STATUS_^1*_HSECTOR STATUS_^1_€€%CLR A_*MSOS V4.0_^1_%SPC 2_O*MSOS V4.0_^1ALMINT CLR A_O*MSOS V4.€€0_^1_%INQ 2_O*MSOS V4.0_^1_%INP DEJECT-*_!GET LEVEL 2 STATUS_3*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%AND- BIT6_%CHECK FOR PRE-READ FAILURE_+*MSOS V4.0_^1_%SAZ ALM1_%SKIP IF NOT PRE- READ_0*MSOS V4.0_^1_%ENA PRERDR_#PRE-READ ERROR 7_5*MSOS V4.0_^1_%JMP* TERROR_#REPORT ERROR_9*MSOS V4.0_^1ALM1_!LRS 1_)CHECK HOPPER EMPTY_3*MSOS V4.0_^1_%SAP ALM2_%SKIP IF NOT_:*MSOS V4.0_^1_%ENA €€EMPTY_$INPUT HOPPER EMPTY_3*MSOS V4.0_^1_%JMP* TERROR_J*MSOS V4.0_^1ALM2_!LRS 1_)CHECK STACKER FULL_3*MSOS V4.0_^1_%SAP ALM3_%SKIP IF NOT_:*MSOS V4.0_^1_%ENA STKFUL_#OUTPUT STACKER FULL 22_/*MSOS V4.0_^1_%JMP* TERROR_J*MSOS V4.0_^1ALM3_!LRS 1_)CHECK FEED FAILURE_3*MSOS V4.0_^1_%SAP ALM4_%SKIP IF NOT_:*MSOS V4.0_^1_%ENA FEDERR_#FEED FAILURE ERROR 24_0*MSOS V4.0_^1_%JMP* TERROR€€_J*MSOS V4.0_^1ALM4_!AND- $5_(CHECK JAM BITS_7*MSOS V4.0_^1_%SAZ NOTECH_#NONE_A*MSOS V4.0_^1_%ENA CRDJAM_#CARD JAM ERROR 25_4*MSOS V4.0_^1_%JMP* TERROR_J*MSOS V4.0_^1NOTECH ENA ALARM_$ALARM - NO TECH. DISCRIPTION 2_'*MSOS V4.0_^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_%LD€€A- 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* TER€€ROR_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**_^1_%ENA $1C_*INT. ON DATA - EOP - ALARM_'**MSOS 4.1**_^1_%OUT DEJECT-*_^1SAVSTA ENA 1_^1_%STA- T€€IME,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 S€€NC_*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 ADDRESSE€€S_,***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_%SAN 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- E€€OFCRD,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 NEO€€FX_(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_%S€€PC 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_%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 ESTA€€T1 = 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* F€€RDB4_(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_$CARD 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_$UPDA€€TE 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 COMPLETE_^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_*CALCULAT€€E 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 ADC $520E_(SCHLD UP FOR READ DATA_+**MSOS 4.1**_^1_%ADC *-*_L**MSOS 4.1**_^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 INTERRUPT 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***_"PROCESS 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- CORE,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- H0€€00F_^1_%LDQ- CORE,I_^1_%STA- (ZERO),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_%JM€€P GETWEX_^1_%EJT_]_^1***_"REQUEST 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 V4.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 HOLERRITH_^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€€ I17292+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 ADC $520A_(SCHED DOWN €€FOR ALARM_-**MSOS 4.1**_^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**_^1_%ENA UMAKQ-TOMAKQ_^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 WITH 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_]_^__<PD17331 CSY/ A45 P€1_%NAM D17331_'DECK-ID A45 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$THIS DRIVER DOES NOT SUPPORT SPECIAL OPTION DT193-A_^1*_6*** *******_^1*_$FOR 1733-1 IN A 1 X 8 CONFIGURATION_^1*_$CORE-TO-CORE TRANSFER IS NOT IMPLEMENTED_^1*_$THIS DRIVER WILL NOT€€ SUPPORT 813 OR 814 FILES_^1*_6***_^1_%SPC 2_^1 SPC 1_]_^1*_*THE MASS MEMORY ADDRESS GIVEN IN THE CALL_^1*_*IS INTERPRETED AS FOLLOWS_^1*_*FOR READ/WRITE AS A WORD ADDRESS_^1*_*FOR FREAD/FWRITE AS A SECTOR ADDRESS (=96 WORDS)_^1_%SPC 3_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT I17331_'INITIATOR_^1_%ENT C17331_'CONTINUATOR_^1_%ENT E17331_'ERROR TIME OUT_^1_%EXT LOG_M**MSOS4.0*€€*_^1_%EXT COMPV4_'MAGNITUDE COMPARISON SUBR.(TRVEC)_^1_%SPC 2_^1*_$LOCORE REFERENCES_^1_%EQU LPMSK(2)_^1_%EQU H1FFF(LPMSK+13)_^1_%EQU H3FFF(LPMSK+14)_^1_%EQU H7FFF(LPMSK+15)_^1_%EQU NZERO($12)_^1_%EQU ONEBIT($23)_^1_%EQU H8000(ONEBIT+15)_^1_%EQU HF000($1E)_^1_%EQU ZROBIT($33)_^1_%EQU ZERO($22)_^1_%EQU AFNR($B5)_#ENTRY POINT TO FIND NEXT REQUEST_^1_%EQU ACOMPC($B6)_#-€€_#-_!-_!COMPLETE REQUEST_^1_%EQU ASABS($BD)_$-_#-_!-_!ABSOLUTIZE S_^1_%EQU ACABS($BE)_$-_#-_!-_%-_%C_^1_%EQU ADISP($EA)_$-_#-_!-_!DISPATCHER_^1_%EQU AMONI($F4)_$-_#-_!-_!MONITOR_^1_%SPC 2_^1*_$EQU WDFWD(1)_$FWA_^1_%EQU PLU(3)_^1_%EQU WDLEN(4)_$N_^1_%EQU WDSEC(6)_$SECTOR_^1_%SPC 2_^1*_$PHYSICAL DEVICE TABLE REFERENCES_^1_%EQU CLCK(4)_$4DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_%5€€LOGICAL UNIT ASSIGNED THIS PDT_^1_%EQU EPTR(6)_$6ADDRESS OF PARAMETER LIST_^1_%EQU GENST(7)_#7Q-REG TO OBTAIN STATUS_^1_%EQU SYST(8)_$8SYSTEM STATUS, CLASS - TYPE_^1_%EQU RQST(9)_$9REQUESTS STATUS_^1_%EQU FWD($A)_#10FIRST WORD ADDRESS_^1_%EQU LWD($B)_#11LAST WORD ADDRESS +1_^1_%EQU STS($C)_#12LAST HARDWARE STATUS_^1_%EQU ERCONT($D) 13ERR COUNTER_^1_%EQU FDATAF($E) 14DATA€€ TRANSFER FUNCTION_^1_%EQU FILEAD($F) 15FILE ADDRESS/ SECTOR_$(FNR/CMPLT)_^1_%EQU FCONN($10) 16UNIT SELECT CODE_^1_%EQU LSTSEC($11)_!17LAST SECTOR READ INTO BUFF_^1_%EQU ECALL1($12) 18*_^1_%EQU ECALL2($13) 19* OVERLAY PARAMETERS_^1_%EQU ECALL3($14) 20* MOVED TO HERE_^1_%EQU ECALL4($15) 21*_^1_%EQU OTHER($16) 22ADDRESS OF NEXT PDT ON THREAD_^1*ADDED FOR 1733-1 OVERLAPPIN€€G SEEK_^1_%EQU COMPAR($17) 23COMPARE FLAG_"(0 - $40)_^1_%EQU WORDNO($18) 24WORD NO. WITHIN SECTOR_^1_%EQU TEMFWD($19) 25TEMP FWA_^1_%EQU TEMLWD($1A) 26TEMP LWA+1_^1_%EQU TEMSEC($1B) 27TEMP SECTOR_^1_%EQU RP($1C)_#28REQUEST PRIORITY_^1_%EQU TEMREQ($1D) 29TEMPORARY REQUEST_^1_%EQU TEMP2($1E) 30TEMP STORAGE_^1_%EQU RETRN($1F) 31RETURN ADDRESS WITHIN DRIVER_^1_%EQU BUFF($20€€)_#32 BUFFER OF 96 WORDS FOR WORD ADDRESSING_^1_%SPC 2_^1*_$INTERNAL CONSTANTS_^1_%EQU CLCKVA(1)_#1 SEC. TIME OUT VALUE_^1DELAY EQU DELAY(5)_^1_%SPC 2_^1*P73310ADC $5209_(00 SCHEDULER CALL_^1*_$ADC I17331_'01 INITIATOR ADDRESS_^1*_$ADC C17331_'02 CONTINUATOR ADDRESS_^1*_$ADC E17331_'03 TIMEOUT ERROR ADDRESS_^1*_$NUM -1_+04 DIAGNOSTIC CLOCK_^1*_$NUM 0_,05 LOGICAL UN€€IT_^1*_$NUM 0_,06 PARAMETER LOCATION_^1*_$NUM $0181_(07 CONVERTER, EQUIPMENT, STATION_^1*_$ADC $1006+T33854 08 REQUEST STATUS_^1*_$NUM $0200_(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 COUNTER_^1*_$NUM 0_,14 DATA TRANSFER FUNCTION_^1*_$NUM 0_,15 FILE ADDRESS / SECTOR N€€UMBER_^1*_$NUM $8100_(16 NO COMPARE FLAG / DIRECTOR FUNCTIO_^1*_$NUM 0_,17 LAST SECTOR READ INTO BUFFER_^1*_$NUM 0_,18 OVERLAY AREA (SCHEDULER CALL)_^1*_$NUM 0_,19 OVERLAY AREA (COMPLETION ADDRESS)_^1*_$NUM 0_,20 OVERLAY AREA (THREAD)_^1*_$NUM 0_,21 OVERLAY AREA (LOGICAL UNIT)_^1*_$ADC P73311_'22 PHYSTB THREAD_^1*_$NUM 0_,23 COMPARE FLAG_^1*_$NUM 0_,24 WORD NUMBER€€ WITHIN SECTOR_^1*_$NUM 0_,25 TEMPORARY FWA_^1*_$NUM 0_,26 TEMPORARY LWA + 1_^1*_$NUM 0_,27 TEMPORARY SECTOR_^1*_$NUM 0_,28 TEMPORARY REQUEST PRIORITY_^1*_$NUM 0_,29 TEMPORARY REQUEST_^1*_$NUM 0_,30 TEMPORARY STORAGE_^1*_$NUM 0_,31 RETURN ADDRESS WITHIN DRIVER_^1*_$BZS (96)_)32 BUFFER FOR WORD ADDRESSING_^1_%EJT_]_^1***************************************************€€*_^1*_]_^1* ALL ROUTINES ARE ENTERED WITH ADDRESS OF_^1*_$PHYSTB IN Q-REG._^1*_]_^1*_"I N I T I A T O R_^1*_]_^1****************************************************_^1_%SPC 2_^1I17331 STQ- I_,PDT ADDRESS TO I_^1_%STQ POINTR_^1DK_#RTJ- (AFNR)_'FIND NEXT REQUEST_^1_%JMP* NOBSY_(NO REQUEST THIS DEVICE, CHECK SEEK COMPLETE_^1DKD_"LDA- LWD,I_(GET LAST WORD ADDRESS_.**MSOS 4.0_^1DKDK_€€!INA -1_N**MSOS4.0**_^1_%LDQ- FWD,I_(GET FIRST WORD ADDRESS_-**MSOS 4.0_^1_%RTJ SIGNCK_'CHECK IF SIGNS OF FWD SAME AS LWAD **MSOS 4.0_^1_%JMP* LENOK_(RETURN HERE IF LWAD LARGER THAN FWAD**MSOS 4.0_^1_%JMP* NOTOK_(RETURN HERE IF FWAD LARGER THAN LWAD**MSOS 4.0_^1_%SUB- FWD,I_(IF SIGNS ARE SAME,RETURN IS HERE FOR**MSOS 4.0_^1_%SAP LENOK-*-1_#COMPARE--SKIP IF LWD IS GT FWD_$**MSOS€€ 4.0_^1NOTOK LDA- FWD,I_(NO,MAKE LWA GT FWA_1**MSOS 4.0_^1_%INA 1_^1_%STA- LWD,I_^1LENOK LDQ- EPTR,I_'PARAMETER ADDRESS_^1_%LDA- (ZERO),Q_%READ FIRST IN LIST_^1_%STA- TEMREQ,I_^1_%ARS 4_,RIGHT JUSTIFY RP_^1_%AND- LPMSK+4_%MASK 4 LSB_^1_%STA- RP,I_)SAVE REQUEST PRIORITY_^1_%LDA- TEMREQ,I_^1_%AND =N$3E00_%MASK FOR REQUEST CODE_.**MSOS 4.0_^1_%STA- TEMREQ,I_$SAVE REQUEST CODE_^1_€€%ARS 9_O**MSOS4.0**_^1_%SAN NOTDIR_'NOT DIRECTORY CALL_^1_%LDA- WDSEC,Q_%GET SYSTEM SECTOR_^1_%STA- FILEAD,I_^1_%RTJ* READOP_'READ_^1_%JMP* USEOWN_'COMPLETE_^1NOTDIR EQU NOTDIR(*)_^1_%INA -14_*CHECK FOR MOTION REQUEST_***MSOS4.0**_^1_%SAN CHKREQ_'NOT MOTION_^1_%STA- FWD,I_K**MSOS4.0**_^1_%STA- LWD,I_K**MSOS4.0**_^1_%JMP* USEOWN_'MOTION REQUEST. IGNORE REQUEST_"**MSOS4.0**_^1C€€HKREQ ENA 1_^1_%AND- RQST,I_'GET READ/WRITE BIT_^1_%SAN NOCHK_^1_%RTJ CKOVRL_'CHECK OVERLAY_^1NOCHK LDA- (ZERO),Q_$GET REQUEST WORD_^1_%AND- ONEBIT+14_#CHECK FOR PART 1 TYPE REQUEST_%**MSOS 4.0_^1_%SAZ NORMO-*-1_#SKIP IF PART 0 TYPE REQUEST_(**MSOS 4.0_^1_%LDA- 7,Q_*GET SECTOR ADDRESS_1**MSOS 4.0_^1_%LDQ- 6,Q_*GET MSB_^1_%JMP* NORM1_L**MSOS 4.0_^1NORMO RTJ- (ASABS)_%GO ABSOLU€€TIZE STARTING ADDRESS_$**MSOS 4.0_^1_%TRA Q_$ADDRESS OF S_^1_%LDA- 2,Q_"SECTOR NUMBER_^1_%LDQ- 1,Q_^1NORM1 STA- FILEAD,I_$STORE IN PYSTAB_4**MSOS 4.0_^1_%STQ- WORDNO,I_$SAVE POSSIBLE MSB_^1NO1_"LDQ- RQST,I_!REQUEST STATUS_^1_%QLS 14_^1_%SQM FORMAT_'FORMATTED REQUEST_^1_%JMP LIKDUM_'WORD ADDRESSING_^1FORMAT QLS 1_^1_%SQM FWRITE_'FORMATTED WRITE_^1_%RTJ* READOP_'FORMAT READ_^1€€_%JMP* USEOWN_^1FWRITE RTJ* WRITOP_^1* PREPARE FOR COMPLETION ROUTINE_^1*_]_^1USEOWN RTJ- (ACOMPC)_$COMPLETE REQUEST_^1USE10 JMP* DK_^1_%SPC 2_^1****************************************************_^1*_$*_"READ/WRITE THE DISK FROM FILEAD ON DISK TO OR_^1*_$*_"FROM FWD TO LWD-1_^1*_]_^1****************************************************_^1_%SPC 2_^1LASTRW NUM 0_,LAST R/W CALL €€--DEBUG AID--_^1READOP 0_"0_,READ_^1_%LDQ* READOP_'GET RETURN_^1_%ENA 3_,READ INDICATOR_^1_%JMP* RD2_^1WRITOP 0_"0_,FORMAT WRITE_^1_%LDQ* WRITOP_'GET RETURN_^1_%ENA 2_,WRITE INDICATOR_^1RD2_"ADD- GENST,I_!FUNCTION FOR GETTING STATUS_^1_%STA- FDATAF,I_!FUNCTION FOR DATA TRANSFER_^1_%STQ* LASTRW_^1_%STQ- RETRN,I_%SAVE RETURN_^1RD4_"LDA- FILEAD,I_%SYSTEM SECTOR NUMBER_^1_%STA* SAVSE€€C_'SAVE SECTOR NUMBER_^1_%LDA- FDATAF,I_$DATA TRANSFER FUNCTION_^1_%AND- LPMSK+3_%($0007)_^1_%INA -3_+CHECK FOR WRITE_^1_%SAZ BUFCK_(SKIP IF WRITING_^1_%JMP* BUFCK2_^1BUFCK LDA =XBUFF,I_$ADDRESS OF PDT BUFFER_^1_%EOR- FWD,I_(FIRST WORD OF TRANSFER_^1_%SAN BUFCKA_'NOT WRITE FROM PDT BUFF, CHECK O-WRITE_^1_%JMP* BUFCK2_'LEGAL OVERWRITE, CONTINUE_^1BUFCKA LDA- LWD,I_(PICKUP LWA+1€€ OF TRANSFER_^1_%LDQ- FWD,I_(PICKUP FWA OF TRANSFER_^1_%RTJ COMPV4_'GET TRANSFER LENGTH_^1_%CLR Q_^1_%DVI =N96_)DIVIDE LENGTH INTO SECTORS_^1_%SQN BUFCK1_'SKIP IF A REMAINDER_^1_%INA -1_+DECREMENT TO GET CORRECT LENGTH_^1BUFCK1 ADD* SAVSEC_'ADD STARTING SECTOR_^1_%SUB- LSTSEC,I_$SECTOR CURRENTLY IN BUFFER_^1_%SAM BUFCK2_'OF,LSTSEC.GT.END SECTOR OF TRANSFER_^1_%LDA- LSTSEC,I_^€€1_%SUB* SAVSEC_^1_%SAM BUFCK2_'OK,LSTSEC.GT.SAVSEC_^1_%ENA 0_^1_%STA- LSTSEC,I_$CLEAR LSTSEC_^1BUFCK2 ENQ 0_^1_%LDA* SAVSEC_^1*_83 CARDS REMOVED FOR PSR 90*2673_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%STA- FILEAD,I_!CONVERTED TO CYLINDER NO._^1_%ENA 0_,INITIALIZE ERROR COUNT_^1_%STA- ERCONT,I_!CLEAR COUNTER_^1_%LDA- RQST,I_^1_%AND* REQMSK_'CLEAR CONTROL BITS_^1_%INA $20_*SET €€NEED SEEK BIT_^1_%STA- RQST,I_^1_%LDA XFER_^1_%SAZ SEEKIT_^1_%JMP- (ADISP)_%EXIT, XFER ACTIVE_^1SAVSEC NUM 0_^1SEEKIT RTJ* SEEK_)GO START SEEK_^1_%SPC 2_^1****************************************************_^1*_$THIS CODE DETERMINES DEVICES WAITING TO SEEK_^1*_$AND WHICH HAVE COMPLETED SEEKS_^1****************************************************_^1_%SPC 1_^1NOBSY LDA- OTHER,€€I_%GET NEXT PDT ADDRESS_^1_%STA- I_^1_%EOR POINTR_'TEST ALL DEVICES CHECKED_^1_%SAN GOTEOP_'MORE UNITS TO CHECK_^1_%JMP* CHECK_(FIND HIGHEST RP_^1GOTEOP LDA- SYST,I_'SYSTEM STATUS_^1_%SAM 1_,OPERATION IN PROGRESS_^1_%JMP* NOBSY_(NOT BUSY_^1_%ENA $20_^1_%AND- RQST,I_'MASK NEED SEEK_^1_%SAZ NONED_^1_%ENA 0_,SET COMPAR 0_^1_%JMP* SEEKIT_'GO SEEK AND CONTINUE SEARCH_^1NONED ENA €€ $10_^1_%AND- RQST,I_'MASK READY XFER_^1_%SAN NOBSY1_'READY_^1_%RTJ* STATUS_^1_%ALS 10_+ALARM IN SIGN BIT_^1_%SAP NOLRM1_'NO ALARM_^1_%JMP DETERR_'GO DETERMINE ERROR TYPE_^1NOLRM1 ALS 2_,ON CYLINDER IN SIGN BIT_^1_%SAP NOBSY1_'NOT ON CYLINDER YET_^1_%ENA $10_*ON_^1_%ADD- RQST,I_'SET READY XFER_^1_%STA- RQST,I_^1_%ENA -0_^1_%STA- CLCK,I_'TURN OF DIAG CLOCK_^1NOBSY1 JMP* NOBS€€Y_^1****************************************************_^1_%SPC 2_^1****************************************************_^1*_]_^1*_$THIS CODE DETERMINES WHICH DEVICE HAS_^1*_$THE HIGHEST RP OF THOSE READY TO XFER_^1*_$IF ANY. OTHERWISE THE CONTROLLER IS_^1*_$RELEASED IF NOT DEVICE IS ACTIVE._^1*_]_^1****************************************************_^1_%SPC 1_^1CHECK ENA -1_€€+INITIALIZE BOOKS_^1_%STA* RPL_*REQUEST PRIORITY LEVEL START -1_^1_%ENA 0_^1_%STA* NACTV_(ASSUME NO DEVICES ACTIVE_^1_%LDA* XFER_^1_%SAZ CHECK1_'NO XFER IN PROGRESS_^1_%JMP* FNLEXT_'XFER GOING SHOULDNOT BE HERE_^1CHECK1 LDQ* POINTR_'START AT BASE_^1_%STQ- I_^1NOTEND LDA- SYST,Q_'SYSTEM STATUS_^1_%SAP NEXTDV_'NO OP IN PROGRESS_^1_%RAO* NACTV_(BUMP ACTIVE COUNTER_^1_%ENA $10_^1_%€€AND- RQST,Q_'MASK READY XFER BIT_^1_%SAZ NEXTDV_'NOT READY TO XFER_^1_%LDA- RP,Q_)RP THIS DEVICE_^1_%SUB* RPL_*MINUS CURRENT LEVEL_^1_%SAM NEXTDV_'THE OLD ONE IS HIGHER_^1_%STQ* XFER_)THIS IS CANDIDATE FOR XFER_^1_%LDA- RP,Q_)UPDATE BOOKS_^1_%STA* RPL_^1NEXTDV LDA- OTHER,Q_^1_%TRA Q_^1_%EOR* POINTR_'CHECK NEXT PDT SAME AS START_^1_%SAZ END_^1_%JMP* NOTEND_'MORE DEVICES, GO CHEC€€K_^1END_"LDA* XFER_)ANY READY_^1_%SAZ FNLEXT_^1_%STA- I_,THIS ONE READY_^1_%STA* POINTR_'NEW BASE_^1_%JMP* DIK03_(GO XFER_^1*_810 CARDS DELETED_^1FNLEXT JMP- (ADISP)_%FINAL EXIT_^1_%SPC 2_^1****************************************************_^1*_]_^1*_8POSITION HEAD WITH A LOAD FILE_^1*_8ADDRESS COMMAND_^1*_8THIS SECTION IS EXECUTED FIRST_^1**************************************€€**************_^1_%SPC 2_^1SEEK_!NUM 0_^1_%STA- COMPAR,I_$SAVE COMPAR_^1_%ENA $5A_*SEEK,ALARM,EOP,CLEAR_^1_%RTJ* STATUS_'AND CONNECT_^1_%INQ 1_,DIRECTOR FUNCTION(2)_^1_%LDA- FILEAD,I_$DISK ADDRESS FOR SEEK_^1_%RTJ* OUT_*ISSUE SEEK_^1_%LDA- RQST,I_^1_%AND =N$FFC7_%RESET XFER READY,SEEKING,NEED SEEK_^1REQMSK EQU REQMSK(*-1)_^1_%INA 8_,SET_!SEEKING_^1_%STA- RQST,I_^1_%LDA- I_^1€€_%STA* SEEKU_(SET PDT ADDRESS OF SEEKING UNIT_^1_%ENA CLCKVA_^1_%STA- CLCK,I_'SET DIAGNOSTIC CLOCK ACTIVE_^1_%JMP- (ADISP)_%WAIT FOR EOP INT_^1_%SPC 2_^1****************************************************_^1****************************************************_^1STATUS NUM 0_,ENTRY--- A -- COMBINED WITH UNIT SELECT_^1_%TRA Q_^1_%LDA- FCONN,I_^1_%AND =N$F00_'MASK UNIT SECT_^1_%€€AAQ A_^1_%STA* SAVCOD_'SAVE CONNECT CODE_^1_%LDQ- GENST,I_^1_%RTJ* OUT_*OUT FUNCTION_^1_%INP DEVER1-*_^1_%STA- STS,I_^1_%AND- ONEBIT_'MASK READY_^1_%SAN UREDY_(IS READY_^1_%LDA =N0_*RESTORE CONNECT CODE_^1SAVCOD EQU SAVCOD(*-1)_^1_%RTJ* OUT_*OUT FUNCTION - AGAIN -_^1_%INP DEVER1-*_$READ STATUS_^1_%STA- STS,I_^1_%AND- ONEBIT_'MASK READY_^1_%SAN UREDY_(IS READY_^1_%ENQ 14_+ER€€R 14 -- NOT READY_^1_%JMP DET3_^1UREDY LDA- STS,I_(RESTORE STATUS FOR CALLER_^1_%JMP* (STATUS)_^1_%SPC 2_^1****************************************************_^1XFER_!NUM 0_,ADDRESS OF CURRENT PDT TRANSFERRING_^1RPL_"NUM -1_+HIGHEST RP_)*_^1NACTV NUM 0_,NO. ACTIVE DEVICES * TEMPY_^1POINTR ADC 0_,PDT POINTER OF RPL *_^1NOMRST NUM 0_,NO MORE STATUS_^1SEEKU NUM 0_,PDT AD€€DRESS OF SEEKING UNIT_^1****************************************************_^1_%SPC 2_^1OUT1_!NUM 0_^1_%STQ* SAVQ_)SAVE Q FOR DEBUG_^1_%STA* SAVA_)SAVE OUT CODE_^1_%LDA* OUT1_)MOVE EXIT ADDR FOR RETURN_^1_%STA* OUT_^1_%JMP* OUT2_)GO TO COMMON CODE_^1OUT_"NUM 0_,OUTPUT SUBROUTINE_^1_%STQ* SAVQ_)SAVE Q FOR DEBUG_^1_%STA* SAVA_)SAVE OUT CODE_^1OUT2_!ENA 0_^1_%STA* RJTCNT_'CLEAR R€€EJECT COUNTER_^1AGNOUT LDA* SAVA_^1_%OUT RJCT-*_'OUT AND TEST FOR REJECT_^1_%JMP* (OUT)_(NO REJECT_^1RJCT_!JMP* DEVER1_'INTERNAL REJECT --ALWAYS FATAL_^1_%RAO* RJTCNT_'EXTERNAL REJECT, BUMP COUNTER_^1_%LDA* RJTCNT_^1_%INA -10_*TEST MAX_^1_%SAZ 1_,TRIED 10 TIMES, SOLID EXT REJECT_^1_%JMP* AGNOUT_'NOT 10 REJECTS TRY AGAIN_^1_%LDA* OUT1_^1_%EOR* OUT_*SHOULD CONTROL RETURN TO CALLER€€_^1_%SAZ OUT3_)SKIP IF YES_^1_%JMP* EXTREJ_^1OUT3_!JMP* (OUT)_^1RJTCNT NUM 0_,REJECT COUNTER_^1SAVA_!NUM 0_,SAVED CODE_^1SAVQ_!NUM 0_,SAVED Q-CODE FOR DEBUG_^1_%SPC 2_^1****************************************************_^1DEVER1 JMP* INTREJ_'REJECTS_^1_%JMP* EXTREJ_^1****************************************************_^1_%EJT_]_^1*******************************************€€*********_^1* C O N T I N U A T O R_^1*_]_^1*_8CONTROL RETURNS HERE WHEN AN_^1*_8INTERRUPT IS RECEIVED FROM THE_^1*_81733-1 CONTROLLER_^1*_]_^1****************************************************_^1C17331 LDA* XFER_)GET XFER PDT_^1_%SAZ 1_^1_%JMP* GOTQ_)XFER PDT IS ONE WE WANT_^1_%LDA* POINTR_'OLD POINTR_^1_%SAZ 1_^1GOTQ_!TRA Q_,RESTORE PDT_^1_%STQ- I_^1_%STQ* POINTR_'NEW BASE €€POINTR_^1GOTXFR LDQ- GENST,I_^1_%INP DEVERR-*_$READ STATUS_^1_%STA* LSTATS_'DEBUG -LAST CON STATUS-_^1_%STA- STS,I_^1_%ENA $52_*SEEK,ALARM,CLEAR_^1_%RTJ* OUT_*CLEAR INTERRUPT_^1DIK0_!ENA $60_^1_%AND- STS,I_(MASK ALARM_^1_%SAN DIK02_^1DIK00 LDA* XFER_^1_%SAN DIK03_(DOING XFER_^1_%JMP* DIK02B_^1DIK02 LDA* XFER_^1_%SAN DIK02D_'DETERMINE ERROR_^1DIK02A LDA* SEEKU_^1_%SAN DIK02€€C_^1DIK02B STA* SEEKU_(CLEAR SEEK UNIT FLAG WORD_^1_%JMP GOTEOP_^1DIK02C STA- I_^1_%ENA 0_^1_%STA* SEEKU_(CLEAR SEEK UNIT FLAG WORD_^1DIK02D JMP* DETERR_^1DIK03 LDA- RQST,I_^1_%AND- ONEBIT+3_$GET SEEK INDICATOR_^1_%SAN DATA_)SEEK OPERATION IS NOW COMPLETE_^1_%LDQ- RETRN,I_%GET RETURN_^1_%ENA 0_^1_%STA* XFER_)CLEAR TRANSFER IN PROGRESS_^1_%LDA- FCONN,I_%IF BIT 15 OF FCONN IS A €€1,DO NOT_^1_%SAM GOBACK_'NO COMPARE_^1_%LDA- COMPAR,I_$GET CPMPARE FLAG_^1_%SAN GOBACK_'ALREADY COMPARED_^1_%ENA $40_*SET COMPARE_^1_%JMP SEEKIT_'GO SEEK AND FIND NEXT RDY XFER_^1GOBACK JMP- (ZERO),Q_$RETURN TO CALLER_^1LSTATS NUM 0_,LAST CONTINUATOR STATUS_^1_%EJT_R**MSOS4.0**_^1* **********************************************************_^1* *******************************€€***************************_^1*_!B I T_!P O S I T I O N_!I N_!S T A T U S_^1* -----------------------------------------------------------_^1*_!15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0_^1*_!0_!1_!1_!1_!1_!1_!1 1 0 0 1 1 0 1 1 1 OK **MSOS4.0**_^1*_!X_!0_!0_!0_!0_!0_!0 0 X X 0 1 X 1 0 1 OK **MSOS4.0**_^1* ----------------------------------------------€€-------------_^1*_!N_!P_!S_!D_!A_!S_!L C P N A E O I B R_^1*_!O_!R_!T_!E_!D_!E_!O H R O L N N N U E_^1*_!T_!O_!O_!F_!D_!E_!S E O_#A D_#T S A_^1*_%T_!R_!E_!R_!K_!T C T C R_#C E Y D_^1*_!U_!E_!A_!C_!E_)K E O M O Y R_#Y_^1*_!S_!C_!G_!T_!S_!E_!D W C M_#F L R_^1*_!E_!T_!E_!I_!S_!R_!A O T P_'I U_^1*_!D_*V_%R_!T R E A_#O N P_^1*_%F_!P_!E_!€€E_!O_!A D D R_#P D T_^1*_%A_!A_%R_!R_+E_#E E_^1*_%U_!R_!T_!R_)E_*R R_^1*_%L_!I_!R_!O_)R_*A_^1*_%T_!T_!A_!R_)R_*T_^1*_*Y_!C_-O_*I_^1*_.K_-R_*O_^1*_IN_^1*_!*_]_^1*_!BIT 15 SHOWS OTHER COMPUTER HAS CONTROLLER RESERVED_^1*_]_^1* **********************************************************_^1*_82 CARDS DELETED_^1*_]_^1*_8DATA TRANSFER IS EXECUTED AFTER_^1*_8HEADS ARE ON CYLINDER_^€€1*_]_^1DATA_!EOR- RQST,I_'CLEAR SEEK BIT_^1_%STA- RQST,I_^1_%SPC 1_^1*_]_^1*_$MUST RESELECT UNIT_^1*_$AND LOAD ADDRESS_!* IN CASE LAST UNIT WAS SEEK AND NOT THIS_^1*_]_^1_%SPC 1_^1_%ENA $16_*ALARM,READY NOT BUSY,CLEAR_^1_%RTJ* STATUS_^1_%INQ 1_,DIRECTOR FUNCTION_^1_%LDA- FILEAD,I_^1_%RTJ* OUT_*RELOAD SEEK ADDRESS_^1*_]_^1_%IIN 0_,PREVENT CONCURRENT USE OF (FWD-1)_^1_%LDQ- FWD,€€I_(PREPARE FOR DATA TRANSFER_^1_%SQN NONZRO_'SPECIAL CASE FOR FWD = 0_^1_%LDQ- ($E9)_(MODE SWITCH_7**MSOS4.0**_^1_%SQN M65K_)SKIP IF 65K_7**MSOS4.0**_^1_%LDQ- H7FFF_($7FFF - 32 K_6**MSOS4.0**_^1_%JMP* SAVLWA_J**MSOS4.0**_^1M65K_!LDQ- NZERO_($FFFF - 65K_7**MSOS4.0**_^1_%JMP* SAVLWA_J**MSOS4.0**_^1NONZRO INQ -1_+GET FWD LESS 1_^1SAVLWA STQ* TEMP_)SAVE ADDRESS OF FWA-1_-**MSOS4.0**€€_^1_%LDA- (ZERO),Q_%CONTENT OF FWD-1_^1_%STA* TEMP1_"(FWD-1)_^1_%LDA- LWD,I_)LAST WORD ADD. +1_^1_%STA- (ZERO),Q_%SET IN FWD-1_^1_%LDQ- FDATAF,I_$DATA TRANSFER FUNCTION_,**MSOS4.0**_^1_%LDA- COMPAR,I_$IF COMPAR EQ 0 THEN PERFORM A_^1*_8READ/WRITE_^1_%SAZ RWOP_^1_%LDQ- GENST,I_%LOAD Q WITH COMPARE FUNCTION (5)_^1_%INQ 4_^1RWOP_!LDA* TEMP_)FIRST WORD ADDRESS LESS 1_^1_%OUT 2_,MAY €€REJECT ON 600 NS 1784_^1_%JMP* DELAY1_^1_%NOP 0_^1_%RAO- CLCK,I_'WASTE TIME FOR 600 NS._^1_%RAO- CLCK,I_'COUNT REJECTS BY TWO_^1_%LDA- CLCK,I_^1_%INA -4_+CHECK MAX_^1_%SAP ONCE_)TO MANY REJECTS, FAIL IT_^1_%JMP* RWOP_)TRY XFER AGAIN_^1DELAY1 EQU DELAY1(*)_^1_%ENA DELAY_^1_%INA -1_^1_%SAZ 1_,DELAY FOR HARDWARE TO GET FWA-1_^1_%JMP* *-2_^1_%LDQ* TEMP_^1_%LDA* TEMP1_!RESTORE FW€€D-1_^1_%STA- (ZERO),Q_^1EXIT_!ENA CLCKVA_^1_%STA- CLCK,I_'SET DIAGNOSTIC TIMER CLOCK ACTIVE_^1_%JMP- (ADISP)_^1TEMP_!ADC 0_^1TEMP1 ADC 0_^1_%EJT_]_^1****************************************************_^1*_]_^1*_$DIAGNOSTIC SECTION FOR 1733-1_^1*_]_^1****************************************************_^1ONCE_!NOP 0_,I/O REJECT FROM READ/WRITE SECTION_^1ONCEXT LDQ* TEMP_)EXTER€€NAL REJECT_^1_%LDA* TEMP1_^1_%STA- (ZERO),Q_$RESTORE CONTENTS OF FWD-1_^1_%EIN 0_^1_%JMP* EXTREJ_'PROCESS LIKE A NORMAL REJECT_^1*_8ALL REJECTS NORMALLY COME HERE_^1DEVERR JMP* INTREJ_'INTERNAL REJECT- FATAL CALL DIAGNOSTIC_^1EXTREJ ENQ 6_,EXTERNAL REJECT CODE IN Q_^1_%JMP* DET3_)OUTPUT MASS STG. ERR MSG._)**MSOS4.0**_^1INTREJ ENQ 5_^1_%JMP* DET3_)OUTPUT MASS STG. ERR MSG._)**MS€€OS4.0**_^1DETERR LDA- STS,I_(ERROR CODE TO BE DETERMINED_^1*_8FROM STATUS_^1_%ALS 1_,TEST FOR A PROTECT FAULT_***MSOS4.0**_^1_%SAP DETA_)SKIP IF NOT_7**MSOS4.0**_^1_%ENQ 19_+ERR 19 (PROTECT FAULT)_^1_%JMP* REPEAT_J**MSOS4.0**_^1DETA_!ALS 1_,TEST FOR A STORAGE PARITY ERROR_"**MSOS4.0**_^1_%SAP DETB_)SKIP IF NOT_7**MSOS4.0**_^1_%ENQ 3_,PARITY ERROR (ERROR 3)_+**MSOS4.0**_^1_%€€JMP* REPEAT_J**MSOS4.0**_^1DETB_!ALS 2_,TEST FOR AN ADDRESS ERROR_)**MSOS4.0**_^1_%SAP DETC_)SKIP IF NOT_7**MSOS4.0**_^1_%ENQ 18_+ERR 18 (ADDRESS ERROR)_^1_%JMP* REPEAT_J**MSOS4.0**_^1DETC_!ALS 1_,TEST FOR A SEEK ERROR_-**MSOS4.0**_^1_%ENQ 16_+ERR 16 (SEEK ERROR)_^1_%SAM REPEAT_'SKIP IF A SEEK ERROR_.**MSOS4.0**_^1_%ALS 1_,TEST FOR LOST DATA_0**MSOS4.0**_^1_%ENQ 1_,LOST D€€ATA (ERROR 1)_.**MSOS4.0**_^1_%SAM REPEAT_'SKIP IF LOST DATA_1**MSOS4.0**_^1_%ALS 1_,TEST FOR A CHECKWORD ERROR_(**MSOS4.0**_^1_%ENQ 20_+CHECKWORD ERROR (20)_^1_%SAM REPEAT_'SKIP IF A CHECKWORD ERROR_)**MSOS4.0**_^1_%ENQ 7_,COMPARE ERROR (ERROR 7)_***MSOS4.0**_^1_%ALS 2_^1_%SAM REPEAT_'COMPARE (ERROR 7)_^1_%ENQ 14_+ERR 14 (NOT READY)_^1REPEAT RAO- ERCONT,I_$BUMP THIS R€€EQUEST ERROR COUNT_^1_%LDA- ERCONT,I_^1_%AND- LPMSK+4_^1_%INA -10_*PER RECOMMENDATION IN PERIPHERAL_^1*_8REF MANUAL_^1_%SAP DET3_)IF MORE THAN 10 ATTEMPS,CALL THE_^1*_8DIAGNOSTIC OTHERWISE WAIT FOR_^1*_8CONTROLLER TO GO NOT BUSY_^1_%CLR A_^1_%STA XFER_)CLEAR XFER IN PROGRESS FLAG_^1_%LDA- COMPAR,I_^1_%JMP SEEKIT_'SEEK AND SERVICE WAITING SEEKS_^1DET3_!LDA- SYST,I_^1_%AND- H3FF€€F_^1_%ADD- ONEBIT+14_^1_%STA- SYST,I_'SET E = 1_^1_%LDA- RQST,I_^1_%AND- H1FFF_^1_%EOR- H8000_^1_%STA- RQST,I_'SET BIT 15 FOR USER RETURN FLAG_^1_%LDA- ELU,I_(GET LU_^1_%ALS 6_,POSITION_^1_%AAQ Q_,COMBINE LU AND ERROR CODE_^1_%CLR A_^1_%STA XFER_)CLEAR XGER IN PROGRESS FLAG_^1_%RTJ LOG_*LOG THE ERROR_5**MSOS4.0**_^1JMPUSE JMP USEOWN_'GO TO COMPLETE REQUEST_^1_%EJT_]_^1*******€€*********************************************_^1*_]_^1*_$DIAGNOSTIC TIME OUT ROUTINE_^1*_]_^1****************************************************_^1_%SPC 2_^1E17331 STQ- I_,DIAGNOSTIC TIME OUT ENTRY_^1_%STQ POINTR_'SET BASE PDT_^1_%LDQ- GENST,I_%EQUIP CODE_^1_%CLR A_,CLEAR FOR REJECT FLAG LATTER_^1_%INP 1_,READ STATUS_^1_%NOP 0_,PASS ON INTERNAL REJECT_^1_%STA- STS,I_(SAVE STA€€TUS IF ANY_^1_%LDQ- ELU,I_(LOGICAL UNIT_^1_%QLS 6_,WITH ERR CODE 0, TIME OUT_^1_%RTJ+ LOG_*GO LOG IT_^1_%LDA- STS,I_(GET LAST STATUS_^1_%SAN NORJT_(THERE WAS NO REJECT_^1_%ENQ 5_,THERE WAS REJECT, LOG AS INTERNAL_^1_%JMP* DET3_)GO SET ERROR, LOG, AND COMPLETE_^1NORJT LDQ- I_,GET PDT_^1_%JMP C17331_'GO TO CONTINUATOR, FAKE INTERRUPT_^1_%SPC 2_^1*******************************€€*********************_^1*_\**MSOS 4.0_^1*_8SIGN CHECK SUBROUTINE_.**MSOS 4.0_^1*_$IF (A) IS NEG(LARGER) AND (Q) IS POS, RETURN TO P+1_"**MSOS 4.0_^1*_$IF (Q) IS NEG(LARGER) AND (A) IS POS, RETURN TO P+2_"**MSOS 4.0_^1*_$IF SIGNS ARE THE SAME,RETURN TO P+3 AND TEST NORMALLY **MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1SIGNCK NOP 0_P**MSOS 4.0_^1_%SAP LIMA_)UPPER LIMIT IN A_3**MSO€€S 4.0_^1_%SQP LIMC_)LOWER LIMIT IN Q_3**MSOS 4.0_^1_%RAO* SIGNCK_K**MSOS 4.0_^1LIMA_!RAO* SIGNCK_K**MSOS 4.0_^1_%SQM LIMC_)Q IS LARGER THAN A_1**MSOS 4.0_^1_%RAO* SIGNCK_K**MSOS 4.0_^1LIMC_!JMP* (SIGNCK)_I**MSOS 4.0_^1_%EJT_]_^1****************************************************_^1*_]_^1*_8SIMULATE A WORD ADDRESSABLE MASS_^1*_8STORAGE_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1*_]_^1_%SP€€C 2_^1LIKDUM LDA- FILEAD,I_$LSB_^1_%LDQ- WORDNO,I_$MSB_^1LIKD1 ALS 1_P**MSOS 4.0_^1_%LRS 1_,DOUBLE PRECISION WORD ADDRESS_^1_%DVI =N96_^1N96_"EQU N96(*-1)_^1_%STA- FILEAD,I_$SECTOR INTO TABLE_^1_%STA- TEMSEC,I_$SAVE TEMP4_^1_%STQ- WORDNO,I_$SAVE WORD NO(0-95)_^1_%LDA- LWD,I_^1_%STA- TEMLWD,I_$TEMPY LWA_^1_%LDA- FWD,I_^1_%STA- TEMFWD,I_$SAVE USERS BUFFER LOC_^1_%SQN LASTSC_'N€€OT ON SECTOR BOUNDARY_^1*_]_^1*_$ON SECTOR BOUNDARY, DO WHOLE SECTORS OF WRITE_^1*_$AND ALL OF READ_^1*_]_^1_%LDA- TEMREQ,I_$GET REQUEST CODE_^1_%AND- ONEBIT+9_$MASK READ BIT_^1_%SAN 1_,READ_^1_%JMP* WRITFL_'WRITE_^1_%JMP* READFL_'READ ALL DATA_^1LASTSC LDA =XBUFF,I_$ADDRESS OF BUFFER PDT_^1_%STA- FWD,I_(PLACE INTERNAL BUFFER IN TABLE_^1_%INA 96_^1_%STA- LWD,I_^1_%LDA- FILEAD,I_€€$GET CURRENT SECTOR ADDRESS_^1_%LDQ- LSTSEC,I_$GET LAST SECTOR ADDR READ TO BUFF_^1_%STA- LSTSEC,I_$STORE CURRENT IN LAST_^1_%EAQ A_,LOGICAL DIFFERENCE_^1_%SAZ CKTRAN_'SAME AS LAST, DO NOT RE-READ_^1_%RTJ READOP_'GET FIRST SECTOR INTO INTERNAL BUFFER_^1CKTRAN LDA- TEMREQ,I_$GET REQUEST CODE_^1_%AND- ONEBIT+9_$READ OR WRITE_^1_%SAN TRANRD-*-1_"READ_^1_%JMP* RWRITE_'REGULAR WRITE€€_^1TRANRD LDQ- WORDNO,I_$TRANSFER DATA TO USER BUFF_^1_%LDA- BUFF,B_'GET DATA_^1_%LDQ- TEMFWD,I_$GET FWA_^1_%STA- (ZERO),Q_$STORE IN USER BUFF_^1_%RAO- TEMFWD,I_$BUMP FWA_^1_%LDA- TEMFWD,I_$* GET_^1_%LDQ- TEMLWD,I_$* ADDRESSES_^1_%RTJ* SIGNCK_K**MSOS 4.0_^1_%JMP* TRAN_M**MSOS 4.0_^1_%JMP* TRANON_K**MSOS 4.0_^1_%SUB- TEMLWD,I_^1_%SAM TRANON-*-1_"CONTINUE TRANSFER_^1TRAN_!JMP USEOW€€N_'TRANSFER COMPLETE,EXIT_-**MSOS 4.0_^1TRANON RAO- WORDNO,I_^1_%LDA- WORDNO,I_^1_%INA -96_^1_%SAP MORERD-*-1_"BUFFER EMPTY BUT MORE READING TO DO_^1_%JMP* TRANRD_^1MORERD ENA 1_,MORE READING_^1_%ADD- TEMSEC,I_^1_%STA- FILEAD,I_$SETUP DEVICE TABLE SECTOR NUMBER_^1_%LDA- TEMFWD,I_$FWA_^1_%STA- FWD,I_**MSOS4.0**_^1_%SQZ_!1_^1_%INA_!1_^1_%INA_!1_^1_%ADD* HOLD_)BUFFWA_<**MSOS4.0**_^1_%STA BUFLWA_J**MSOS4.0**_^1_%JMP* IOEXIT€€_J**MSOS4.0**_^1_%SPC_!2_^1INTRW STA* BUFSTT_J**MSOS4.0**_^1_%ENA 1_^1_%AND- RQST,I_^1_%SAZ_!UNPACK-*-1_^1_%LDA* CORE_^1_%JMP NRMRTB_K**MSOS4.0**_^1UNPACK JMP* FRDBX_K**MSOS4.0**_^1_%SPC_!1_^1PCKAGE NOP 0_O**MSOS4.0**_^1_%ENA 0_O**MSOS4.0**_^1_%STA- I_^1FWRBX LDA* (CORE)_J**MSOS4.0**_^1_%ALS_!6_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (HOLD),I_^1_%RAO- I_^1_%LDA* (CORE)_J*€€*MSOS4.0**_^1_%ALS 12_N**MSOS4.0**_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (HOLD),I_^1_%RAO- I_^1_%LDQ* (CORE)_J**MSOS4.0**_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAN_!FWRBY-*-1_^1_%JMP* FWB1_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1SAVIXD NUM 0_O**MSOS4.0**_^1TEMP_!NUM_!0_^1CORE_!NUM_!0_^1LAST_!NUM_!0_^1BUFSTT NUM_!0_^1SAVEI €€NUM_!0_^1HOLD_!NUM_!0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1FWRBY LDA* (CORE)_^1_%LRS_!14_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (HOLD),I_^1_%RAO- I_^1_%LDA* (CORE)_^1_%ALS_!8_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (HOLD),I_^1_%RAO- I_^1_%LDA* (CORE)_J**MSOS4.0**_^1_%ALS 14_N**MSOS4.0**_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* €€(HOLD),I_^1_%RAO- I_^1_%LDQ* (CORE)_J**MSOS4.0**_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAN_!1_^1_%JMP* FWB4_^1_%SPC_!1_^1_%LDA* (CORE)_^1_%LRS_!12_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (HOLD),I_^1_%RAO- I_^1_%LDA* (CORE)_^1_%ALS_!10_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (HOLD),I_^1_%RAO- I_^1_%LDA* (CORE)_J**MSOS4.0**_^1_%AND- $8_,$003F_<**MSOS4.0**_^1_%STA€€* (HOLD),I_^1_%RAO- I_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ_!FWB2-*-1_^1_%JMP* FWRBX_K**MSOS4.0**_^1_%SPC_!1_^1FWB1_!ENA_!0_^1_%LRS_!14_^1FWB5_!STA* (HOLD),I_^1_%RAO- I_^1_%JMP* FWB2_^1FWB4_!ENA_!0_^1_%LRS_!12_^1_%JMP* FWB5_^1FWB2_!LDA- I_^1_%STA* TEMP_^1_%LDA* SAVEI_^1_%STA- I_^1_%LDA* HOLD_L**MSOS4.0**_^1_%ADD* TEMP_L**MSOS4.0**_^1_%STA BUFLWA_J**MSOS4.0**_^€€1_%JMP* (PCKAGE)_H**MSOS4.0**_^1_%SPC_!1_^1FRDBX ENA 0_O**MSOS4.0**_^1_%STA- I_^1FRDB_!RTJ* GETCH_^1_%ALS_!10_^1_%STA* TEMP_^1_%RTJ* GETCH_^1_%ALS_!4_^1_%ADD* TEMP_^1_%STA* TEMP_^1_%RTJ* GETCH_^1_%ENQ_!3_^1_%LAQ_!Q_^1_%ARS_!2_^1_%EOR* TEMP_^1_%QLS_!14_^1_%STQ* TEMP_^1_%STA* (CORE)_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAN_!1_^1_%JMP* FINIS_^1_%RTJ* GETCH_^1€€_%ALS_!8_^1_%EOR* TEMP_^1_%STA* TEMP_^1_%RTJ* GETCH_^1_%ALS_!2_^1_%EOR* TEMP_^1_%STA* TEMP_^1_%RTJ* GETCH_^1_%LDQ* TEMP_^1_%QRS_!2_^1_%ALS_!10_^1_%LLS_!2_^1_%STQ* (CORE)_^1_%RAO* CORE_^1_%STA* TEMP_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAN_!1_^1_%JMP* FINIS_^1_%RTJ* GETCH_^1_%ALS_!6_^1_%EOR* TEMP_^1_%AND- $14_'$FFFC_^1_%STA* TEMP_^1_%RTJ* GETCH_^1_%EOR* TEMP_^1_%STA* €D(CORE)_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ_!1_^1_%JMP* FRDB_^1_%JMP* FINIS_^1GETCH NOP_!0_^1_%LDA* HOLD_^1_%ADD- I_^1_%SUB* BUFSTT_^1_%SAZ_!FINIS-*-1_^1_%LDA* (HOLD),I_^1_%RAO- I_^1_%JMP* (GETCH)_^1FINIS LDA_!SAVEI_^1_%STA- I_^1_%LDA CORE_L**MSOS4.0**_^1_%JMP BRTNV4_J**MSOS4.0**_^1_%END_]_^__ DPMAXRVB CSY/ A52 P€1_%NAM MAXRVB_'DECK-ID A52 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1731/1732 BUFFERED 601 MAG TAPE DRIVER REV.1_)**MSOS4.0**_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT RECVTB_J**MSOS4.0**_^1_%ENT CHKSV4_J**MSOS4.0**_^1_%EXT* TERFV4,ERRRV4,NOPAV4,BUFLWA,MOTNV4_-**MSOS 4.1**_^1_%EXT€€* BUFFWA,MOTIV4,SAVLV4,BCV4,BDV4_^1_%EXT* CKBSY_K**MSOS4.0**_^1_%EXT* MAKQV4_J**MSOS4.0**_^1_%EXT LOG_M**MSOS4.0**_^1ELU_"EQU ELU(5)_J**MSOS4.0**_^1EREQST EQU EREQST(8)_H**MSOS4.0**_^1ESTAT1 EQU ESTAT1(9)_G**MSOS4.0**_^1ESTAT2 EQU ESTAT2(12)_F**MSOS4.0**_^1CODE_!EQU CODE(16)_H**MSOS4.0**_^1DIAGLU EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_^1ERRCOD EQU ERRCOD(18)_F**MSOS4.0**_^1€€RTRECV EQU RTRECV(19)_"ERROR RECOVER RETURN_.**MSOS4.0**_^1ECKSUM EQU ECKSUM(20)_F**MSOS4.0**_^1ERDIRC EQU ERDIRC(21)_F**MSOS4.0**_^1TCKSUM EQU TCKSUM(22)_^1STOLSW EQU STOLSW($1F)_E**MSOS4.0**_^1BITMSK EQU BITMSK($23)_E**MSOS4.0**_^1TERM_!EQU TERM($43)_H**MSOS4.0**_^1DISP_!EQU DISP($EA)_G**MSOS4.0**_^1TRYNBR EQU TRYNBR(50)_"NUMBER OF RECOVERY RETRIES._'**MSOS4.0**_^1RECVTB N€€OP 0_O**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1RCVR_!STQ ERRNO_K**MSOS4.0**_^1_%LDQ- ELU,I_^1_%TRQ A_,LOGICAL UNIT TO A_^1_%EOR- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SAN T00001_'ITS NOT. CONTINUE_^1_%JMP* LPRTN_(IT IS, NO RECOVERY_^1T00001 QLS 6_^1_%LDA ERRNO_^1_%SUB* ADDASC_^1_%AAQ Q_O**MSOS4.0**_^1_%RTJ LOG_M**MSOS4.0**_^1_%RTJ SAVORG_'AVE ORG INFO_6**MSOS4.0**_^1_%LDA- ES€€TAT1,I_$CHK 4 READ OR WRITE_/**MSOS4.0**_^1_%AND- BITMSK+0_H**MSOS4.0**_^1_%SAN WRCVRO_'SKIP IF WRITE_5**MSOS4.0**_^1_%JMP RRCVR_K**MSOS4.0**_^1ADDASC NUM $3030_^1TIMES NUM 0_O**MSOS4.0**_^1TRIES NUM 0_O**MSOS4.0**_^1BKSPCT BSS BKSPCT(1)_G**MSOS4.0**_^1NBRBSP BSS NBRBSP(1)_G**MSOS4.0**_^1WRCVRO CLR A_O**MSOS4.0**_^1_%STA* NBRBSP_J**MSOS4.0**_^1_%STA* TRIES_K**MSOS4.0**_^1€€_%ENA 5_O**MSOS4.0**_^1_%STA* TIMES_K**MSOS4.0**_^1WRCVR LDA* TIMES_K**MSOS4.0**_^1_%SAN DEBUMP_J**MSOS4.0**_^1LPRTN LDA ERRNO_K**MSOS4.0**_^1_%SUB* ADDASC_^1_%STA- ERRCOD,I_H**MSOS4.0**_^1_%ENA 0_O**MSOS4.0**_^1_%STA- RTRECV,I_$CLEAR TRAP_8**MSOS4.0**_^1_%JMP* (RECVTB)_H**MSOS4.0**_^1DEBUMP INA -1_N**MSOS4.0**_^1_%STA* TIMES_K**MSOS4.0**_^1CLRBKP CLR A_,CLEAR BKSP CNTR_3**€€MSOS4.0**_^1_%STA* BKSPCT_J**MSOS4.0**_^1WRCVR1 LDA- ESTAT2,I_$CHK 4 LP_:**MSOS4.0**_^1_%ALS 5_O**MSOS4.0**_^1_%SAP NOLP_)SKIP IF NO LP_5**MSOS4.0**_^1_%JMP CKBKSP_J**MSOS4.0**_^1NOLP_!RTJ BKSSP_(BACKSPACE_9**MSOS4.0**_^1_%RAO* NBRBSP_J**MSOS4.0**_^1_%RAO* BKSPCT_J**MSOS4.0**_^1_%RTJ* FUNCDR_'CHK FD_<**MSOS4.0**_^1_%JMP* REREAD_'TRY READ_:**MSOS4.0**_^1_%JMP* WRCVR1_'CONTINUE D€€ASHING_2**MSOS4.0**_^1FUNCDR NOP 0_O**MSOS4.0**_^1_%LDA- ERDIRC,I_$FD FROM PHYSTB_4**MSOS4.0**_^1_%SAP FUND1_(SKIP TO_;**MSOS4.0**_^1_%ALS 1_,UPDATE DIRECTORY_2**MSOS4.0**_^1_%STA- ERDIRC,I_$RESTORE FD_8**MSOS4.0**_^1_%RAO* FUNCDR_J**MSOS4.0**_^1FUND1 JMP* (FUNCDR)_$EXIT_>**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1REREAD ENQ 0_,PICK UP MOTION INDEX_.**MSOS4.0**_^1_%RTJ SWAP_L**MSO€€S4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1DUMRD ENQ 0_O**MSOS4.0**_^1_%RTJ SWAP_*SET UP READ._5**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1_%ALS 8_^1_%SAP READOK_'SKIP IF NO ERROR_2**MSOS4.0**_^1CORRFD LDA- ERDIRC,I_$FD Z A_<**MSOS4.0**_^1_%ALS 1_O**MSOS4.0**_^1_%SAP SHFT_)MID-RECV CORR NEEDED_.**MSOS4.0**_^1_%STA- ERDIRC,I_H**MSOS4.0**_^1_%JMP* CLRBKP_J**MSOS4.0**_^1SHFT_!ALS 1_O€€**MSOS4.0**_^1_%STA- ERDIRC,I_H**MSOS4.0**_^1_%JMP* WRCVR_K**MSOS4.0**_^1READOK RTJ CHKSV4_J**MSOS4.0**_^1_%EOR- ECKSUM,I_$CHKSUMS EQUAL_5**MSOS4.0**_^1_%SAZ CKSMOK_'YES_?**MSOS4.0**_^1_%JMP* CORRFD_'NO_@**MSOS4.0**_^1CKSMOK LDA =N$DCDC_%RESET_=**MSOS4.0**_^1_%STA- ERDIRC,I_$FD_@**MSOS4.0**_^1RTYSNR ENQ 1_O**MSOS4.0**_^1_%RTJ SWAP_L**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1_%A€€LS 8_^1_%SAP WRTEOF_'SKIP IF NO PARITY_1**MSOS4.0**_^1_%RTJ BKSSP_K**MSOS4.0**_^1_%CLR A_,SET EOF FLAG_6**MSOS4.0**_^1_%RTJ BKSSP_(WRITE EOF OVER BAD SPOT_+**MSOS4.0**_^1_%RTJ BKSSP_(BKSSP EOF_9**MSOS4.0**_^1_%JMP RTYSNR_'RETRY SNR_9**MSOS4.0**_^1WRTEOF LDA* TRIES_K**MSOS4.0**_^1_%SUB =XTRYNBR_H**MSOS4.0**_^1_%SAN CONEOF_J**MSOS4.0**_^1_%JMP* LPRTN_K**MSOS4.0**_^1CONEOF RA€€O* TRIES_K**MSOS4.0**_^1_%ENA 0_O**MSOS4.0**_^1_%RTJ BKSSP_K**MSOS4.0**_^1_%RTJ BKSSP_^1_%ENQ 1_O**MSOS4.0**_^1_%RTJ* SWAP_L**MSOS4.0**_^1_%RTJ CHKSV4_J**MSOS4.0**_^1_%STA- TCKSUM,I_H**MSOS4.0**_^1_%RTJ CALAD_)GO WRITE SECOND SNR._-**MSOS4.0**_^1_%ALS 8_^1_%SAP ADVRCV_J**MSOS4.0**_^1_%RTJ BKSSP_K**MSOS4.0**_^1_%JMP* WRTEOF_J**MSOS4.0**_^1ADVRCV RTJ RESWAP_J**MSOS4.0**_^1_€€%LDA- TCKSUM,I_H**MSOS4.0**_^1_%STA- ECKSUM,I_H**MSOS4.0**_^1_%RTJ CHKSV4_J**MSOS4.0**_^1_%STA- TCKSUM,I_H**MSOS4.0**_^1_%RTJ CALAD_)GO REWRITE LAST RECORD._***MSOS4.0**_^1_%RTJ STUSCK_^1_%JMP* ADVRV_K**MSOS4.0**_^1_%LDQ* ERRNO_K**MSOS4.0**_^1_%JMP RCVR_L**MSOS4.0**_^1ERRNO NUM 0_O**MSOS4.0**_^1ADVRV CLR A_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%LDA* ERRNO_(CHECK IF SWITCHMODE R€€EAD RECOVERY **MSOS4.0**_^1_%SUB* MODCOD_J**MSOS4.0**_^1_%SAZ YESMOD_'SKIP IF MODE RECOVERY_-**MSOS4.0**_^1_%JMP NOPAV4_J**MSOS4.0**_^1YESMOD LDA- ESTAT2,I_$SET PSEUDO PE BIT FLAG._+**MSOS4.0**_^1_%EOR- BITMSK+8_H**MSOS4.0**_^1_%STA- ESTAT2,I_H**MSOS4.0**_^1_%LDA- EREQST,I_$SET V BIT 14._5**MSOS4.0**_^1_%EOR- BITMSK+14_G**MSOS4.0**_^1_%STA- EREQST,I_H**MSOS4.0**_^1_%JMP MAKQV4_€€J**MSOS4.0**_^1CKBKSP LDA BKSPCT_J**MSOS4.0**_^1_%INA -3_N**MSOS4.0**_^1_%SAM CKBK1_K**MSOS4.0**_^1_%JMP DUMRD_K**MSOS4.0**_^1CKBK1 LDA NBRBSP_J**MSOS4.0**_^1_%INA -2_N**MSOS4.0**_^1_%SAZ CKBK2_K**MSOS4.0**_^1_%JMP LPRTN_K**MSOS4.0**_^1CKBK2 JMP CKSMOK_J**MSOS4.0**_^1SWAP_!NOP 0_O**MSOS4.0**_^1_%STQ MOTIV4_J**MSOS4.0**_^1_%RTJ* CALCUT_J**MSOS4.0**_^1CALCUT NOP 0_O**MS€€OS4.0**_^1_%SQN USNR_L**MSOS4.0**_^1_%LDA =XREADBF-*+2_#RELATIVE ADD OF BUFFER_)**MSOS4.0**_^1_%JMP* SWAP1_K**MSOS4.0**_^1USNR_!LDA =XSNR2-CALCUT_C**MSOS4.0**_^1SWAP1 ADD* CALCUT_J**MSOS4.0**_^1_%STA BUFFWA_J**MSOS4.0**_^1_%ADD* LWATAB,Q_H**MSOS4.0**_^1_%STA BUFLWA_J**MSOS4.0**_^1_%JMP* (SWAP)_J**MSOS4.0**_^1LWATAB NUM 8_O**MSOS4.0**_^1_%NUM 4_O**MSOS4.0**_^1_%NUM 0_,LWA+1€€_=**MSOS4.0**_^1READBF BSS READBF(8)_G**MSOS4.0**_^1_%NUM 0_,LWA+1_=**MSOS4.0**_^1SNR2_!NUM $002D_K**MSOS4.0**_^1_%NUM $002E_K**MSOS4.0**_^1_%NUM $002D_K**MSOS4.0**_^1_%NUM $002E_K**MSOS4.0**_^1SAVORG NOP 0_O**MSOS4.0**_^1_%LDA BUFFWA_J**MSOS4.0**_^1_%STA* TEMFWA_J**MSOS4.0**_^1_%LDA MOTIV4_J**MSOS4.0**_^1_%STA* TEMIDX_J**MSOS4.0**_^1_%LDA SAVLV4_J**MSOS4.0**_^1_%STA* TEM€€LWA_J**MSOS4.0**_^1_%JMP* (SAVORG)_H**MSOS4.0**_^1TEMIDX BSS TEMIDX(1)_G**MSOS4.0**_^1TEMLWA BSS TEMLWA(1)_G**MSOS4.0**_^1TEMFWA BSS TEMFWA(1)_G**MSOS4.0**_^1CALAD NOP 0_O**MSOS4.0**_^1_%RTJ* IOABS_K**MSOS4.0**_^1IOABS NUM 0_O**MSOS4.0**_^1_%LDA =XALLRTN-IOABS_B**MSOS4.0**_^1_%ADD* IOABS_K**MSOS4.0**_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%JMP ERRRV4_^1ALLRTN JMP* (CALAD)_I**MS€€OS4.0**_^1CHKSV4 NOP 0_O**MSOS4.0**_^1_%LDA TERFV4_J**MSOS4.0**_^1_%INA -1_+LWA+1 TO LWA_6**MSOS4.0**_^1_%SUB BUFFWA_J**MSOS4.0**_^1_%TRA Q_,Q=INDEX_;**MSOS4.0**_^1_%INA -8_N**MSOS4.0**_^1_%SAM BEGNCK_J**MSOS4.0**_^1_%ENQ 7_O**MSOS4.0**_^1BEGNCK CLR A_,ZERO COUNTERS_4**MSOS4.0**_^1GTBITS ADD (BUFFWA),Q_F**MSOS4.0**_^1_%SQZ DONBIT_J**MSOS4.0**_^1_%INQ -1_N**MSOS4.0**_^1€€_%JMP* GTBITS_J**MSOS4.0**_^1DONBIT JMP* (CHKSV4)_H**MSOS4.0**_^1_%EJT_R**MSOS4.0**_^1MODCOD NUM $3135_K**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1BKSSP NOP 0_O**MSOS4.0**_^1_%SAZ ERRMOT_J**MSOS4.0**_^1_%ENQ 1_O**MSOS4.0**_^1_%JMP* WIGGLE_J**MSOS4.0**_^1ERRMOT ENQ 2_O**MSOS4.0**_^1WIGGLE RTJ* RECABS_J**MSOS4.0**_^1RECABS NUM 0_P**MSOS4.0**_^1_%LDA =XBKSPRN-RECABS_A**MSOS4.0**_^1_€€%ADD* RECABS_J**MSOS4.0**_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%JMP MOTNV4_J**MSOS4.0**_^1BKSPRN JMP* (BKSSP)_I**MSOS4.0**_^1SWMOD NOP 0_O**MSOS4.0**_^1_%LDA- CODE,I_J**MSOS4.0**_^1_%ALS 14_N**MSOS4.0**_^1_%SAP BMODE_)ASCII_<**MSOS4.0**_^1_%ALS 2_O**MSOS4.0**_^1_%INA 2_O**MSOS4.0**_^1MODOUT STA- CODE,I_J**MSOS4.0**_^1_%RTJ CKBSY_K**MSOS4.0**_^1_%LDA- CODE,I_J**MSOS4.0**_^1_%IN€€Q 1_O**MSOS4.0**_^1_%OUT RJT-*_K**MSOS4.0**_^1_%JMP* (SWMOD)_I**MSOS4.0**_^1BMODE ALS 2_O**MSOS4.0**_^1_%INA -2_N**MSOS4.0**_^1_%JMP* MODOUT_J**MSOS4.0**_^1RJT_"JMP* RJTC_L**MSOS4.0**_^1_%ENA 6_O**MSOS4.0**_^1_%JMP BDV4_L**MSOS4.0**_^1RJTC_!JMP BCV4_L**MSOS4.0**_^1RESWAP NOP 0_O**MSOS4.0**_^1_%LDA* TEMIDX_'ORG MOTIDX_8**MSOS4.0**_^1_%STA MOTIV4_J**MSOS4.0**_^1_%LDA* TEMFW€€A_J**MSOS4.0**_^1_%STA BUFFWA_J**MSOS4.0**_^1_%LDA* TEMLWA_'ORG LWA_;**MSOS4.0**_^1_%STA BUFLWA_J**MSOS4.0**_^1_%STA TERFV4_J**MSOS4.0**_^1_%JMP* (RESWAP)_H**MSOS4.0**_^1ADVSNR EQU ADVSNR(*)_G**MSOS4.0**_^1ADVSN JMP ADVRV_K**MSOS4.0**_^1TOTLSW NUM 0_O**MSOS4.0**_^1RRCVR LDA SAVLV4_J**MSOS4.0**_^1_%STA BUFLWA_J**MSOS4.0**_^1_%LDA- STOLSW_J**MSOS4.0**_^1_%STA* TOTLSW_J**MSO€€S4.0**_^1LOPAGN CLR A_,SET SWS_;**MSOS4.0**_^1_%STA* VR1_M**MSOS4.0**_^1_%ENA -0_N**MSOS4.0**_^1RRCVR1 RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CALAD_K**MSOS4.0**_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* ADVSNR_J**MSOS4.0**_^1_%LDA =N0_*THIS LOOP COMPLETE_0**MSOS4.0**_^1VR1_"EQU VR1(*-1)_H**MSOS4.0**_^1PINTCT EQU PINTCT(*-1)_E**MSOS4.0**_^1_%EOR- TERM_L**MSOS4.0**_^1_%SAZ STEP2_K**€€MSOS4.0**_^1_%RAO* VR1_M**MSOS4.0**_^1_%JMP* RRCVR1_'CONTINUE_:**MSOS4.0**_^1STEP2 EQU STEP2(*)_H**MSOS4.0**_^1_%STA* PINTCT_J**MSOS4.0**_^1_%RTJ* SWMOD_^1_%RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CALAD_K**MSOS4.0**_^1_%RTJ* STUSCK_^1_%JMP* MODERR_J**MSOS4.0**_^1_%RTJ* BKSSP_K**MSOS4.0**_^1_%RTJ* CALAD_K**MSOS4.0**_^1_%RTJ* STUSCK_^1_%JMP* MODERR_'ADVISE OF MODE ERR_0**MSOS4.0**_^€€1_%RTJ* SWMOD_K**MSOS4.0**_^1_%RTJ* BKSSP_^1_%RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CKPINT_J**MSOS4.0**_^1_%RAO* PINTCT_'ADD ONE LOAD POINT_0**MSOS4.0**_^1_%RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CKPINT_J**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1RELRD2 RTJ CALAD_K**MSOS4.0**_^1RELRD1 RTJ CALAD_K**MSOS4.0**_^1_%RTJ* STUSCK_^1_%JMP* ADVSNR_J**MSOS4.0**_^1_%LDA* TOTLSW_J**MSOS4.0**€€_^1_%SAP DONOW_(SKIP IF DONE_6**MSOS4.0**_^1_%ALS 1_O**MSOS4.0**_^1_%STA* TOTLSW_J**MSOS4.0**_^1_%JMP* LOPAGN_'GO LOOP AGAIN_5**MSOS4.0**_^1DONOW LDA ERRNO_K**MSOS4.0**_^1_%SUB =N$3030_I**MSOS4.0**_^1_%STA- ERRCOD,I_^1_%ENA 0_O**MSOS4.0**_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%JMP (RECVTB)_H**MSOS4.0**_^1MODERR LDA* MODCOD_'SET SWITCH MODE ERROR CODE._'**MSOS4.0**_^1_%STA ERRNO€€_K**MSOS4.0**_^1_%JMP* ADVSN_K**MSOS4.0**_^1STUSCK NOP 0_O**MSOS4.0**_^1_%LDA- ESTAT2,I_H**MSOS4.0**_^1_%ALS 7_O**MSOS4.0**_^1_%SAP GODST_(SKIP ID GOOD_6**MSOS4.0**_^1_%RAO* STUSCK_J**MSOS4.0**_^1GODST JMP* (STUSCK)_H**MSOS4.0**_^1_%SPC 3_O**MSOS4.0**_^1CKPINT NOP 0_O**MSOS4.0**_^1_%LDA- ESTAT2,I_H**MSOS4.0**_^1_%ALS 5_O**MSOS4.0**_^1_%SAM PINT_L**MSOS4.0**_^1_%JMP* (CKPINT€΄)_H**MSOS4.0**_^1PINT_!LDA* PINTCT_J**MSOS4.0**_^1_%SAN NOT1_L**MSOS4.0**_^1_%STA* TOTLSW_J**MSOS4.0**_^1_%JMP* RELRD1_J**MSOS4.0**_^1NOT1_!JMP* RELRD2_J**MSOS4.0**_^1_%END_]_^__ ΄PMAXRVU CSY/ A53 P€1_%NAM MAXRVU_'DECK-ID A53 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1MM_#EQU MM(0)_(0 = CORE RESIDENT, 1 = MASS MEMORY_^1TRYNBR EQU TRYNBR(50)_"NUMBER OF RECOVERY RETRIES._'**MSOS4.0**_^€€1ZERO_!EQU ZERO($22)_G**MSOS4.0**_^1_%EXT* TEMCV4,MOTV4,INTAV4_<**MSOS 4.1**_^1_%ENT RECOVT_J**MSOS4.0**_^1_%ENT CHKV4_K**MSOS4.0**_^1_%EXT* NOPAR_K**MSOS4.0**_^1_%EXT* CKBUSY_I**MSOS4.0**_^1_%EXT* MAKV4_K**MSOS4.0**_^1_%EXT* REJCTX_J**MSOS4.0**_^1ELU_"EQU ELU(5)_J**MSOS4.0**_^1EREQST EQU EREQST(8)_H**MSOS4.0**_^1ESTAT1 EQU ESTAT1(9)_H**MSOS4.0**_^1ESTAT2 EQU ESTAT2(12)_G**MSO€€S4.0**_^1START EQU START(10)_G**MSOS4.0**_^1STOP_!EQU STOP(11)_H**MSOS4.0**_^1CONTRL EQU CONTRL(16)_F**MSOS4.0**_^1DIAGLU EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_^1RTRECV EQU RTRECV(19)_"ERROR RECOVERY RETURN_-**MSOS4.0**_^1ECKSUM EQU ECKSUM(20)_F**MSOS4.0**_^1ERDIRC EQU ERDIRC(21)_F**MSOS4.0**_^1TCKSUM EQU TCKSUM(22)_F**MSOS4.0**_^1MODRTN EQU MODRTN(23)_F**MSOS4.0**_^1ST€€OLSW EQU STOLSW($1F)_E**MSOS4.0**_^1BITMSK EQU BITMSK($23)_E**MSOS4.0**_^1TERM_!EQU TERM($43)_G**MSOS4.0**_^1DISP_!EQU DISP($EA)_G**MSOS4.0**_^1TIMES NUM 0_O**MSOS4.0**_^1TRIES NUM 0_O**MSOS4.0**_^1_%EXT LOG_M**MSOS4.0**_^1RECOVT NOP 0_O**MSOS4.0**_^1RECVR STQ ERRNO_K**MSOS4.0**_^1_%LDQ- ELU,I_^1_%TRQ A_,LOGICAL UNIT TO A_^1_%EOR- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%€€SAN T00001_'ITS NOT. CONTINUE_^1_%JMP* LPRTN_(IT IS, NO RECOVERY_^1T00001 QLS 6_^1_%LDA ERRNO_K**MSOS4.0**_^1_%SUB* ADDASC_^1_%AAQ Q_O**MSOS4.0**_^1_%RTJ LOG_M**MSOS4.0**_^1*_85 CARDS DELETED_^1_%RTJ SAVORG_'AVE ORG INFO_6**MSOS4.0**_^1_%LDA- ESTAT1,I_$CHK 4 READ OR WRITE_/**MSOS4.0**_^1_%AND- BITMSK+0_H**MSOS4.0**_^1_%SAN WRCVRO_'SKIP IF WRITE_5**MSOS4.0**_^1_%JMP RRCVR_K*€€*MSOS4.0**_^1ADDASC NUM $3030_^1BKSPCT BSS BKSPCT(1)_G**MSOS4.0**_^1NBRBSP BSS NBRBSP(1)_G**MSOS4.0**_^1WRCVRO CLR A_O**MSOS4.0**_^1_%STA* TRIES_K**MSOS4.0**_^1_%STA* NBRBSP_J**MSOS4.0**_^1_%ENA 5_O**MSOS4.0**_^1_%STA* TIMES_K**MSOS4.0**_^1WRCVR LDA* TIMES_K**MSOS4.0**_^1_%SAN DEBUMP_J**MSOS4.0**_^1LPRTN LDA ERRNO_K**MSOS4.0**_^1_%SUB* ADDASC_^1_%ENQ 0_O**MSOS4.0**_^1_%ST€€Q- RTRECV,I_H**MSOS4.0**_^1_%JMP* (RECOVT)_H**MSOS4.0**_^1DEBUMP INA -1_N**MSOS4.0**_^1_%STA* TIMES_K**MSOS4.0**_^1CLRBKP CLR A_,CLEAR BKSP CNTR_3**MSOS4.0**_^1_%STA* BKSPCT_J**MSOS4.0**_^1WRCVR1 LDA- ESTAT2,I_$CHK 4 LP_:**MSOS4.0**_^1_%ALS 5_O**MSOS4.0**_^1_%SAP NOLP_)SKIP IF NO LP_5**MSOS4.0**_^1_%JMP CKBKSP_J**MSOS4.0**_^1NOLP_!RTJ BKSSP_(BACKSPACE_9**MSOS4.0**_^1_%RAO* NB€€RBSP_J**MSOS4.0**_^1_%RAO* BKSPCT_J**MSOS4.0**_^1_%RTJ* FUNCDR_'CHK FD_<**MSOS4.0**_^1_%JMP* REREAD_'TRY READ_:**MSOS4.0**_^1_%JMP* WRCVR1_'CONTINUE DASHING_2**MSOS4.0**_^1FUNCDR NOP 0_O**MSOS4.0**_^1_%LDA- ERDIRC,I_$FD FROM PHYSTB_4**MSOS4.0**_^1_%SAP FUND1_(SKIP TO_;**MSOS4.0**_^1_%ALS 1_,UPDATE DIRECTORY_2**MSOS4.0**_^1_%STA- ERDIRC,I_$RESTORE FD_8**MSOS4.0**_^1_%RAO* FUNCDR_€€J**MSOS4.0**_^1FUND1 JMP* (FUNCDR)_$EXIT_>**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1REREAD ENQ 0_,PICK UP MOTION INDEX_.**MSOS4.0**_^1_%RTJ SWAP_L**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1DUMRD ENQ 0_O**MSOS4.0**_^1_%RTJ SWAP_*SET UP READ._5**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1_%ALS 8_^1_%SAP READOK_'SKIP IF NO ERROR_2**MSOS4.0**_^1CORRFD LDA- ERDIRC,I_$FD Z A_<**MSOS4.0**€€_^1_%ALS 1_O**MSOS4.0**_^1_%SAP SHFT_)MID-RECV CORR NEEDED_.**MSOS4.0**_^1_%STA- ERDIRC,I_H**MSOS4.0**_^1_%JMP* CLRBKP_J**MSOS4.0**_^1SHFT_!ALS 1_O**MSOS4.0**_^1_%STA- ERDIRC,I_H**MSOS4.0**_^1_%JMP* WRCVR_K**MSOS4.0**_^1READOK RTJ CHKV4_K**MSOS4.0**_^1_%EOR- ECKSUM,I_$CHKSUMS EQUAL_5**MSOS4.0**_^1_%SAZ CKSMOK_'YES_?**MSOS4.0**_^1_%JMP* CORRFD_'NO_@**MSOS4.0**_^1CKSMOK LDA =N$€€DCDC_%RESET_=**MSOS4.0**_^1_%STA- ERDIRC,I_$FD_@**MSOS4.0**_^1RTYSNR ENQ 1_O**MSOS4.0**_^1_%RTJ SWAP_L**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1_%ALS 8_^1_%SAP WRTEOF_'SKIP IF NO PARITY_1**MSOS4.0**_^1_%RTJ BKSSP_K**MSOS4.0**_^1_%CLR A_,SET EOF FLAG_6**MSOS4.0**_^1_%RTJ BKSSP_(WRITE EOF OVER BAD SPOT_+**MSOS4.0**_^1_%RTJ BKSSP_(BKSSP EOF_9**MSOS4.0**_^1_%JMP RTYSNR_'RETRY €€SNR_9**MSOS4.0**_^1WRTEOF LDA* TRIES_K**MSOS4.0**_^1_%SUB =XTRYNBR_H**MSOS4.0**_^1_%SAN CONEOF_J**MSOS4.0**_^1_%JMP* LPRTN_K**MSOS4.0**_^1CONEOF RAO* TRIES_K**MSOS4.0**_^1_%ENA 0_O**MSOS4.0**_^1_%RTJ BKSSP_K**MSOS4.0**_^1_%RTJ BKSSP_^1_%ENQ 1_O**MSOS4.0**_^1_%RTJ* SWAP_L**MSOS4.0**_^1_%RTJ CHKV4_K**MSOS4.0**_^1_%STA- TCKSUM,I_H**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1_%ALS €€ 8_^1_%SAP ADVRCV_J**MSOS4.0**_^1_%RTJ BKSSP_K**MSOS4.0**_^1_%JMP* WRTEOF_J**MSOS4.0**_^1ADVRCV RTJ RESWAP_J**MSOS4.0**_^1_%LDA- TCKSUM,I_H**MSOS4.0**_^1_%STA- ECKSUM,I_H**MSOS4.0**_^1_%RTJ CHKV4_K**MSOS4.0**_^1_%STA- TCKSUM,I_H**MSOS4.0**_^1_%RTJ CALAD_K**MSOS4.0**_^1_%RTJ STUSCK_^1_%JMP* ADVRV_K**MSOS4.0**_^1_%LDQ* ERRNO_K**MSOS4.0**_^1_%JMP RECVR_K**MSOS4.0**_^1*_838 CARD€€S DELETED_^1ERRNO NUM 0_O**MSOS4.0**_^1ADVRV CLR A_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE READ RECOVERY **MSOS4.0**_^1_%SUB* MODCOD_J**MSOS4.0**_^1_%SAZ YESMOD_'SKIP IF MODE RECOVERY_-**MSOS4.0**_^1_%JMP NOPAR_K**MSOS4.0**_^1YESMOD LDA- ESTAT2,I_$SET PSEUDO PE BIT FLAG._+**MSOS4.0**_^1_%EOR- BITMSK+8_H**MSOS4.0**_^1_%STA- ESTAT2,I_H**MSOS4.0**_^1_€€%LDA- EREQST,I_$SET V BIT 14._5**MSOS4.0**_^1_%EOR- BITMSK+14_G**MSOS4.0**_^1_%STA- EREQST,I_H**MSOS4.0**_^1_%JMP MAKV4_K**MSOS4.0**_^1_%EJT_R**MSOS4.0**_^1CKBKSP LDA BKSPCT_J**MSOS4.0**_^1_%INA -3_N**MSOS4.0**_^1_%SAM CKBK1_K**MSOS4.0**_^1_%JMP DUMRD_K**MSOS4.0**_^1CKBK1 LDA NBRBSP_J**MSOS4.0**_^1_%INA -2_N**MSOS4.0**_^1_%SAZ CKBK2_K**MSOS4.0**_^1_%JMP LPRTN_K**MSOS4.0**€€_^1CKBK2 JMP CKSMOK_J**MSOS4.0**_^1SWAP_!NOP 0_O**MSOS4.0**_^1_%RTJ* CALCUT_J**MSOS4.0**_^1CALCUT NOP 0_O**MSOS4.0**_^1_%SQN USNR_L**MSOS4.0**_^1_%LDA =XREADBF-*+2_#RELATIVE ADD OF BUFFER_)**MSOS4.0**_^1_%JMP* SWAP1_K**MSOS4.0**_^1USNR_!LDA =XSNR2-CALCUT_C**MSOS4.0**_^1SWAP1 ADD* CALCUT_J**MSOS4.0**_^1_%STA- START,I_I**MSOS4.0**_^1_%ADD* LWATAB,Q_H**MSOS4.0**_^1_%STA- STOP,€€I_J**MSOS4.0**_^1_%LDA- ESTAT1,I_H**MSOS4.0**_^1_%SQN SETWRT_J**MSOS4.0**_^1_%AND- $33_,$FFFE_;**MSOS4.0**_^1SETCOD STA- ESTAT1,I_H**MSOS4.0**_^1_%JMP* (SWAP)_J**MSOS4.0**_^1SETWRT LDA* MOTCOD_J**MSOS4.0**_^1_%JMP* SETCOD_J**MSOS4.0**_^1LWATAB NUM 8_O**MSOS4.0**_^1_%NUM 2_O**MSOS4.0**_^1READBF BSS READBF(8)_G**MSOS4.0**_^1SNR2_!NUM $2D2E_K**MSOS4.0**_^1_%NUM $2D2E_K**MSOS4.0*€€*_^1SAVORG NOP 0_O**MSOS4.0**_^1_%LDA- START,I_I**MSOS4.0**_^1_%STA* TEMFWA_J**MSOS4.0**_^1_%LDA- STOP,I_J**MSOS4.0**_^1_%STA* TEMLWA_J**MSOS4.0**_^1_%LDA- ESTAT1,I_H**MSOS4.0**_^1_%STA* MOTCOD_J**MSOS4.0**_^1_%JMP* (SAVORG)_H**MSOS4.0**_^1TEMLWA BSS TEMLWA(1)_G**MSOS4.0**_^1TEMFWA BSS TEMFWA(1)_G**MSOS4.0**_^1MOTCOD BSS MOTCOD(1)_G**MSOS4.0**_^1_%EJT_R**MSOS4.0**_^1TEMUSE NUM €€ 0_O**MSOS4.0**_^1CALAD NOP 0_O**MSOS4.0**_^1_%RTJ* IOABS_K**MSOS4.0**_^1IOABS NUM 0_O**MSOS4.0**_^1_%LDA =XALLRTN-IOABS_B**MSOS4.0**_^1_%ADD* IOABS_K**MSOS4.0**_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%LDQ- MODRTN,I_^1_%JMP- (ZERO),Q_H**MSOS4.0**_^1ALLRTN JMP* (CALAD)_I**MSOS4.0**_^1CHKV4 NOP 0_O**MSOS4.0**_^1_%LDA TEMCV4_J**MSOS4.0**_^1_%INA -1_+LWA+1 TO LWA_6**MSOS4.0**_^1_%S€€UB- START,I_I**MSOS4.0**_^1_%TRA Q_,Q=INDEX_;**MSOS4.0**_^1_%INA -8_N**MSOS4.0**_^1_%SAM BEGNCK_J**MSOS4.0**_^1_%ENQ 7_O**MSOS4.0**_^1BEGNCK LDA- START,I_I**MSOS4.0**_^1_%STA* TEMUSE_J**MSOS4.0**_^1_%CLR A_O**MSOS4.0**_^1GETBTS ADD* (TEMUSE),Q_F**MSOS4.0**_^1_%SQZ DONBT_K**MSOS4.0**_^1_%INQ -1_N**MSOS4.0**_^1_%JMP* GETBTS_J**MSOS4.0**_^1DONBT JMP* (CHKV4)_I**MSOS4.0**_^1MOD€€COD NUM $3135_K**MSOS4.0**_^1_%EJT_R**MSOS4.0**_^1BKSSP NOP 0_O**MSOS4.0**_^1_%SAZ ERRMOT_J**MSOS4.0**_^1_%ENQ 1_O**MSOS4.0**_^1_%JMP* WIGGLE_J**MSOS4.0**_^1ERRMOT ENQ 2_O**MSOS4.0**_^1WIGGLE RTJ* BKPABS_J**MSOS4.0**_^1BKPABS NUM 0_O**MSOS4.0**_^1_%LDA =XBKSPRN-BKPABS_A**MSOS4.0**_^1_%ADD* BKPABS_J**MSOS4.0**_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%JMP MOTV4_K**MSOS4.0**_^1BKSP€€RN JMP* (BKSSP)_I**MSOS4.0**_^1SWMOD NOP 0_O**MSOS4.0**_^1_%LDA- CONTRL,I_H**MSOS4.0**_^1_%ALS 14_N**MSOS4.0**_^1_%SAP BMODE_K**MSOS4.0**_^1_%ALS 2_O**MSOS4.0**_^1_%INA 2_O**MSOS4.0**_^1OUTMOD STA- CONTRL,I_H**MSOS4.0**_^1_%RTJ CKBUSY_J**MSOS4.0**_^1_%LDA- CONTRL,I_H**MSOS4.0**_^1_%INQ 1_O**MSOS4.0**_^1_%OUT RECT-*_J**MSOS4.0**_^1_%JMP* (SWMOD)_I**MSOS4.0**_^1BMODE ALS 2€€_O**MSOS4.0**_^1_%INA -2_N**MSOS4.0**_^1_%JMP* OUTMOD_J**MSOS4.0**_^1RECT_!JMP* REC_M**MSOS4.0**_^1_%JMP REJCTX_J**MSOS4.0**_^1REC_"JMP INTAV4_J**MSOS4.0**_^1RESWAP NOP 0_O**MSOS4.0**_^1_%LDA* TEMFWA_J**MSOS4.0**_^1_%STA- START,I_I**MSOS4.0**_^1_%LDA* TEMLWA_'ORG LWA_;**MSOS4.0**_^1_%STA- STOP,I_J**MSOS4.0**_^1_%STA TEMCV4_J**MSOS4.0**_^1_%LDA* MOTCOD_J**MSOS4.0**_^1_%STA- EST€€AT1,I_H**MSOS4.0**_^1_%JMP* (RESWAP)_H**MSOS4.0**_^1ADVSNR JMP ADVRV_^1TOTLSW NUM 0_O**MSOS4.0**_^1RRCVR LDA- STOLSW_J**MSOS4.0**_^1_%STA* TOTLSW_J**MSOS4.0**_^1LOPAGN CLR A_,SET SWS_;**MSOS4.0**_^1_%STA* VR1_M**MSOS4.0**_^1_%ENA -0_N**MSOS4.0**_^1RRCVR1 RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CALAD_K**MSOS4.0**_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* ADVSNR_J**MSOS4.0**_^1_%LDA €€=N0_*THIS LOOP COMPLETE_0**MSOS4.0**_^1VR1_"EQU VR1(*-1)_H**MSOS4.0**_^1PINTCT EQU PINTCT(*-1)_E**MSOS4.0**_^1_%EOR- TERM_L**MSOS4.0**_^1_%SAZ STEP2_K**MSOS4.0**_^1_%RAO* VR1_M**MSOS4.0**_^1_%JMP* RRCVR1_'CONTINUE_:**MSOS4.0**_^1STEP2 EQU STEP2(*)_H**MSOS4.0**_^1_%STA* PINTCT_J**MSOS4.0**_^1_%RTJ* SWMOD_^1_%RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CALAD_K**MSOS4.0**_^1_%RTJ* STU€€SCK_^1_%JMP* MODERR_J**MSOS4.0**_^1_%RTJ* BKSSP_K**MSOS4.0**_^1_%RTJ* CALAD_K**MSOS4.0**_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* MODERR_'ADVISE OF MODE ERR_0**MSOS4.0**_^1_%RTJ* SWMOD_K**MSOS4.0**_^1_%RTJ* BKSSP_^1_%RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CKPINT_J**MSOS4.0**_^1_%RAO* PINTCT_J**MSOS4.0**_^1_%RTJ* BKSSP_(BKSP_>**MSOS4.0**_^1_%RTJ* CKPINT_J**MSOS4.0**_^1_%RTJ* CALAD_K**MS€€OS4.0**_^1RELRD2 RTJ CALAD_K**MSOS4.0**_^1RELRD1 RTJ CALAD_K**MSOS4.0**_^1_%RTJ* STUSCK_^1_%JMP* ADVSNR_J**MSOS4.0**_^1_%LDA* TOTLSW_J**MSOS4.0**_^1_%SAP DONOW_(SKIP IF DONE_6**MSOS4.0**_^1_%ALS 1_O**MSOS4.0**_^1_%STA* TOTLSW_J**MSOS4.0**_^1_%JMP* LOPAGN_'GO LOOP AGAIN_5**MSOS4.0**_^1DONOW LDA ERRNO_K**MSOS4.0**_^1_%SUB =N$3030_I**MSOS4.0**_^1_%ENQ 0_^1_%STQ- RTRECV,I_H**MS€€OS4.0**_^1_%JMP (RECOVT)_H**MSOS4.0**_^1MODERR LDA* MODCOD_'SET SIWTCH MODE ERROR CODE._'**MSOS4.0**_^1_%STA ERRNO_K**MSOS4.0**_^1_%JMP* ADVSNR_^1STUSCK NOP 0_O**MSOS4.0**_^1_%LDA- ESTAT2,I_H**MSOS4.0**_^1_%ALS 7_O**MSOS4.0**_^1_%SAP GODST_(SKIP ID GOOD_6**MSOS4.0**_^1_%RAO* STUSCK_J**MSOS4.0**_^1GODST JMP* (STUSCK)_H**MSOS4.0**_^1CKPINT NOP 0_O**MSOS4.0**_^1_%LDA- ESTAT2,I_€H**MSOS4.0**_^1_%ALS 5_O**MSOS4.0**_^1_%SAM PINT_L**MSOS4.0**_^1_%JMP* (CKPINT)_H**MSOS4.0**_^1PINT_!LDA* PINTCT_J**MSOS4.0**_^1_%SAN NOT1_L**MSOS4.0**_^1_%STA* TOTLSW_J**MSOS4.0**_^1_%JMP* RELRD1_J**MSOS4.0**_^1NOT1_!JMP* RELRD2_J**MSOS4.0**_^1_%END_]_^__ PMDRIV4 CSY/ A54 P€1_%NAM MDRIV4_'DECK-ID A54 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^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*_;MDRIV4 IS USED BY DSKTAP TO READ **MSOS 4.0_^1*_;OR WRITE ON THE 1739-1 CARTRIDGE **MSOS 4€€.0_^1*_;DISK._;**MSOS 4.0_^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*_;PLU€€S 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_%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 MD€€RIVE_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_,WRIT€€E 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 TI€€ME 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_%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_^1DONSET LDA* ISAV_^1_%EOR* BONDSC_'TEST FOR BOUNDARY XFER_^1_%SAN LASTP_(NO_^1_%LDA* L1_+TWO PART XFER_^1_%STA* BUFLEN+1_$SET LENGTH PART 1_€€^1_%RTJ* SETSEC_'PART 1 XFER_^1_%LDA* L1_^1_%ADD* FWD_*UPDATE FWD FOR_^1_%STA* FWD_*SECOND PART OF XFER_^1_%LDA* L2_+LENGTH OF PART 2 XFER_^1_%STA* BUFLEN+1_$SAVED_^1_%LDA* SIZSEC_'SECTOR OF PART 2_^1_%STA* ISAV_^1LASTP RTJ* SETSEC_'DO PART 2 OF XFER_^1_%JMP MDR200_'NORMAL EXIT_^1SETSEC NUM 0_,PARTIAL TRANSFER ROUTINE_^1FUNCTS_!RTJ*_$FNDSEC_"GET READY FOR DATA TRANSFER_$**MSOS 4€€.0_^1_(JMP*_$MDR100_"GO TO DATA TRANSFER_-**MSOS 4.0_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;CYLINDER ADDRESS REQISTER STATUS **MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1FNDSEC_!NUM_%0_I**MSOS 4.0_^1MDR30_"CLR_%A_I**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATIN€€G FUNCTION_-**MSOS 4.0_^1_%INQ 1_,CYL. ADDRESS STATUS_.**MSOS 4.1**_^1_(INP_%-1_'SEND FUNCTION TO DISK_+**MSOS 4.0_^1_%AND* HFF00_(MASK OFF LOWER 8 BITS_/72*1701_^1_(ALS_%8_(PUT CYLINDER NO. IN LOWER 8 BITS **MSOS 4.0_^1_(STA*_$CYLNUM_"SAVE CYLINDER NUMBER_,**MSOS 4.0_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;COMPUTE FILE ADDRE€€SS WORD_'**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^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 =N11773_%DIVIDE BY LARGEST PHYSICAL SECTOR **MSOS 4.1**_^1SIZSEC EQU SIZSEC(*-1)_^1*_;A EQUAL 1 MEANS DISK1_+**MSOS 4.0_^1*_;A EQUAL 0 ME€€ANS DISK 0_***MSOS 4.0_^1_(ALS_%6_(BIT 6 IS DISK INDICATOR_)**MSOS 4.0_^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_%ALS 7_,PUT TRACK IN BITS 15-7_^1_(ADD*_$R2_'PUT SEC€€TOR NUMBER IN BITS 0-4_"**MSOS 4.0_^1_(ADD*_$Q1_'ADD DISK INDICATOR(BIT6)_(**MSOS 4.0_^1_(STA*_$NR_'SAVE ADDRESS TO SEEK_,**MSOS 4.0_^1_%ARS 8_,CYL NUM TO BITS 7-0_^1_%AND* H00FF_(BEWARE OF SIGN EXTENSION_^1_%SUB* CYLNUM_'SUBTRACT CURRENT POSITION_^1_%SAZ SEEK2_(SKIP IF DESIRED.EQ.ACTUAL_^1_%SAP SEEK1_(SKIP IF FORWARD SEEK NEEDED_^1_%TCA A_,COMPLEMENT NEGATIVE DIFFERENCE_^1_%AL€€S 8_,SHIFT TO BITS 15-8_^1_%ENQ $20_^1_%AAQ A_,SET BIT 5 FOR REVERSE SEEK_^1_%JMP* SEEK2_^1SEEK1 ALS 8_,DIFFERENCE TO BITS 15-8_^1SEEK2 STA* CYLNUM_'SAVE DIFFERENCE PLUS DIRECTION_^1_%LDA* NR_+PICK UP DESIRED ADDRESS_^1_%AND* H00FF_(SAVE ONLY TRACK,DISK AND SECTOR_^1_%ADD* CYLNUM_'ADD DIFFERENCE PLUS DIRECTION_^1SETNR STA* NR_+SAVE FOR LOAD ADDRESS_^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_^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 AD€€DRESS_.**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_^1BIT3_!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_^1_%SPC 1_^1******_$XFER AT PLATTER BOUNDARY TABLES_^1BONDSC NUM $2DE0_^1L1_#NUM $04E0_(LENGTH PART 1_^1L2_#NUM $0720_(LENGTH PART 2_^1MDR100_!ENA_%10_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1MDR101_!LDA*_$FWD_%FIRST W€€ORD ADDRESS_.**MSOS 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**MSOS 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 ST€€ATUS 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_(JMP*_$MDR180_D**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_"EXTERNAL 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 MDR195_^1_%JMP (SETSEC)_^1MDR1€€95 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_%2_I**MSOS 4.0_^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_(CHECK FOR BUSY_2**MSOS 4.0_^1_(SAP_%1_I€&**MSOS 4.0_^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_]_^__&PMDR52 CSY/ A55 P€1_%NAM MDR52_(DECK-ID A55 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_!********************************************************************_^1*_#THE FOLLOWING PARAMETERS MUST BE SUPPLIED._^1_%EQU DEVN(2)_"PHYSICAL DEVICE NUMBER_^1*_!*******************€€*************************************************_^1_%ENT MDRIVE_^1_%ENT GENFC_^1_%EQU LPMSK(2),ONEBIT($23)_^1*_]_^1MDRIVE ADC 0_^1_%NOP 0_)SELECTIVE STOP DEBUG CELL_^1_%STA* FWD_'FIRST WORD ADDRESS OF BUFFER_^1_%ENA 4_,READ CODE_8**MSOS 4.1**_^1_%SQP MDR20_(+ FOR READ, - WRITE_.**MSOS 4.1**_^1_%ENA 0_,WRITE CODE_7**MSOS 4.1**_^1_%TCQ Q_N**MSOS 4.1**_^1MDR20 EQU MDR20(*)€€_G**MSOS 4.1**_^1_%STA* RWCTRL_'K=0 FOR WRITE, K=4 FOR READ_^1_%LDA* FWD_'ADDR OF STORAGE BUFFER_^1_%AAQ A_+PLUS NBR WDS TO BE MOVED_^1_%INA -1_^1_%STA* LWD_)TO LAST WORD ADDR_^1*_!********************************************************************_^1*_#COMPUTE SEEK SECTOR ADDRESS_^1*_!********************************************************************_^1*_*ADJUST WES CODES FOR€€ 1752_^1_%LDA* GENFC_^1_%INA -1_^1_%STA* RWGENF_^1_%INA +1_^1_%STA* STGENF_^1_%INA +7_^1_%STA* SGENF_^1_%INA +4_^1_%STA* CGENFS_^1_%INA +2_^1_%STA* CGENFE_^1_%LDA- I_)MASS STORAGE SECTOR NUMBER_^1_%STA* ITEM_)SAVE MASS STG SECTOR_^1_%AND =N$1F_(SECTOR ADDR IN BITS 0-4_^1_%SAN SECT-*-1_$SKIP IF SECTOR NOT ZERO_^1_%ENA 32_^1SECT_!INA -1_+LOAD SECTOR - 1_^1_%TRA Q_^1_%LDA- I€€_,LOAD MASS STG SECTOR_^1_%AND =N$FFE0_%GET TRACK_^1_%EAQ A_,COMBINE TRACK AND SECTOR ADDRESSES_^1_%STA* NR_^1_%ENA -2_^1_%STA* ERCD_)SET UP COUNTER TO TRY I/O 3 TIMES_^1MDR90 RTJ* RDWRDM_^1_%SAN MDR200-*-1_"SKIP IF I/O OK_^1_%RAO* ERCD_)TRY 3 TIMES_^1_%SOV MDR200-*-1_^1_%JMP* MDR90_^1MDR200 LDQ* ITEM_^1_%STQ- I_^1_%STA* ITEM_)SAVE A_^1_%LDQ* GENFC_^1_%INP 1_^1_%NOP 0_^1_%T€€RA Q_^1_%LDA* ITEM_)RESTORE A_^1_%JMP* (MDRIVE)_^1FWD_"NUM 0_,FWD OF BUFFER_^1LWD_"NUM 0_,LWD OF BUFFER_^1ITEM_!NUM 0_^1ERCD_!NUM 0_^1NR_#NUM 0_,TRACK - SECTOR_^1RWCTRL NUM 0_,READ-WRITE FUNCTION CODE_^1RWGENF ADC DEVN*128_^1SGENF ADC DEVN*128+8_^1CGENFS ADC DEVN*128+12_^1CGENFE ADC DEVN*128+14_^1STGENF ADC DEVN*128+1_^1GENFC ADC DEVN*128+1_^1RDWRDM ADC 0_^1_%LDQ* S€€TGENF_^1_%ENA 2_^1_%OUT REJ-*_(ENABLE EOP, ALARM_^1_%LDA* NR_^1_%LDQ* SGENF_^1_%OUT REJ-*_(SET SECTOR ADDR_^1_%JMP* FADDR_^1REJ_"JMP* INTREJ_^1_%JMP* EXTREJ_^1FADDR LDA* FWD_^1_%LDQ* CGENFS_^1_%OUT REJ1-*_'SET FIRST WORD ADDR_^1_%JMP* LADDR_^1REJ1_!JMP* INTREJ_^1_%JMP* EXTREJ_^1LADDR LDA* LWD_^1_%LDQ* CGENFE_^1_%OUT REJ2-*_'SET LAST WORD ADDR_^1_%JMP* RW_^1REJ2_!JMP* INTREJ_€€^1_%JMP* EXTREJ_^1RW_#ENA 0_^1_%LDQ* RWGENF_^1_%ADQ* RWCTRL_^1_%OUT REJ3-*_'INITIATE I/O_^1_%RTJ* STATUS_^1_%ENA 1_^1_%JMP* (RDWRDM)_^1REJ3_!JMP* INTREJ_^1_%JMP* EXTREJ_^1STATUS ADC 0_^1DOIT_!CLR A_^1_%LDQ* STGENF_^1_%INP REJ4-*_^1_%STA* STAT_^1_%JMP* CHECK_^1REJ4_!JMP* INTREJ_^1_%JMP* EXTREJ_^1CHECK AND =N$1B_(LOOK FOR EOP AND READY_^1_%EOR =N$19_^1_%SAZ EOP-*-1_^1_%JMP*€0 DOIT_)NOT DONE YET_^1EOP_"LDA* STAT_^1_%AND =N$20_(LOOK FOR ALARM_^1_%SAZ DROK-*-1_$SKIP IF NO ALARM_^1_%JMP* DRERR_^1DROK_!JMP* (STATUS)_^1STAT_!NUM 0_^1DRERR ENA 0_,RETURN WITH ERROR_^1_%JMP* (RDWRDM)_^1INTREJ ENA 0_,RETURN TO TRY 3 TIMES_^1_%EQU EXTREJ(INTREJ)_^1_%JMP* (RDWRDM)_^1_%END_]_^__ 0PQCARD CSY/ A56 P€1_%NAM QCARD_(DECK-ID A56 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1726/405, 1728/430, 1729-2, 1729-3 INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A57 Pj1_%NAM QCDDMY_'DECK-ID A57 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY CARD READER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A58 P€1_%NAM QDKDMY_'DECK-ID A58 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY DISK DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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_€]_^__ PQDK85X CSY/ A59 P€1_%NAM QDK85X_'DECK-ID A59 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1738/853/854 AND 1733-1/853/854 DISK INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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 OF BUFFER (FWAB)_+*_^1*_>+(Q) = NO. OF WORDS TO READ_+*_^1*_>-(Q) = COMPLEMENT OF WORDS TO WRITE_"*_^1*_>+(I) = STARTING SECTOR ADDRESS,BIAS IT *_^1*_>-(I) = STARTING SECTOR ADDRESS,NO BIAS *_^1*_C-(I) READ OR WRITE SEC.0-3 OR BSD *_^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*_$ER€€ROR 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*_,5 = INTERNAL REJECT_:**MSOS 4.1**_^1*_,6 = EXTERNAL REJECT_:**MSOS 4.1**_^1*_,7 = COMPARE ERROR_<**MSOS 4.1**_^1*_+14 = NOT READY_@**MSOS 4.1**_^1*_((I) = LAST HARDWARE STATUS_7**MSOS 4.1**_^1*******************************************************€€*****************_^1************* THE FOLLOWING PARAMETERS MUST BE SUPPLIED **************_^1_%EQU UNIT(0)_%DISK PACK RELATIVE TO CONTROLLER_^1_%EQU DEVICE(3)_#EQUIP. NO._^1SECTOR EQU SECTOR(16)_"SECTORS/TRACK_^1WORDS EQU WORDS(96)_#WORDS/SECTOR_^1************************************************************************_^1_%ENT MMINIT_'ENTRY FOR I2_^1_%ENT QMASS_(BASIC DRIV€€ER ENTRY_^1_%ENT EMASS_(W,E,S FUNCTION CODE_^1_%EXT* I2RETN_I**MSOS 4.1**_^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 853/854 ******€€**************_^1************************************************************************_^1START1 IIN 0_^1LENGTH LDQ =XDSKEND-LOOP+1_%LENGTH TO BE MOVED_^1LOOP01 LDA* LOOP,Q_^1_%STA* (STMSV4),Q_^1_%SQZ MOVED_(SKIP IF PROGRAM MOVED_,**MSOS 4.1**_^1_%INQ -1_^1_%JMP* LOOP01_^1MOVED JMP* (STMSV4)_$GO TO LOOP_7**MSOS 4.1**_^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_3**MSOS 4.1**_^1_%SAN GOON-*-1_$SKIP IF NO DISK ERROR_^1_%JMP* LOOP_)KEEP TRYIN€€G_6**MSOS 4.1**_^1GOON_!LDA* PART01_'PART 1 CORE IMAGE SECTOR ADDRESS_^1_%SAZ ONGO-*-1_$SKIP IF NOT PART 1 TO LOAD_^1_%STA- 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_3**MSOS 4.1**_^1_%SAN ONGO-*-1_$SKIP IF NO DISK ERROR_^1_%JMP* GOON_)KEEP TRYING_^1ONGO_!EIN 0_,ENABLE INTERRUPT SYSTEM_^1_%JMP* LOO€€P-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)_^1_%STA* AI€€NITL_'BUFFER FWA TO READ OR WRITE_^1_%EOR =N$FFFF_%CHECK FOR WRITE TAGS FUNCTION_^1_%SAN QMASS1_'SKIP IF NOT_^1_%JMP WRATAG_'GO WRITE ADDRESS TAGS_^1QMASS1 STQ* RDWEFG_'+(READ)/-(WRITE) FLAG_^1_%SQP SETWC-*-1_#SKIP IF READ REQUEST_^1_%TCQ Q_^1SETWC STQ* QINITL_'WORDS TO I/O_^1*_83 CARDS DELETED_^1_%CLR A_^1BIGLOP STA* EXCESS_^1_%TRA M_,CLEAR MASK REGISTER (COMPARE FLAG)_^1_€€%STA* ERRCNT_'ERROR COUNTER_^1_%STA* ERRCTN_^1_%STA SAVSTS_^1_%JMP* SETMOV_I**MSOS 4.1**_^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_^1ERRCNT NUM 0_,ERROR COUNTER NO.1_^1ERRCTN NUM 0_,ERROR COUNTER NO.2_^1RDWEFG NUM 0_,READ,WRITE IN€€DICATOR_^1CONECT ADC UNIT*512+256 CONNECT CODE_^1FWAM1 NUM 0_,FWA -1_^1BFWAM1 NUM 0_,BFWA-1 FOR I/O_^1SETMOV LDA- I_^1_%CLR Q_^1_%DVI =XSECTOR*10_!SECTORS/CYLINDER_^1_%ALS 8_,CYLINDER TO (15-8)_^1_%AAQ A_^1_%STA* TEMP3_(FILE ADDRESS_^1_%LDA* AINITL_'BFWA_^1_%SAN NOTZRO-*-1_"SKIP IF NOT LOC.0_^1MAXCOR LDQ $7FFF_^1_%STQ* FWAM1_(FWA-1_^1_%LDQ* MAXCOR+1_^1_%STQ- (0)_*RESET L€€OC. 0_^1_%NUM 0_^1_%LDA =N$8000_^1_%STA* (MAXCOR+1)_"SET UP IF NOT 65K MODE_^1_%LDA* QINITL_'NO. OF WORDS,AND LWA+1 OF AINITL = 0_^1_%STA- (0)_*STOR IN LAST LOC IN EITHER MODE_^1_%NUM $FFFF_^1_%ENA -0_^1_%STA* BFWAM1_^1_%JMP* MOVM1_^1NOTZRO TRA Q_^1_%INQ -1_^1_%STQ* BFWAM1_'FWA-1 TO DISK_^1_%LDQ* (BFWAM1)_$(FWA-1)_^1_%STQ* FWAM1_^1_%ADD* QINITL_'LENGTH_^1_%STA* (BFWAM1)_$LWA+€€1 TO FWA-1_^1MOVM1 LDA* CONECT_'CONNECT CODE FOR 1738_/68*1530_^1_%ENQ 1_^1_%RTJ* OUTPUT_'OUTPUT CONNECT TO DISK_.68*1530_^1SEEK_!LDA* TEMP3_^1_%ENQ 2_,SEEK FUNCTION_^1_%RTJ* OUTPUT_^1_%ENQ 1_,DISK STATUS_^1_%RTJ* STATUS_^1_%JMP* ERROR2_^1_%CLR A_^1_%STA* ERRCTN_^1_%TRM Q_-COMPARE FLAG_^1_%SQN CMPTIM-*-1_"SKIP IF COMPARE, Q = 1_^1_%LDA* RDWEFG_'READ / WRITE FLAG_^1_%SAP CMP€€TIM-*-1_"SKIP IF A READ REQUEST_^1_%ENQ -1_+SET UP WRITE_^1CMPTIM INQ 4_*WRITE = 3,READ = 4,COMPARE = 5_^1_%LDA* BFWAM1_'BFWA-1 ADDRESS_^1_%RTJ* OUTPUT_^1_%ENQ 1_,DISK STATUS_^1_%RTJ* STATUS_^1_%JMP* ERROR1_^1_%TRM Q_^1_%SQN COMPIT-*-1_"SKIP IF COMPARED_^1_%ENQ 1_^1_%TRQ M_,SET COMPARE FLAG IN M_^1_%JMP* SEEK_^1COMPIT AND =N$40_^1_%SAZ COMPOK-*-1_"SKIP IF COMPARE OK_^1_%EN€€Q 7_,COMPARE ERROR_4**MSOS 4.1**_^1_%STQ* CODERR_I**MSOS 4.1**_^1_%JMP* ERROR4_I**MSOS 4.1**_^1COMPOK RTJ* RESTOR_^1*_81 CARD DELETED_^1_%JMP* WAYOUT_'TO EXIT_^1RESTOR NOP 0_^1_%LDA* FWAM1_^1_%LDQ* AINITL_^1_%SQN RETSET-*-1_"SKIP IF NOT LOC.0_^1_%STA $7FFF_^1_%JMP* (RESTOR)_^1RETSET STA* (BFWAM1)_$RESTORE (FWA-1)_^1_%JMP* (RESTOR)_$EXIT_^1ERROR2 ENQ 2_,ALARM ERROR_6**MSOS 4.1*€€*_^1_%STQ* CODERR_I**MSOS 4.1**_^1_%RAO* ERRCTN_I**MSOS 4.1**_^1_%LDQ* ERRCTN_^1_%JMP* ERROR3_^1ERROR1 ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1_%STQ* CODERR_I**MSOS 4.1**_^1ERROR4 RAO* ERRCNT_I**MSOS 4.1**_^1_%CLR Q_^1_%TRQ M_^1_%LDQ* ERRCNT_^1ERROR3 INQ -10_*NO. OF TRIES_^1_%SQN NOTDON-*-1_"SKIP IF NOT DONE TRYING_^1_%JMP* MSDERR_'ERROR EXIT_^1NOTDON JMP* SEEK_^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_J**MSOS 4.1**_^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**MSOS 4.1**_^1_%LRS 1_^1_%SAM ITRDY-*-1_#SKIP IF READY_^1_%ENQ 14_+NOT READY ERROR_2**MSOS 4.1**_^1_%JMP* IREJ1_J**MSOS 4.1**_^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 L€€DA* SAVSTS_^1_%JMP* (STATUS)_^1FUNSAV NUM 0_^1SAVSTS NUM 0_^1DSTAT NUM 0_N**MSOS 4.1**_^1************************************************************************_^1*************************** OUTPUT ROUTINE ***************************_^1************************************************************************_^1*_>ENTRY PARAMETERS_6*_^1*_?Q = FUNCTION CODE_4*_^1*_]_'*_^1*_>EXI€€TS_A*_^1*_?REPLY - P+1_:*_^1*_?EXT.REJ. - MSDERR (DRIVER 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_2**MSOS 4.1**_^1_%JMP* ERE€€J_)EXTERNAL REJECT_2**MSOS 4.1**_^1MSDERR RTJ* RESTOR_'RESTORE FWA-1_^1_%LDQ* CODERR_'PASS ERROR CODE_2**MSOS 4.1**_^1_%LDA* DSTAT_(PASS LAST STATUS_1**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%CLR A,M_L**MSOS 4.1**_^1_%JMP* DSKEND_'EXIT_=**MSOS 4.1**_^1IREJ_!ENQ 5_,INTERNAL REJECT_2**MSOS 4.1**_^1IREJ1 STQ* CODERR_'SAVE ERROR CODE_2**MSOS 4.1**_^1_%JMP* MSDERR_I**MSOS 4.1**_^1ERE€€J_!ENQ 6_,EXTERNAL REJECT_2**MSOS 4.1**_^1_%JMP* IREJ1_J**MSOS 4.1**_^1CODERR NUM 0_N**MSOS 4.1**_^1WAYOUT CLR Q_^1_%TRQ M_,CLEAR MASK REGISTER (COMPARE FLAG)_^1_%SET A_,-0 = REQ. OK_^1DSKEND JMP (QDISK)_$EXIT_>**MSOS 4.1**_^1_%EJT 0_^1*_$WRITE ADDRESS TAGS_^1_%SPC 5_^1WRATAG LDA =N$100_'CONNECT CODE_^1_%ENQ 1_^1_%RTJ* OUTPUT_'CONNECT TO UNIT ZERO_^1_%ENA 0_^1TGLOOP ENQ €€ 7_^1_%RTJ* OUTPUT_'WRITE ADDRESS TAGS_^1_%ENQ 1_^1_%RTJ* STATUS_'WAIT FOR COMPLETION_^1_%JMP* TAGERR_'EXIT ON ERROR_^1_%ENQ 2_^1_%RTJ* STATUS_'GET ADDRESS REGISTER STATUS_^1_%NOP 0_,NO ERROR POSSIBLE_^1_%JMP* TGLOOP_^1TAGERR AND =N$C00_'CHECK FOR ADDRESS OR SEEK ERROR_^1_%SAN TGERR1_^1_%JMP* ERROR1_'UNEXPECTED ALARM_^1TGERR1 ENQ 2_^1_%RTJ* STATUS_'GET ADDRESS REGISTER STATUS€v_^1_%NOP 0_,NO ERROR POSSIBLE_^1_%ARS 8_,CYLINDER TO LOWER BITS_^1_%AND =N$FF_(SAVE CYLINDER ONLY_^1_%INA -100_)CHECK FOR END OF 853_^1_%SAZ TAGEXT_'EXIT_^1_%INA -103_)CHECK FOR END OF 854_^1_%SAZ TAGEXT_'EXIT_^1_%ENA 16_^1_%STA* CODERR_'SET ERROR CODE_^1_%JMP* MSDERR_'ERROR EXIT_^1TAGEXT JMP* WAYOUT_'NORMAL EXIT_^1_%NOP 0_,MUST REMAIN INCASE LWA-1_^1_%END_]_^__ vPQDMDMY CSY/ A60 P€1_%NAM QDMDMY_'DECK-ID A60 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY DRUM DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A61 Ph1_%NAM QMTDMY_'DECK-ID A61 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY MAG TAPE DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A62 P€1_%NAM QMT7TK_'DECK-ID A62 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1731/601, 1732-1/608, 1732-2/615-73 MAG TAPE INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A63 P€1_%NAM QMT9TK_'DECK-ID A63 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1732-1/609 AND 1732-2/615-93 MAG TAPE INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A64 P€1_%NAM QPRDMY_'DECK-ID A64 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY LINE PRINTER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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_]_^__4PQPTAPE CSY/ A65 P€1_%NAM QPTAPE_'DECK-ID A65 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$IDRIV FOR PAPER TAPE, USED WITH SYS INITIALIZER IDRIV CONTROLLER_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 1_^1*_*THIS MODULE IS ONLY USED BY IDRIV CONTROLLER MODULE._^1_%SPC 1_^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*_*2 = ALARM ERROR_@**MSOS 4.1**_^1*_*3 = PARITY ERROR_?**MSOS 4.1**_^1*_*4 = CHECKSUM ERROR_=**MSOS 4.1**_^1*_$58 = ILLEGAL RECORD LENGTH (.GT.WPR)_^1*_'(I) = LAST HARDWARE STATUS_8**MSOS 4.1**_^1******************************************€€********************MSOS 4.1**_^1_%ENT QPTAPE_'BASIC DRIVER ENTRY_/**MSOS 4.1**_^1_%ENT EPTAPE_'EQUIPMENT - W,E,S CODE_+**MSOS 4.1**_^1*_!********************************************************************_^1*_#THE FOLLOWING PARAMETER MUST BE SUPPLIED._^1_%EQU WPR(96)_"MAXIMUM PERMISSIBLE RECORD SIZE_^1*_!********************************************************************_^1_%€€EQU ASKII(70)_^1QPTAPE NUM 0_,BASIC DRIVER ENTRY_/**MSOS 4.1**_^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_263*1377_^1_%SAP SET1-*-1_^1*_81 CARD DELETED_663*1377_^1_%TCA A_)COMPLEMENT NEGATIVE VALUE FOR_^1_%STA- 24,I_(A€€DDRESS 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_^1_%LDQ* EPTAPE_I**MSOS 4.1**_^1SISTRT OUT -2_(INSTRUCT DEVICE TO BEGIN OPTION_^1INPSTA RTJ RDSTAT_#GET STATUS_^1READIN LDQ* EPTAPE_I**MSOS 4.1**_^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_5**MSOS 4.1**_^1_%JMP* INPERR_I**MSOS 4.1**_^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 XFER 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 LDA- 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 NOT A_^1_%ENQ 4_N**MSOS 4.1**_^1_%JMP* INPERR_%CHECKSUM ERROR_^1INPXIT LDA* STOP_^1_%LDQ* EPTAPE_I**MSOS 4.1**_^1_%OUT -1_^1_%ENA -0_^1_%JMP* (QPTAPE)_$RETURN WITHOUT ERROR_-**MSOS 4.1**_^1INPERR LDA* STOP_^1_%STQ* ERRCOD_'SAVE ERROR CODE_2**MSOS 4.1**_^1_%LDQ* EPTAPE_I**MSOS 4.1**_€€^1_%OUT -1_^1_%LDA* STATUS_'PASS LAST STATUS_1**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%LDQ* ERRCOD_'PASS ERROR CODE_2**MSOS 4.1**_^1_%ENA 0_^1_%JMP* (QPTAPE)_$RETURN WITH ERROR_0**MSOS 4.1**_^1START NUM $20_^1STOP_!NUM $40_^1LEADER NUM -0_^1EPTAPE NUM $A1_*W,E,S FUNCTION CODE_.**MSOS 4.1**_^1ERRCOD NUM 0_N**MSOS 4.1**_^1LEDSET_!ADC_%BINARY-READSW-1_^1ASCSET_!ADC_%ASCII-REA€€DSW-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 LENGTH 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 REA€€D 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_%STA- 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_/**MSOS 4.1**_^1_%JMP INPSTA_^1TSET1B ENA 1_N**MSOS 4.1**_^1_%ENQ 49_+RECORD SIZE EXCEEDS WPR EQU_%**MSOS 4.1**_^1_%JMP* INPE€€RR+1_G**MSOS 4.1**_^1RDSTAT NUM $FFFF_^1_%LDQ* EPTAPE_I**MSOS 4.1**_^1_%INP -1_(GET STATUS OF READ DEVICE_^1_%STA* STATUS_I**MSOS 4.1**_^1_%ENQ 8_^1_%LAQ Q_^1_%AND* PTSTAT_^1_%SAZ NOALA_J**MSOS 4.1**_^1SET1B ENA 1_^1_%ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1_%JMP* INPERR+1_^1NOALA SQN 1_,TEST FOR AND XFER IF_-**MSOS 4.1**_^1_%JMP* RDSTAT+1_#CHARACTER NOT TRANSMITTED_^1_%JMP* (€RDSTAT)_!EXIT_^1PTSTAT NUM $260_)BIT 9 PAPER MOTION FAILURE_^1*_8BIT 6 LOST DATA_^1*_8BIT 5 ALARM_^1STATUS NUM 0_N**MSOS 4.1**_^1_%END_]_^__PQPTDMY CSY/ A66 Pj1_%NAM QPTDMY_'DECK-ID A66 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$SYSTEM INITIALIZER DUMMY PAPER TAPE DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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/ A67 P€1_%NAM Q1711_(DECK-ID A67 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1711/1713 TELETYPE KEYBOARD INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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_]_^__˜PQ1751 CSY/ A68 P€1_%NAM Q1751_(DECK-ID A68 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1751 DRUM INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*THIS MODULE IS ONLY USED BY MDRIV CONTROLLER MODULE._^1*_]_^1************************************************************************_^1*_@ENTRY PAR€€AMETERS_4*_^1*_A(A) = FWA OF BUFFER_0*_^1*_@+(Q) = NO. OF WORDS TO READ_)*_^1*_@-(Q) = COMPLEMENT OF WORDS TO WRITE *_^1*_8(I) = STARTING SECTOR ADDRESS_#**MSOS 4.1**_^1************************************************************************_^1**************************************************************MSOS 4.1**_^1*_$ERROR EXIT CONDITIONS...._;**MSOS 4.1**_^1*_+(A) = 0_G**MSOS €€4.1**_^1*_+(Q) = ERROR CODE_>**MSOS 4.1**_^1*_/2 = ALARM_A**MSOS 4.1**_^1*_/5 = INTERNAL REJECT_7**MSOS 4.1**_^1*_/6 = EXTERNAL REJECT_7**MSOS 4.1**_^1*_+(I) = LAST HARDWARE STATUS_4**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1************** THE FOLLOWING PARAMETER MUST BE SUPPLIED **************_^1_%EQU DEVICE(2)_#EQUIPMENT NUMBER OF€€ DRUM_^1************************************************************************_^1_%SPC 2_N**MSOS 4.1**_^1_%ENT QMASS_(BASIC DRIVER ENTRY_^1_%ENT EMASS_(W,E,S FUNCTION CODE_^1_%SPC 2_^1_%ENT MMINIT_'AUTOLOAD SETUP ENTRY_^1_%EXT* I2RETN_'IN I2_^1MMINIT LDQ =XTEMPD-START1+1 AUTOLOAD PROGRAM LENGTH_^1_%LDA =XPART00-START1+1_#DISTANCE TO AUTOLOAD TABLE_^1_%RTJ I2RETN_'RETURN €€TO I2 WITH ADDRESS OF AUTOLOAD PROGRAM_^1************************************************************************_^1******************* AUTOLOAD PROGRAM FOR 1751 DRUM *******************_^1************************************************************************_^1START1 IIN 0_^1_%LDQ =XTEMPD-LOOP_!LENGTH TO BE MOVED_.**MSOS 4.1**_^1LOOP01 LDA* LOOP,Q_^1_%STA* (STMSV4),Q_^1_%SQN€€ MOVEIT-*-1_"SKIP IF PROGRAM MOVED_^1_%JMP* (STMSV4)_$GO TO LOOP AFTER IT HAS BEEN MOVED_^1MOVEIT INQ -1_^1_%JMP* LOOP01_^1************************************************************************_^1*************** FWA OF CORE TO 'STMSV4' IN SPACE *********************_^1************************************************************************_^1LOOP_!ENA 5_,SYSTEM SECTOR IS 5_^€€1_%STA- I_^1_%ENA 0_,CORE ADDRESS_^1_%LDQ* STMSV4_'MODIFIED LENGTH OF PART 0_^1*_81 CARD DELETED_^1_%RTJ* QDRUM_(READ PART 0_^1_%SAN GOON-*-1_$SKIP IF NO DRUM ERROR_^1_%JMP* LOOP_^1GOON_!LDA* PART01_'MODIFIED PART 1 CORE IMAGE SECTOR ADDRESS_^1_%SAZ ONGO-*-1_$SKIP IF NO PART 1 TO LOAD_^1_%STA- I_^1_%LDA* PART1A_'MODIFIED CORE ADDRESS OF PART 1_^1_%LDQ* LPART1_'MODIFIED LENGTH OF€€ PART 1_^1_%RTJ* QDRUM_(READ IN PART 1_^1_%SAN ONGO-*-1_$SKIP IF NO DRUM ERROR_^1_%JMP* GOON_^1ONGO_!EIN 0_^1_%JMP* LOOP-2_'TO MSOS SPACE 'RESTRT'_^1PART00 NUM 0_,PART 0 CORE IMAGE SECTOR ADDRESS_^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*_]_'*_^1QMASS NUM 0_,BASIC ENTRY_^1_%EQU QDRUM(QMASS)_^1_%STA* SCORE_(START ADDRESS_^1_%ENA -9_^1_%STA* ERCD_^1_%CLR A_,READ CODE_^1_%SQP M100-*-1_$SKIP IF READ REQ._^1_%TCQ Q_^1_%ENA 1_^1M100_!STA* CODE_^1_%ADQ* SCORE_^1_%INQ -1_^1_%STQ* ECORE_(END CORE_^1*_8FINAL CORE ADDRESS_^1_%LDA- I_^1*_81 CARD DELETED_^1_%STA* ITEM_^1*_8SECTOR NUMBER_^1_%MUI =N€€96_)TO DRUM TRACK_^1_%LLS 5_,TRACK_^1_%ALS 11_+SECTOR_^1_%STA* SECTOR_^1_%STQ* TRACK_^1_%JMP* FWD1_^1M150_!ADC 0_^1_%LDA* M150_^1*_8ADDRESS OF LIST_^1_%STA- I_^1M200_!LDQ* CODE_^1*_8READ/WRITE CODE =1_^1_%RTJ* RDWRDM_^1_%SAN M300-*-1_^1_%RAO* ERCD_)TRY TEN TIMES_4**MSOS 4.1**_^1_%SOV M320_^1_%JMP* M200_^1MZ99_!JMP* (QDRUM)_%RETURN--ERROR_^1M300_!LDQ* ITEM_)RESTORE INDEX_^1_%ST€€Q- I_^1M320_!JMP* (QDRUM)_^1FWD1_!RTJ* M150_^1_%ADC 0_^1*_88 CARDS DELETED_^1CODE_!ADC 0_^1*_8R/W CONTROL_^1ITEM_!ADC 0_^1*_8SAVE REGISTER LOC_^1ERCD_!ADC 0_^1*_8INDEX FOR TEN TRIES_.**MSOS 4.1**_^1*_82 CARDS DELETED_^1EMASS ADC DEVICE*128+1_^1_%EQU EDRUM(EMASS)_^1RDWRDM 0_"0_^1_%LDA* READC,Q_%PICK UP RD/ WR INDICATOR_^1_%STA* RWCTRL_'STORE ON OUTPUT LIST TO DRM CONTROLLER_^1€€*_813 CARDS DELETED_^1_%RTJ* STATUS_'CHECK STATUS_^1_%ENQ 0_^1RW1_"STQ* TEMPD_(INDEX TO INPUT LIST TO DRUM CONTROLLER_^1_%LDA* LIST,Q_'GET DRUM COMMAND_^1_%LDQ* LIST+1,Q_$GOT I/O OPERATION CODE_^1_%SQM RWXIT_(END OF TABLE_^1_%ADQ* EDRUM_(ADD BASE EQUIPMENT CODE_^1_%INQ -1_+REMOVE DIRECTOR BIT, ALREADY IN TABLE_^1_%OUT OREJ-*-1_$OUT TO DRUM , OREJ=REJECT ADDRESS_^1_%LDQ* TEMPD_^€€1_%INQ 2_^1_%JMP* RW1_^1*_]_^1OREJ_!JMP* IREJ_)INTERNAL REJECT_2**MSOS 4.1**_^1_%JMP* EREJ_)EXTERNAL REJECT_2**MSOS 4.1**_^1RWXIT RTJ* DSTAT_(DONE. CHK DRM STATUS_^1_%ENA 1_^1*_8RETURN NORMAL TO USER_^1_%JMP* (RDWRDM)_$RETURN_^1READC ADC 4_,READ_^1WRITEC ADC 0_,WRITE_^1_%EQU LIST(*)_%SET UP TO GO TO DRUM CONTROLLER_^1TRACK ADC 0,8_*SET UP TRACK_^1SECTOR ADC 0,$A_)SET UP S€€ECTOR_^1SCORE ADC 0,$C_)STARTING CORE ADDRESS_^1ECORE ADC 0,$E_)ENDING CORE ADDRESS_^1_%NUM 0_^1RWCTRL 0_"0_,INITIATE I/0_#RD=$104,_^1_%NUM 0,-1_)END OF R/W_^1DSTAT 0_"0_,DETERMINE DRUM STATUS_^1S1_#RTJ* STATUS_'DETERMINE STATUS VIA STATUS ROUTINE_^1_%LRS 3_^1_%SAM DOKAY-*-1_#IS STATUS OK DONE_^1_%JMP* S1_+WAIT FOR STATUS OK,TRY AGAIN_^1DOKAY JMP* (DSTAT)_%RETURN_^1STATU€€S 0_"0_^1_%LDQ* EDRUM_(READ STATUS_6**MSOS 4.1**_^1_%INP S1-*_^1_%STA* STAT_)SAVE STATUS_6**MSOS 4.1**_^1_%TRA Q_^1_%AND =N$D40_^1_%SAN DERR-*-1_^1_%JMP* (STATUS)_^1DERR_!ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1DERRA LDA* STAT_)GET LAST STATUS_2**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%CLR A_N**MSOS 4.1**_^1_%JMP* (RDWRDM)_^1IREJ_!ENQ 5_,INTERNAL REJECT ERROR_,**MSOS 4.1**_^1_%J€°MP* DERRA_J**MSOS 4.1**_^1EREJ_!ENQ 6_,EXTERNAL REJECT ERROR_,**MSOS 4.1**_^1_%JMP* DERRA_J**MSOS 4.1**_^1STAT_!NUM 0_,LAST STATUS_6**MSOS 4.1**_^1TEMPD NUM 0_^1_%END_]_^__°PQ1752 CSY/ A69 P€1_%NAM Q1752_(DECK-ID A69 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1752 DRUM INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_*THIS MODULE IS ONLY USED BY MDRIV CONTROLLER MODULE_^1*_!********************************************************************_^1*_#THE FOLLOWING PAR€€AMETERS MUST BE SUPPLIED._^1_%EQU DEVN(2)_"PHYSICAL DEVICE NUMBER_^1*_!********************************************************************_^1_%ENT QMASS_(BASIC DRIVER ENTRY_^1_%ENT EMASS_(W,E,S FUNCTION CODE_^1**************************************************************MSOS 4.1**_^1*_$ERROR EXIT CONDITIONS...._;**MSOS 4.1**_^1*_+(A) = 0_G**MSOS 4.1**_^1*_+(Q) = ERROR CODE_>**€€MSOS 4.1**_^1*_/2 = ALARM_A**MSOS 4.1**_^1*_/5 = INTERNAL REJECT_7**MSOS 4.1**_^1*_/6 = EXTERNAL REJECT_7**MSOS 4.1**_^1*_+(I) = LAST HARDWARE STATUS_4**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_]_^1_%ENT MMINIT_'AUTOLOAD SETUP ENTRY_^1_%EXT* I2RETN_'IN I2_^1MMINIT LDQ =XTEMPD-START1-1_!AUTOLOAD PROGRAM LENGTH_^1_%LDA =XPART01-STAR€€T1_"DISTANCE TO AUTOLOAD TABLE_^1_%RTJ I2RETN_'RETURN TO I2 WITH ADDRESS OF AUTOLOAD PROGRAM_^1************************************************************************_^1******************* AUTOLOAD PROGRAM FOR 1752 DRUM *********MSOS 4.1**_^1************************************************************************_^1START1 IIN 0_^1_%LDQ =XTEMPD-LOOP_!LENGTH TO BE MOVED_.**MSOS€€ 4.1**_^1LOOP01 LDA* LOOP,Q_^1_%STA* (STMSV4),Q_^1_%SQN MOVEIT-*-1_"SKIP IF PROGRAM MOVED_^1_%JMP* (STMSV4)_$GO TO LOOP AFTER IT HAS BEEN MOVED_^1MOVEIT INQ -1_^1_%JMP* LOOP01_^1************************************************************************_^1*************** FWA OF CORE TO 'STMSV4' IN SPACE *********************_^1******************************************************€€******************_^1LOOP_!ENA 5_,SYSTEM SECTOR IS 5_^1_%STA- I_^1_%ENA 0_,CORE ADDRESS_^1_%LDQ* STMSV4_'MODIFIED LENGTH OF PART 0_^1*_81 CARD DELETED_^1_%RTJ* QDRUM_(READ PART 0_^1_%SAN GOON-*-1_$SKIP IF NO DRUM ERROR_^1_%JMP* LOOP_^1GOON_!LDA* PART01_'MODIFIED PART 1 CORE IMAGE SECTOR ADDRESS_^1_%SAZ ONGO-*-1_$SKIP IF NO PART 1 TO LOAD_^1_%STA- I_^1_%LDA* PART1A_'MODIFIED COR€€E ADDRESS OF PART 1_^1_%LDQ* LPART1_'MODIFIED LENGTH OF PART 1_^1_%RTJ* QDRUM_(READ IN PART 1_^1_%SAN ONGO-*-1_$SKIP IF NO DRUM ERROR_^1_%JMP* GOON_^1ONGO_!EIN 0_^1_%JMP* LOOP-2_'TO MSOS SPACE 'RESTRT'_^1*_81 CARD REMOVED FOR PSR 90*2673_^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_^1€€STMSV4 NUM 0_,ADDRESS IN SPACE WHERE TO MOVE THE AUTOLOAD_^1*_]_'*_^1QMASS NUM 0_,BASIC ENTRY_^1_%EQU QDRUM(QMASS)_^1_%STA* FWD_'FIRST WORD ADDRESS OF BUFFER_^1_%ENA 0_,WRITE CODE TO A_^1_%SQM MDR20_^1MDR10 ENA 4_^1_%JMP* MDR21_^1MDR20 TCQ Q_)NBR OF WDS TO BE TRANSFERRED_^1MDR21 STA* RWCTRL_'K=0 FOR WRITE, K=4 FOR READ_^1_%LDA* FWD_'ADDR OF STORAGE BUFFER_^1_%AAQ A_+PLU€€S NBR WDS TO BE MOVED_^1_%INA -1_^1_%STA* LWD_)TO LAST WORD ADDR_^1*_!********************************************************************_^1*_#COMPUTE SEEK SECTOR ADDRESS_^1*_!********************************************************************_^1_%LDA- I_)MASS STORAGE SECTOR NUMBER_^1*_82 CARDS REMOVED FOR PSR 90*2673_^1_%AND =N$1F_(SECTOR ADDR IN BITS 0-4_^1_%SAN SECT-*-1_$SK€€IP IF SECTOR NOT ZERO_^1_%ENA 32_^1SECT_!INA -1_+LOAD SECTOR - 1_^1_%TRA Q_^1_%LDA- I_,LOAD MASS STG SECTOR_^1_%AND =N$FFE0_%GET TRACK_^1_%EAQ A_,COMBINE TRACK AND SECTOR ADDRESSES_^1_%STA* NR_^1_%ENA -9_^1_%STA* ERCD_)SET UP COUNTER TO TRY I/O 10 TIMES_^1MDR90 RTJ* RDWRDM_^1_%SAN MDR200-*-1_"SKIP IF I/O OK_^1_%RAO* ERCD_)TRY 10 TIMES_^1_%SOV MDR210-*-1_^1_%JMP* MDR90_^1MD€€R200 LDQ* ITEM_^1_%STQ- I_^1MDR210 JMP* (QDRUM)_^1FWD_"NUM 0_,FWD OF BUFFER_^1LWD_"NUM 0_,LWD OF BUFFER_^1ITEM_!NUM 0_^1ERCD_!NUM 0_^1NR_#NUM 0_,TRACK - SECTOR_^1RWCTRL NUM 0_,READ-WRITE FUNCTION CODE_^1EMASS ADC DEVN*128+1_^1_%EQU EDRUM(EMASS)_^1RDWRDM ADC 0_^1_%LDQ* EDRUM_^1_%ENA 2_^1_%OUT REJ-*_(ENABLE EOP, ALARM_^1_%LDA* NR_^1_%INQ 7_^1_%OUT REJ-*_(SET SECTOR ADDR€€_^1_%JMP* FADDR_^1REJ_"JMP* INTREJ_^1_%JMP* EXTREJ_^1FADDR LDA* FWD_^1_%INQ 4_^1_%OUT REJ-*_^1_%LDA* LWD_^1_%INQ 2_^1_%OUT REJ-*_^1RW_#ENA 0_^1_%INQ -14_^1_%ADQ* RWCTRL_^1_%OUT REJ-*_(INITIATE I/O_^1_%RTJ* STATUS_^1_%ENA 1_^1_%JMP* (RDWRDM)_^1STATUS ADC 0_^1DOIT_!CLR A_^1_%LDQ* EDRUM_^1_%INP REJ-*_^1_%STA* STAT_^1CHECK AND =N$1B_(LOOK FOR EOP AND READY_^1_%EOR =N$19_€€^1_%SAZ EOP-*-1_^1_%JMP* DOIT_)NOT DONE YET_^1EOP_"LDA* STAT_^1_%AND =N$20_(LOOK FOR ALARM_^1_%SAZ DROK-*-1_$SKIP IF NO ALARM_^1_%ENQ 2_,ALARM ERROR_^1_%JMP* DRERR_^1DROK_!JMP* (STATUS)_^1STAT_!NUM 0_^1DRERR LDA* STAT_)GET LADT STATUS_^1_%STA- I_^1_%CLR A_,SET ERROR FLAG_^1_%JMP* (RDWRDM)_^1INTREJ ENQ 5_,INTERNAL REJECT_^1_%JMP* DRERR_^1EXTREJ ENQ 6_,ENTERNAL REJECT_^1TEMP€D JMP* DRERR_^1_%END_]_^__ PQ17391 CSY/ A70 P€1_%NAM Q17391_'DECK-ID A70 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1739-1 DISK INITIALIZER DRIVER_^1*_$PERIPHERAL DRIVERS 1.0A_^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 OF BUFFER(FWAB)_€€,*_^1*_>+(Q) = NO. OF WORDS TO READ_+*_^1*_>-(Q) = COMPLEMENT OF WORDS TO WRITE_"*_^1*_>+(I) = STARTING SECTOR ADDRESS,BIAS IT *_^1*_>-(I) = STARTING SECTOR ADDRESS,NO BIAS *_^1*_C-(I) READ OR WRITE SEC.0-3 OR BSD *_^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*_$ERROR EXIT CONDITIONS_?**MSO€€S 4.1**_^1*_'(A) = 0_K**MSOS 4.1**_^1*_'(Q) = ERROR CODE_B**MSOS 4.1**_^1*_*2 = ALARM ERROR_@**MSOS 4.1**_^1*_*5 = INTERNAL REJECT_<**MSOS 4.1**_^1*_*6 = EXTERNAL REJECT_<**MSOS 4.1**_^1*_)14 = NOT READY_B**MSOS 4.1**_^1*_)16 = SEEK ERROR_A**MSOS 4.1**_^1*_*7 = COMPARE ERROR_>**MSOS 4.1**_^1*_'(I) = LAST HARDWARE STATUS_8**MSOS 4.1**_^1**********************************************€€**************************_^1************* THE FOLLOWING PARAMETERS MUST BE SUPPLIED **************_^1_%EQU DEVICE(3)_#EQUIPMENT NUMBER_1**MSOS 4.1**_^1SECTOR EQU SECTOR(29)_"SECTORS/TRACK_^1WORDS EQU WORDS(96)_#WORDS/SECTOR_^1************************************************************************_^1_%ENT MMINIT_'ENTRY FOR I2_^1_%ENT QMASS_(ENTRY TO DRIVER_^1_%ENT EMASS_(€€W,E,S FUNCTION CODE_^1_%EXT* I2RETN_I**MSOS 4.1**_^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 1739-1 ********************_^1********€€****************************************************************_^1START1 IIN 0_^1LENGTH LDQ =XDSKEND-LOOP+1_%LENGTH TO BE MOVED_^1LOOP01 LDA* LOOP,Q_^1_%STA* (STMSV4),Q_^1_%SQZ MOVED_(SKIP IF PROGRAM MOVED_,**MSOS 4.1**_^1_%INQ -1_^1_%JMP* LOOP01_^1MOVED JMP* (STMSV4)_$GO TO LOOP_7**MSOS 4.1**_^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_3**MSOS 4.1**_^1_%SAN GOON-*-1_$SKIP IF NO DISK ERROR_^1_%JMP* LOOP_)KEEP TRYING_6**MSOS 4.1**_^1GOON_!L€€DA* PART01_'PART 1 CORE IMAGE SECTOR ADDRESS_^1_%SAZ ONGO-*-1_$SKIP IF NOT PART 1 TO LOAD_^1_%STA- 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_3**MSOS 4.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 'RESTR€€T'_^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)_^1_%STA* AINITL_'BUFFER FWA TO READ €€OR WRITE_^1_%EOR =N$FFFF_%CHECK FOR WRITE TAGS FUNCTION_^1_%SAN QMASS1_'SKIP IF NOT_^1_%JMP WRATAG_'GO WRITE ADDRESS TAGS_^1QMASS1 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_%LDQ- I_,STARTING SECTOR ADDRESS_^1_%STQ* XINITL_'PHYSICAL SECTOR NUMBER FOR I/O_^1_%CLR A_^1BIGLOP STA* EXCESS_^1_%TRA M_€€,CLEAR MASK REGISTER (COMPARE FLAG)_^1_%STA ERRCNT_^1_%STA ERRCTN_^1_%STA* ENDDSK_'ACROSS DISK FLAG_^1_%JMP* OVRCHK_I**MSOS 4.1**_^1AINITL NUM 0_,STARTING ADDRESS OF BUFFER_^1QINITL NUM 0_,WORDS TO TRANSFER_^1EXCESS NUM 0_,NO. OF WORDS FOR NEXT I/O_^1XINITL NUM 0_,START SECTOR_5**MSOS 4.1**_^1TEMP2 NUM 0_,NEXT PART OF REQ.'S STARTING ADDRESS_^1TEMP3 NUM 0_^1RDWEFG NUM 0_€€,READ,WRITE INDICATOR_^1ENDDSK NUM 0_,ACROSS DISK FLAG_^1CYLNDR NUM 0_^1_%SPC 2_^1OVRCHK LDA- I_,GET START SECTOR_1**MSOS 4.1**_^1_%SUB =N11773_%SUBTRACT SIZE DISK 0 (NO LST SECT)**MSOS 4.1**_^1_%SAM ITSON0_'SKIP IF START IS ON DISK 0_'**MSOS 4.1**_^1_%JMP* GETHED_'ALL ON DISK 1_4**MSOS 4.1**_^1ITSON0 TCA A_,NO. SECTORS LEFT ON DISK 0_%**MSOS 4.1**_^1_%MUI =N96_)WORDS/SECTO€€R_5**MSOS 4.1**_^1_%DVI* QINITL_'WORDS TO END/WORDS TO TRANSFER_"**MSOS 4.1**_^1_%SAZ OVFLT1_'SKIP IF OVERFLOW TO DISK 1_'**MSOS 4.1**_^1_%JMP* GETHED_'ALL ON DISK 0_4**MSOS 4.1**_^1OVFLT1 TRQ A_,NO. WORDS ON DISK 0_.**MSOS 4.1**_^1_%SUB* QINITL_I**MSOS 4.1**_^1_%STQ* QINITL_'SAVE WORDS NOW (DISK 0)_***MSOS 4.1**_^1_%TCA A_N**MSOS 4.1**_^1_%STA* EXCESS_'SAVE WORDS NEXT (DISK 1)_€€)**MSOS 4.1**_^1_%ADQ* AINITL_I**MSOS 4.1**_^1_%STQ* TEMP2_(START ADDRESS OF NEXT_,**MSOS 4.1**_^1GETHED LDA- I_^1_%CLR Q_^1NOTE9 DVI =N11773_H**MSOS Z.1**_^1_%ALS 6_,POSITION DISK INDICATOR_^1_%STA* TEMP3_^1_%TRQ A_^1_%CLR Q_^1_%DVI =XSECTOR_$SECTORS/TRACK_^1_%QLS 9_^1_%LLS 15_+A = SECTOR(S) AND TRACK,Q = CYLINDER(S)_^1_%ALS 8_,A = TRACK AND SECTOR(S)_^1_%ADD* TEMP3_^1_%€€STA* TEMP3_(TRACK + SECTOR(S)_^1_%STQ* CYLNDR_^1HEDLOP ENQ 2_,CYLINDER REGISTER STATUS_^1_%RTJ* STATUS_^1_%NOP 0_^1_%ALS 8_,TO LOWER 8 BITS_^1_%AND =N$FF_J**MSOS 4.1**_^1_%SUB* CYLNDR_^1RETRY SAZ NOMOVE-*-1_"SKIP IF NO HEAD MOVEMENT_^1_%SAM GOFRD-*-1_#SKIP IF HEAD FOREWARD_^1_%EOR =N$2000_%SET UP FOR REVERSE SEEK_^1_%JMP* GOFRD+1_^1GOFRD TCA A_^1_%ALS 8_,POSITION TO DIFF€€ERENCE BITS_^1NOMOVE ADD* TEMP3_^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_I**MSOS 4.1**_^1_%TRM Q_-COMPARE FLAG_^1_%SQN COMPIT-*-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_4**MSOS 4.1**_^1_%STQ* CODERR_'SAVE ERROR CODE_2**MSOS 4.1**_^1_%JMP* ERROR1_^1COMPOK LDQ* EXCESS_'NEXT REQ.WORDS TO I/O IF NON ZERO_^1_%SQN SETNEW-*-1_"SKIP IF MORE TO I/O_^1_%LDQ* XINITL_^1_%STQ- I_,RESET SECTOR NO._^1_%SET A_,-0 = REQ.OK_^1_%JMP* WAYOUT_^1SETNEW LDA =N11773_%START DISK 1_5**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%LDA TEMP2_(STARTIN€€G 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_7**MSOS 4.1**_^1_%STQ* CODERR_I**MSOS 4.1**_^1_%RAO* ERRCTN_I**MSOS 4.1**_^1_%LDQ* ERRCTN_^1_%JMP* ERROR3_^1ERRORA ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1_%STQ* CODERR_I**MSOS 4.1**_^1ERROR1 RAO* ERRCNT_^1_%CLR Q_^1_%TRQ M_^1_%LDQ* ERRCNT_^1ERRO€€R3 INQ -10_*NO. OF RETRYS_^1_%SQN NOTDON-*-1_"SKIP IF NOT DONE TRYING_^1_%JMP* XOREJ_(ERROR EXIT_7**MSOS 4.1**_^1NOTDON SAM DRIVSK-*-1_"SKIP IF DRIVE SEEK ERROR_^1_%ALS 4_^1_%SAM CYLSEK-*-1_"SKIP IF CONTROLLER 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 ERRO€€R_+**MSOS 4.1**_^1_%JMP* HEDLOP_'TRY AGAIN_^1CYLSEK ENQ 2_,DRIVE CYLINDER STATUS_^1_%RTJ* STATUS_^1_%NOP 0_N**MSOS 4.1**_^1_%CLR Q_^1_%LLS 8_^1_%STQ* GOTO_^1_%ENQ 5_,TRUE CYLINDER STATUS_^1_%RTJ* STATUS_^1_%NOP 0_N**MSOS 4.1**_^1_%ALS 8_^1_%SUB- 0_^1GOTO_!NUM 0_^1_%JMP* RETRY_^1ERRCTN NUM 0_,ERROR COUNTER NO. 1_^1ERRCNT NUM 0_,ERRCOUNTER NO. 2_^1CODERR NUM 0_N**MSOS 4.1*€€*_^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 E€€XIT_%*_^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_J**MSOS 4.1**_^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**MSOS 4.1**_^1_%LRS 1_^1_%SAM ITRDY-*-1_#SKIP IF READY_^1_%ENQ 14_+NOT READY ERROR_2**MSOS 4.1**_^1_%JMP* EROUT_J**MSOS 4.1**_^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_N**MSOS 4.1**_^1************************************************************************_^1*************************** OUTPUT ROUTINE ***************************_^1************************************************************************_^1*_>ENTRY PARAMETERS_6*_^1*_?Q = FUNCTION COD€€E_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_2**M€€SOS 4.1**_^1_%ENQ 6_,EXTERNAL REJECT_2**MSOS 4.1**_^1EROUT LDA* DSTAT_(PASS LAST STATUS_1**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%CLR A,M_L**MSOS 4.1**_^1_%JMP* DSKEND_'RETURN_;**MSOS 4.1**_^1IREJ_!ENQ 5_,INTERNAL REJECT_2**MSOS 4.1**_^1_%JMP* EROUT_J**MSOS 4.1**_^1OREJA ENQ 2_,ALARM ERROR_6**MSOS 4.1**_^1_%JMP* EROUT_J**MSOS 4.1**_^1XOREJ LDQ* CODERR_'10 TRIES FAILED_2**MS€€OS 4.1**_^1_%JMP* EROUT_J**MSOS 4.1**_^1WAYOUT CLR Q_^1_%TRQ M_,CLEAR MASK REGISTER (COMPARE FLAG)_^1DSKEND JMP (QDISK)_%EXIT_=**MSOS 4.1**_^1_%EJT 0_^1*_$WRITE ADDRESS TAGS_^1_%SPC 5_^1WRATAG ENA 0_^1_%STA* ADDRES_^1TGSEEK CLR Q_^1_%LLS 8_,CYLINDER TO Q_^1_%STQ* CYL_^1_%INQ -127_^1_%INQ -76_*TEST FOR END (203)_^1_%SQN TGSEK4_'SKIP IF NOT DONE_^1_%JMP* WAYOUT_'EXIT_^1TGS€€EK4 ALS 8_^1_%STA* TEMP_)SAVE TRACK AND SECTOR_^1_%ENQ 2_^1_%RTJ* STATUS_'GET CYLINDER REGISTER STATUS_^1_%NOP 0_,NO POSSIBLE ERROR_^1_%ALS 8_,CYLINDER TO LOWER 8 BITS_^1_%AND =N$FF_^1_%SUB* CYL_^1_%SAZ TGSEK3_'SKIP IF NO MOVEMENT_^1_%SAM TGSEK1_'SKIP IF FORWARD_^1_%EOR =N$2000_%SET REVERSE BIT_^1_%JMP* TGSEK2_^1TGSEK1 TCA A_^1TGSEK2 ALS 8_,POSITION TO DIFFERENCE BITS_^1T€€GSEK3 ADD* TEMP_)ADD IN HEAD AND SECTOR_^1_%ENQ 2_^1_%RTJ* OUTPUT_'LOAD ADDRESS_^1_%ENQ 1_^1_%RTJ* STATUS_'WAIT FOR COMPLETION_^1_%JMP* ERROR2_'SEEK ERROR_^1_%ENQ 7_^1_%RTJ* OUTPUT_'WRITE ADDRESS TAGS_^1_%ENQ 1_^1_%RTJ* STATUS_'WAIT FOR COMPLETION_^1_%JMP* ERRORA_'ERROR_^1_%LDA* ADDRESS_^1_%INA $40_*GO TO NEXT TRACK_^1_%STA* ADDRES_^1_%JMP* TGSEEK_'REPEAT_^1ADDRES NUM 0_^1TEM€&P_!NUM 0_^1CYL_"NUM 0_^1_%END_]_^__ &PQ40421 CSY/ A71 P€1_%NAM Q40421_'DECK-ID A71 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$INITIALIZER FOR 1740/501 AND 1742-1 LINE PRINTERS_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1_%EQU DEVICE(4)_#EQUIPMENT CODE FOR LINE PRINTER_!**MSOS 4.1**_^1_%ENT QPRINT_'BASIC DRIVER ENTRY_/**MSOS 4.1**_^1_%ENT €€EPRINT_'EQUIPMENT CODE_3**MSOS 4.1**_^1_%ENT FORMFD_^1_%ENT HEADR1,HEADR2,HEADR3,HEADR4_^1_%SPC 4_^1QPRINT NUM 0_N**MSOS 4.1**_^1_%STA* START_^1_%STQ* NCHAR_^1_%ENQ 1_^1_%ENA 1_,CLEAR PRINTER_4**MSOS 4.1**_^1_%RTJ* OUTPUT_^1_%ENA 0_^1_%STA* CC_^1_%LDA* FORMFD_^1_%SAZ 1_,SKIP IF FORM FEED TIME_^1_%JMP* COUNTL_^1PAGEFD STA* LINES_^1_%STA* COUNTW_'HEADER PRINT COUNTER_^1_%ENA €€ 8_^1_%ENQ 3_^1_%RTJ* OUTPUT_'TOP OF FORM_^1_%STA* FORMFD_^1LOOPER LDQ* COUNTW_^1_%LDA* HEADER,Q_^1_%SAZ HPRINT-*-1_"SKIP IF PRINT HEADER TIME_^1_%CLR Q_^1_%RTJ* OUTPUT_'DATA TO PRINT BUFFER_^1_%RAO* COUNTW_^1_%JMP* LOOPER_^1HPRINT ENQ 3_,PRINT THE_^1_%ENA 1_,HEADER_^1_%RTJ* OUTPUT_^1_%ENQ 3_,DOUBLE_^1_%ENA 4_,SPACE_^1_%RTJ* OUTPUT_^1COUNTL LDA* LINES_^1_%INA -57_*LINES / P€€AGE_^1_%SAN GOON-*-1_$SKIP IF DATA I/O_^1_%STA* FORMFD_^1_%JMP* PAGEFD_^1GOON_!ENQ 0_,OUTPUT 2 SPACES_^1_%LDA* HEADER_'FOR EACH LINE_^1_%RTJ* OUTPUT_^1PLOOP LDQ* CC_^1_%LDA* (START),Q_#GET 2 CHARACTERS_^1_%AND =N$7F7F_%MASK UNUSED BITS_^1_%CLR Q_^1_%RTJ* OUTPUT_^1_%RAO* CC_^1_%LDA* CC_^1_%SUB* NCHAR_^1_%SAP PRINT-*-1_#SKIP IF BUFFER NOW OUTPUT_^1_%JMP* PLOOP_(LOOP BACK FOR NE€€XT WORD_^1_%SPC 2_^1PRINT ENQ 3_^1_%ENA 1_^1_%RTJ* OUTPUT_'PRINT THE LINE_^1_%ENA 2_,SINGLE SPACE_^1_%ENQ 3_,AFTER EACH PRINT_^1_%RTJ* OUTPUT_^1_%RAO* LINES_(LINE COUNTER_^1_%INQ -2_^1_%NOP 0_^1LOOP_!INP -1_^1_%AND =N$0002_^1_%SAZ 1_,SKIP IF NOT BUSY_^1_%JMP* LOOP_^1_%JMP* (QPRINT)_$EXIT_^1OUTPUT NOP 0_^1_%ADQ* EPRINT_'EQUIP. NO._7**MSOS 4.1**_^1_%INQ -1_^1_%NOP 0_^1_€€%OUT -1_^1_%JMP* (OUTPUT)_$EXIT_^1_%SPC 4_^1START NUM 0_^1NCHAR NUM 0_^1CC_#NUM 0_^1FORMFD NUM 0_,TOP OF FORM FLAG_^1COUNTW NUM 0_,HEADER COUNTER_^1EPRINT ADC DEVICE*128+1 W,E,S FUNCTION CODE_.**MSOS 4.1**_^1HEADER ALF 4, DATE_^1HEADR1 ALF 1,_+MM_^1HEADR2 ALF 1,_+/D_^1HEADR3 ALF 1,_+D/_^1HEADR4 ALF 1,_+YY_^1*_$ADDITIONAL HEADER INFO. MAY BE OUTPUT BUT IT MUST BE PL€VACED HERE*_^1LINES NUM 0_,LINE COUNT - MUST FOLLOW LAST WORD OF HEADER_^1_%END_]_^__VPRWBA CSY/ A72 P€1_%NAM RWBA_)DECK-ID A72 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT RWBA_^1_%EXT* ABSEV4,FAILED,INTAV4,REJCTX,PARCV4_.**MSOS4.0**_^1MODRTN EQU MODRTN(23)_F**MSOS4.0**_^1_%EXT* CKBUS€€Y_^1_%EQU ONEBIT($23),CONECT(7)_^1_%EQU ERCD(9),STATUS(12),START(10),STOP(11)_^1_%SPC 3_^1RWBA_!RTJ* ABSTE_K**MSOS4.0**_^1ABSTE NUM 0_O**MSOS4.0**_^1_%LDA =XEENTRY-ABSTE_B**MSOS4.0**_^1_%ADD* ABSTE_K**MSOS4.0**_^1_%STA- MODRTN,I_H**MSOS4.0**_^1_%LDA ABSEV4_J**MSOS4.0**_^1_%STA* ISITEP_J**MSOS4.0**_^1EENTRY LDA- CONECT,I_H**MSOS4.0**_^1_%INA -1_^1_%STA* EQTAB_^1_%LDA- START,€€I_^1_%STA* CORE_^1_%LDA- STOP,I_^1_%STA* LAST_^1_%ENA 1_^1_%AND- ERCD,I_^1_%SAZ 1_^1_%JMP* WBA1_^1_%RTJ CKBUSY_^1_%LDA- ONEBIT+8_%SET READ MODE_^1_%OUT REJ-*_^1RBA_"LDQ* EQTAB_^1RBA2_!ENA 0_^1_%INP THRU1-*_^1_%ALS 6_^1_%STA* TEMP_^1RBA4_!ENA 0_^1_%INP THRU2-*_^1_%EOR* TEMP_^1_%ALS 4_^1_%STA* TEMP_^1RBA6_!ENA 0_^1_%INP THRU3-*_^1_%ARS 2_^1_%EOR* TEMP_^1_%STA* (CORE)_^1_€€%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ 1_^1_%JMP* RBA_^1RBA1_!INP THRU4-*_^1_%JMP* RBA1_^1THRU1 NOP 0_$INTERNAL REJECT_^1_%RTJ* (ISITEP)_H**MSOS4.0**_^1_%JMP* RBA2_!NO_^1RBA5_!LDQ* LAST_PTSO226_^1_%LDA* CORE_L**MSOS4.0**_^1_%JMP PARCV4_J**MSOS4.0**_^1THRU2 NOP 0_$INTERNAL REJECT_^1_%RTJ* (ISITEP)_H**MSOS4.0**_^1_%JMP* RBA4_!NO_^1_%LDQ* TEMP_!YES_^1_%QLS 4_^1RBA7_!ST€€Q* (CORE)_^1_%RAO* CORE_^1_%JMP* RBA5_^1THRU3 NOP 0_$INTERNAL REJECT_^1_%RTJ* (ISITEP)_H**MSOS4.0**_^1_%JMP* RBA6_!NO_^1_%LDQ* TEMP_!YES_^1_%JMP* RBA7_^1ISITEP NUM 0_N**MSOS4.0**_^1THRU4 NOP 0_$INTERNAL REJECT_^1_%RTJ* (ISITEP)_H**MSOS4.0**_^1_%JMP* RBA1_!NO_^1_%JMP* RBA5_^1_%BZS EQTAB(1),CORE(1),LAST(1),TEMP(1)_^1REJ_"JMP* INTAL3_J**MSOS4.0**_^1_%JMP REJCTX_J**MSOS4.0**_^1€€INTAL3 JMP INTAV4_J**MSOS4.0**_^1WBA1_!LDA- STATUS,I_^1_%SAM RITEOK_J**MSOS4.0**_^1_%ENA 13_N**MSOS4.0**_^1_%JMP FAILED_J**MSOS4.0**_^1RITEOK RTJ CKBUSY_J**MSOS4.0**_^1_%LDA- ONEBIT+7_$SET WRITE MOTION_^1_%OUT REJ-*_^1_%LDQ* EQTAB_^1WBA_"LDA* (CORE)_^1_%ALS 6_^1_%STA* TEMP_^1WBA2_!OUT RJA-*_^1_%ALS 6_^1_%STA* TEMP_^1WBB_"OUT RJB-*_^1_%ALS 6_^1_%AND- $14_^1_%EOR- $4_+SET €€LOWER TWO BITS_-*4.0/77*1924_^1_%STA* TEMP_^1WBC_"OUT RJC-*_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ 1_^1_%JMP* WBA_^1WBA3_!RTJ* (ISITEP)_H**MSOS4.0**_^1_%JMP* WBA3_)NO EOP_^1_%JMP* RBA5_^1RJA_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* WBA2_^1RJB_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* WBB_^1RJC_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* WBC_^1CKSTAT NOP 0_^1_%INQ 1_^1_%INP REJ-*_^1_%ALS €\ 11_^1_%SAP CKS_^1_%JMP* WBA3_^1CKS_"INQ -1_^1_%LDA* TEMP_^1_%JMP* (CKSTAT)_^1_%END_]_^__ \PRWBAB CSY/ A73 P€1_%NAM RWBAB_(DECK-ID A73 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1731/1732 BUFFERED 601 MAG TAPE DRIVER REV.1_)**MSOS4.0**_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%ENT_"RWBAB_^1_%EXT* PREPV4,ENRIV4_C**MSOS4.0**_^1_%EXT* BRTNV4_J**MSOS4.0**_^1_%EXT* BUFFWA_J**MSOS4.0**_^1_%EXT* NRMRTB€€_J**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%EQU_!RQST(9)_"REQUEST STATUS PHYSTB+9_^1_%EQU_!FWA($A)_"CURRENT LOC. TO STORE INTO_^1_%EQU_!LWA($B)_"LAST LOC. TO STORE INTO +1_^1MODRTN EQU MODRTN(23)_F**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1RWBAB LDA- FWA,I_K**MSOS4.0**_^1_%STA* C€€ORE_^1_%STA* CORADR_^1_%LDA- LWA,I_$LAST ADDRESS + 1_^1_%STA* LAST_^1_%RTJ* RWBABS_J**MSOS4.0**_^1RWBABS NUM 0_O**MSOS4.0**_^1_%LDA =XINTRW-RWBABS_B**MSOS4.0**_^1_%ADD* RWBABS_J**MSOS4.0**_^1_%STA- MODRTN,I_H**MSOS4.0**_^1_%LDA- I_^1_%STA* SAVEI_^1_%ENA_!1_)EXTRACT_^1_%AND- RQST,I_#WR/RD BIT(0)_^1_%SAN BLOW_L**MSOS4.0**_^1EXTIO ENQ 0_O**MSOS4.0**_^1_%JMP PREPV4_J**MSOS4.0€€**_^1BLOW_!STA* SAVIDX_J**MSOS4.0**_^1_%RTJ ENRIV4_J**MSOS4.0**_^1_%RTJ* PCKBUF_J**MSOS4.0**_^1_%LDA* SAVIDX_J**MSOS4.0**_^1_%JMP* EXTIO_K**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1INTRW NOP_!0_)ENTER HERE FROM EPROC PROCESSOR_^1_(SUB_%BUFFWA_^1_%ENQ 0_O**MSOS4.0**_^1_%INA -1_N**MSOS4.0**_^1_%DVI- $4_(BY 3_^1_%ADD* CORADR_^1_%S€€TA* NXTLOC_#NXTLOC FOR FUTURE STUFFING OF FWA_^1_%JMP* CKREAD_J**MSOS4.0**_^1_%SPC_!1_^1CKREAD ENA 1_,CHK 4 READ_8**MSOS4.0**_^1_%AND- RQST,I_$WRITE OPERATION._^1_%SAZ_!UNPACK-*-1 READ. UNPACK BUFFER DATA_^1_%LDA* NXTLOC_^1_%JMP NRMRTB_J**MSOS4.0**_^1SAVIDX NUM 0_O**MSOS4.0**_^1NXTLOC NUM_!0_^1LAST_!NUM_!0_^1SAVEI NUM_!0_^1TEMP_!NUM_!0_^1CORE_!NUM_!0_^1CORADR NUM_!0_^1_%SPC_!€€1_^1*****************************************************_^1_%SPC_!1_^1* THE FOLLOWING CODE UNPACKS THE BUFFER_^1* AFTER A BUFFERED READ_^1_%SPC_!1_^1UNPACK LDA BUFFWA_J**MSOS4.0**_^1_%STA* SAVEI_^1_%ENQ 0_O**MSOS4.0**_^1UA_#LDA* (SAVEI),Q_^1_%ALS_!10_^1_%AND- $1C_'$FC00_^1_%STA* TEMP_^1_%INQ_!1_^1_%LDA* (SAVEI),Q_^1_%ALS_!4_^1_%AND_!=N$03F0_^1_%ADD* TEMP_^1_%STA* TEMP_^1_%€€INQ_!1_^1_%LDA* (SAVEI),Q_^1_%ARS_!2_^1_%AND- $6_($F_^1_%EOR* TEMP_^1_%STA* (CORE)_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* NXTLOC_^1_%SAZ_!FINI-*-1_^1_%RAO* SAVEI_^1_%JMP* UA_^1_%SPC_!1_^1FINI_!LDQ NXTLOC_J**MSOS4.0**_^1_%JMP BRTNV4_J**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* THE FOLLOWING CODE PACKS DATA INTO THE_^1* BUFFER€€ PRIOR TO A BUFFERED WRITE._^1PCKBUF NOP 0_O**MSOS4.0**_^1_%LDA BUFFWA_J**MSOS4.0**_^1_%STA* SAVEI_^1_%ENQ 0_O**MSOS4.0**_^1PA_#LDA* (CORE)_^1_%ALS_!6_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (SAVEI),Q_^1_%INQ_!1_^1_%LDA* (CORE)_J**MSOS4.0**_^1_%ALS 12_N**MSOS4.0**_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (SAVEI),Q_^1_%LDA* (CORE)_J**MSOS4.0**_^1_%AND- $10_($3FFF_^1_%ALS_!2€"_^1_%EOR- $4_+SET LOWER TWO BITS_-*4.0/77*1923_^1_%INQ_!1_^1_%AND- $8_+$003F_=**MSOS4.0**_^1_%STA* (SAVEI),Q_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ_!WRTAPE-*-1_^1_%RAO* SAVEI_^1_%JMP* PA_^1_%SPC_!1_^1WRTAPE LDA- I_^1_%STA* SAVEI_^1_%JMP* (PCKBUF)_H**MSOS4.0**_^1_%END_]_^__ "PSCMCD1 CSY/ A74 P€1_%NAM SCMCD1_'DECK-ID A74 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1739-1 CARTRIAGE DISK DRIVE AND CONTROLLER TEST ROUTINE_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^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*_$SCMCD1 IS A DIAGNOSTIC EXERCISER FOR THE 1739-1 CDD_^1*_$SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE MSOS DRIVERS FOR ALL_^1*_$COMMUNICA€€TION WITH THE DISK SUBSYSTEM. BEFORE TEST EXECU-_^1*_$TION IS STARTED, THE USER IS REQUESTED TO INPUT THE TEST_^1*_$PARAMETERS -- LOGICAL UNIT, TEST SECTIONS TO BE EXECUTED,_^1*_$BEGINNING SECTOR ADDRESS, ENDING SECTOR ADDRESS AND THE_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED. EACH_^1*_$PARAMETER IS CHECKED FOR ITS VALIDITY. IF ANY PARAMETER IS_^1*_$INVALID THE USER €€IS REQUESTED TO RE-ENTER THE TEST PARAME-_^1*_$TERS. IF THE SYSTEM DISK IS BEING TESTED, THE USER IS NOT_^1*_$ALLOWED TO SPECIFY A DISK ADDRESS WITHIN IN THE SYSTEM_^1*_$AREA. SCMCD1 IS DIVIDED INTO SIX SECTIONS (TESTS) AS FOLLOWS_^1*_*SECTION 1_!WORST CASE PATTERN TEST_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH T€€EST_^1*_*SECTION 5_!ZEROS WRITTEN OVER ONES TEST_^1*_*SECTION 6_!RANDOM SECTOR ADDRESS TEST_^1*_$SECTIONS 1, 2, 3, 5 AND 6 TRANSFER BLOCKS OF 2048 WORDS_^1*_$DECIMAL. ALL RANDOM NUMBERS ARE PSEUDO RANDOM NUMBERS. AT_^1*_$THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$HARDWARE ERRORS EXCEPT DATA ERRORS. IF A HARDWARE ERROR_^1*_$OCCURRED, THE I/O REQUEST IS REPEATED TWI€€CE. AFTER ALL WRITE_^1*_$OPERATIONS ARE COMPLETE IN A GIVEN TEST SECTION, THE DISK_^1*_$IS THEN READ AND DATA COMPARED AGAINST WHAT WAS WRITTEN._^1*_$AT THE END OF EACH TEST SEQUENCE, THE PASS COUNTER IS UPDATED_^1*_$AND COMPARED AGAINST THE NUMBER OF TIMES REQUESTED BY THE_^1*_$USER. IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS_^1*_$ALSO CHECKED AND IF SET THE TEST IS TERMIN€€ATED. IF $8000_^1*_$IS ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE_^1*_$WILL BE EXECUTED INDEFINITELY._^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCAT€€ION_^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 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 M7FFF($42)_^1_%EQU M80($2A)_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE._^1_%EXT COMPV4_^1*_]_^1_%EQU SYSDSK($C2)_!LOCATION OF L.U. FOR SYSTEM DISK_^1_%EQU MAXSEC($C1)_!LOCATION OF HIGHEST SEC ADD USED BY SYSTEM_^1_%EQU TSTCD1(*)_#ENTRY POINT FOR RCOS_^1_%EN€€T TSTCD1_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATION REGION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTCD1_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION W€€ORD 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_^1_%LDA- $C1_^1_%RTJ* (RHXASC)_^1_%ADC (C1CON-*)_^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--END TEST_^1FLDOK1 INQ -1_^1_%STA LU,Q_^1_%INQ -4_^1_%SQZ INI2-*-1_^1_%JMP* IN€€I1_^1INI2_!LDA BUFF+3_'CONVERT NUMBER OF RUNS_^1_%SAM INI3_)(CHECK FOR CONTINUOUS EXECUTION)_^1_%RTJ* (RDECHX)_%OF RUNS_^1INI3_!STA* BUFF+3_^1_%LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA DSKLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%CK IF LU IS LEGAL_^1_%STQ* PHYPTR_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$1070_%1739-1_'($1070)_#TYPE= 0_^1_%SAZ INI3B_^1_%SUB- M80_*1733-2/8€€56-2 ($10F0)_#TYPE= 1_^1_%SAZ INI3A_^1_%INA -$10_7($1100)_#TYPE= 2_^1_%SAN INI4_)ERROR - ILLEGAL DEVICE_^1_%INA 1_,856-4_^1INI3A INA 1_,856-2_^1INI3B STA* TYPE_)1739_^1_%JMP* INI5_^1INI4_!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_^1_%INA -3_^1_%SAZ 1_^1_%JM€€P* ENTER1_^1_%JMP ENDMSG_^1INI5_!LDQ* TYPE_)GET DEVICE TYPE_^1_%LDQ* TOTSEC,Q_#CHECK IF_^1_%LDA* BUFF+2_'OPERATOR_^1_%RTJ+ COMPV4_)EXCEEDED_^1_%SAM INI6_^1_%JMP* INI7_^1INI6_!LDA* BUFF+1_'CHECK STARTING SECTOR_^1_%LDQ* BUFF+2_'LESS THAN ENDING SECTOR_^1_%RTJ+ COMPV4_^1_%SAM INI8_^1INI7_!RTJ* (MESAGE)_$SECTOR ADDRESS ERROR_^1MES3_!NUM $8244_^1_%ADC (START-MES3)_^1_%NUM 3_^1_€€%ADC MSG3B-MES3_^1_%ADC MSG3E-MSG3B_^1_%JMP* ENTER1_^1INI8_!LDA DSKLU_(CK IF SYSTEM DISK_^1_%SUB- SYSDSK_^1_%SAN INI9-*-1_^1_%LDA- MAXSEC_'CHECK IF_^1_%LDQ* BUFF+1_(ATTEMPTING TO_^1_%RTJ+ COMPV4_)TEST IN_^1_%SAZ INI9_,SYSTEM AREA_^1_%SAM INI9_^1_%JMP* INI7_^1INI9_!LDQ* TYPE_)GET DEVICE TYPE_^1_%LDA* BUFF+1_'GET BEGINNING SECTOR NUMBER_^1_%SQZ INI9C_(IS DEVICE A 1739-1_^1_%SA€€P INI9C_)NO CHECK IF SECTOR IS POSITIVE_^1_%SUB- M7FFF_(NO - SUBTRACT HIGHEST POS. VALUE_^1_%CLR Q_-CALCULATE NUMBER OF_^1_%MUI* N96_,WORDS GREATER THAN $7FFF_^1_%LLS 1_,GENERATE LSB AND_^1_%ALS 15_,MSB VALUES THEN_^1_%ADD MLSB_+ADD IN KNOWN LSB_^1_%ADQ MMSB_,AND MSB FOR $7FFF_^1_%SAP INI9B_(CHECK FOR LSB OVERFLOW_^1_%INQ 1_-YES - CORRECT MSB_^1_%AND- M7FFF_*AND LSB VALUES_€€^1INI9B JMP* INI9D_^1INI9C MUI* N96_^1_%LLS 1_^1_%ALS 15_^1INI9D STA LSB_*SAVE DISK WORD ADDRESS_^1_%STA* LSBSAV_^1_%STQ MSB_^1_%STQ* MSBSAV_^1_%LDQ* TYPE_)CONVERT ENDING SECTOR NUMBER_^1_%LDA* BUFF+2_^1_%SQZ INI9F_^1_%SAP INI9F_^1_%SUB- M7FFF_^1_%CLR Q_^1_%MUI* N96_^1_%LLS 1_^1_%ALS 15_^1_%ADD MLSB_^1_%ADQ MMSB_^1_%SAP INI9E_^1_%INQ 1_^1_%AND- M7FFF_^1INI9E JMP* I€€NI9G_^1INI9F MUI* N96_^1_%LLS 1_^1_%ALS 15_^1INI9G STA* MAXLSB_'SAVE DISK WORD ADDRESS_^1_%STQ* MAXMSB_^1_%CLR A_^1_%STA CMP1_^1_%STA COUNT_^1_%STA PASSES_^1_%STA* PSSCTR_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1BUFF_!NUM 0,0,0,0_^1PHYPTR NUM 0_^1N96_"NUM 96_^1INPERR NUM 0_^1TYPE_!NUM 0_,=0 IF 1739 =1 IF 856-2_!=2 IF 856-4_^1TOTSEC NUM $5BFD_(MA€€X SECTORS FOR_!1739-1_^1_%NUM $5BFD_:1733-2/856-2_^1_%NUM $B8DD_:1733-2/856-4_^1MLSB_!NUM $7FA0_^1MMSB_!NUM $5F_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!WORST CASE PATTERN TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* BUFF_)DETERMINE TEST S€€EQ--_^1_%AND- ONEBIT+1_$IS TEST1 REQUESTED..._^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 LDA =N$2031_%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* TRKTRN_'EXECUTE XFERS AND CKS._^1_%LDA* COUNT1_^1_%INA -3_+CHK FOR LAST WORST PATTERN._^1_%SAZ T2CK-*-1_^1_%RAO* COUNT1_^1_%JMP* WP1_^1COUNT1 NUM 0_^1W€€SPAT1 NUM $9555_(WORST PATTERNS..._^1_%NUM $6AAA_^1_%NUM $5A5A_^1_%NUM $A5A5_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5SECTION 2_!ALL ONES TEST_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* BUFF_^1_%AND- ONEBIT+2_$IS TEST2 REQUESTED..._^1_%SAN TEST2-*-1_^1€€_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEGIN TEST 2_^1_%STA SNUM_^1_%SET A_^1_%RTJ* TRKTRN_^1_%JMP* T3CK_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2LOAD, XFER, AND CHECK 2048 WORDS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TRKTRN 0_"0_^1_%STA* PATTRN_^1_%LDQ- ONEBIT+11_#$€€800_^1_%STQ* NWORDS_^1TT1_"LDA* PATTRN_'GET PATTERN._^1_%LDQ- LPMSK+11_$$7FF_^1TT2_"STA BLK2K,Q_/LOAD BUFFER._^1_%SQZ TT3-*-1_^1_%INQ -1_^1_%JMP* TT2_^1TT3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1_%RTJ* BLKTRN_^1_%JMP* TT4_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE FOR NEXT TRACK._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* TT1_^1TT4_"LDA* PSSCTR_'CK FOR SECOND PHASE._^1_%SA€€Z TT4A-*-1_^1_%RAO* PSSCTR_'PHASE 1_^1_%LDA* PSSCTR_^1_%INA -11_*TEST FOR 10 PASSES._^1_%SAZ TT4A-*-1_^1_%JMP* TT1_^1TT4A_!LDA* READ_)RESET BLKTRN._^1_%STA* REF3_^1TT5_"RTJ* BLKTRN_^1_%JMP* (TRKTRN)_^1_%LDA* LSB_^1_%ADD* NWORDS_^1_%STA* LSB_^1TT6_"LDA* PATTRN_'GET ORIGINAL PATTERN._^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ COMPAR_^1_%JMP* TT5_*TO HERE WHEN TRK COMP THRU_^1_%JMP* TT6_*TO€€ HERE FOR NEXT CELL CK._^1*_]_^1PATTRN NUM 0_^1PSSCTR NUM 0_^1MAXMSB NUM 0_^1MAXLSB NUM 0_^1MSBSAV NUM 0_^1LSBSAV NUM 0_^1************************************************************************_^1*_]_'*_^1*_4SECTION 3_!RANDOM DATA TEST_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* BUFF_^1_%AND- ONEBIT+3_$IS TES€€T3 REQUESTED..._^1_%SAN TEST3-*-1_^1_%JMP T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA SNUM_^1_%LDQ- ONEBIT+11_#SET WORD 4 OF CALL SEQ._^1_%STQ* NWORDS_2*_^1_%CLR A_^1_%STA- I_^1_%LDA* RN2_^1_%STA* RN9_^1RN1_"LDA* RN2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_0*_^1_%MUI* RNDNUM_'PATTERNS_!*_^1_%STA* RN2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RN3-*-1_€€^1_%RAO- I_^1_%JMP* RN1_*CONTINUE LOADING BLK._^1RN2_"NUM $21_^1RN3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1RN4_"RTJ* BLKTRN_^1_%JMP* RN5_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE WHEN TRK IS XFERRED_^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* RN4_^1RN5_"LDA* READ_^1_%STA* REF3_^1RN6_"RTJ* BLKTRN_^1_%JMP* RN10_)TO HERE IF TEST AREA COMPLETE_^1_%LDA* LSB_*TO HERE IF NOT._^1_%A€€DD* NWORDS_^1_%STA* LSB_^1_%LDA* RN9_^1_%STA* RN8_^1RN7_"LDA* RN8_*REGENERATE ORIGINAL SEQ._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_)OF RANDOM BIT PATTERNS._^1_%STA* RN8_^1_%LRS 1_^1_%LDQ- ONEBIT+11_^1_%RTJ COMPAR_^1_%JMP* RN6_*TO HERE WHEN BLK COMP THRU_^1_%JMP* RN7_*TO HERE FOR NEXT CELL CK._^1RN8_"NUM $21_^1RN9_"NUM 0_^1RN10_!JMP* T4CK_^1_%SPC 2_^1********************************€€****************************************_^1*_]_'*_^1*_/TRANSFER BLOCKS BETWEEN DISK AND CORE_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLKTRN 0_"0_^1_%LDA* TRYAGN_'CK FOR PREVIOUS PARITY ERROR._^1_%SAP BL1A-*-1_'ERROR FLAG SET._^1_%LDA* OLDLSB_^1_%STA* LSB_^1_%JMP* BL1B_)REPEAT OPERATION_^1BL1A_!RTJ* NXTADR_^1BL1B_!LDA* REF€€3_^1_%SUB* READ_)CHECK FOR DOING READ NOW_^1_%SAN GOGO_^1_%LDQ =N2047_'IF IT IS A READ - ZERO THE BUFFER FIRST_^1LOPER STA BLK2K,Q_^1_%SQZ GOGO_)END OF BUFFER YET_^1_%INQ -1_+NO- GO AROUND AGAIN_^1_%JMP* LOPER_^1GOGO_!RTJ- (AMONI)_%CONSTRUCT MONITOR CALL_^1REF3_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP5-REF3_$TO TRANSFER BLOCK_^1_%ADC 0_.OF INFORMATION TO_^1DSKLU NUM 8_.DIS€€K._^1NWORDS NUM 0_7*_^1_%ADC BLK2K-REF3_.*_^1MSB_"NUM 0_7*_^1LSB_"NUM 0_7*_^1_%JMP- (ADISP)_%GO TO DISPATCHER._^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_^1COMP5 CLR A_^1_%STA CELERR_^1_%LDA* LSB_*SAVE DISK XFER ADDRESS._^1_%STA* OLDLSB_^1_%SQP COMP5A-*-1_^1_%RTJ ESTAT_(CK STATUS BITS._^1COMP5A LDA FLAG_)CHECK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SA€€Z COMP5B-*-1_^1_%JMP ENDMSG_^1COMP5B RAO* TRYAGN_^1_%LDA* TRYAGN_^1_%AND- ONEBIT+1_$CK FOR REPEAT._^1_%SAZ BL2-*-1_^1_%CLR A_,YES, CONTINUE TEST_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_$RETURNS TO 2ND WD AFTER RTJ_^1BL2_"LDA STATUS_'NO REPEAT._^1_%TRA Q_^1_%AND- ONEBIT+13_#CK FOR PARITY ERROR._^1_%SAN BL4-*-1_^1_%TRQ A_+IF NO,_^1_%AND =N$DF60_%CK FOR OTHER ERRORS€€._^1_%SAN BL3-*-1_^1_%STA* TRYAGN_'NO ERROR, CONTINUE._^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_^1BL3_"JMP* BL1B_)YES, REPEAT OP._^1BL4_"LDA SNUM_)CHECK FOR TEST 4 IN OPERATION_^1_%AND- LPMSK+4_^1_%INA -4_^1_%SAN BL4A-*-1_^1_%JMP* BL1B_)YES, JUST REPEAT XFER._^1BL4A_!LDA* TRYAGN_^1_%EOR- ONEBIT+15_#SET FLAG_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_'CONTINUE TO COMPARE._^1_%JMP* (BLKTRN)_^1OLDL€€SB NUM 0_^1TRYAGN NUM 0_^1RNDNUM ADC 5*5*5*5*5_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_4COMPUTE NEXT SECTOR ADDRESS_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NXTADR 0_"0_^1_%ENQ 0_^1_%LDA* LSB_^1_%LLS 1_,PROPAGATE CARRY_^1_%ADQ* MSB_,AND_^1_%ALS 15_-FORM_^1_%STA€€* LSB_,TRACK_^1_%STQ* MSB_,AND SECTOR_^1_%CLR Q_,COMPUTE MAXIMUM_^1_%ADD* NWORDS_)DISK ADDRESS._^1_%INA -1_^1_%LLS 1_^1_%ADQ* MSB_^1_%ALS 15_^1_%STA* LSBTMP_^1_%TRQ A_^1_%SUB MAXMSB_^1_%SAZ NXT1-*-1_'DISK ADDRESS_^1_%SAP FULL1-*-1_%EXCEEDED._^1_%JMP* (NXTADR)_^1NXT1_!LDA* LSBTMP_^1_%SUB MAXLSB_^1_%SAM NXT2-*-1_^1_%SAN FULL1-*-1_^1NXT2_!JMP* (NXTADR)_^1LSBTMP NUM 0_^1FUL€€L1 LDA LSBSAV_(INITIALIZE DISK_^1_%LDQ MSBSAV_)ADDR IN_^1_%STA* LSB_,CALL_^1_%STQ* MSB_*SEQUENCE._^1_%JMP* (BLKTRN)_^1*CONTROL TO FIRST INSTR. AFTER RTJ BLKTRN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_)SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_**_^1*_]_'*_^1***********************************************************€€*************_^1_%SPC 2_^1T4CK_!LDA BUFF_^1_%AND- ONEBIT+4_$IS TEST4 REQUESTED._^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA- I_^1_%LDA* RF2_^1_%STA* RF14A_^1RF1_"LDA* RF2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_'PATTERNS._^1_%MUI* RNDNUM_^1_%STA* RF2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RF4-*-1_^€€1_%RAO- I_^1_%JMP* RF1_*CONTINUE LOADING BLK._^1RF2_"NUM $21_^1RF6_"NUM $31_^1RF4_"LDA* RF6_^1_%STA* RF11_^1_%LDA* WRITE_^1_%STA* REF3_^1RF5_"LDA* RF6_*GENERATE RANDOM BLK LENGTHS._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF6_^1_%AND- LPMSK+11_0*_^1_%STA* NWORDS_^1_%RTJ BLKTRN_^1_%JMP* RF9_*TO HERE WHEN TST AREA THRU_^1_%LDA LSB_*TO HERE IF NOT_^1_%ADD NWORDS_^1_%STA LSB_^1€€_%JMP* RF5_^1RF11_!NUM $31_^1RF9_"LDA READ_^1_%STA REF3_4*_^1RF10_!LDA* RF11_)RETURN BLKS. TO CORE._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF11_^1_%AND- LPMSK+11_0*_^1_%STA NWORDS_2*_^1_%RTJ BLKTRN_^1_%JMP* T5CK_)TO HERE, AREA COMPL._^1_%LDA LSB_*TO HERE IF NOT._^1_%ADD NWORDS_^1_%STA LSB_^1_%LDA* RF14A_^1_%STA* RF14_^1RF12_!LDA* RF14_)GENERATE ORIGINAL_^1_%AND- LPMSK+1€€5_'RANDOM_^1_%MUI* RNDNUM_)PATTERNS_^1_%STA* RF14_^1_%LRS 1_^1_%LDQ NWORDS_)AND COMPARE WITH CURRENT_^1_%RTJ* COMPAR_)CELL CONTENTS._^1_%JMP* RF10_)TO HERE WHEN COMPARE COMPL._^1_%JMP* RF12_)TO HERE FOR NEXT CELL._^1RF14_!NUM $21_^1RF14A NUM $21_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_.SECTION 5_!ZEROS WRITTEN OVER ONES€€ TEST_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA BUFF_)CK FOR TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAZ T6CK-*-1_^1_%LDA =A 5_)BEGIN TEST 5_^1_%STA SNUM_^1_%RAO PSSCTR_'SET PHASE 1 SWITCH._^1_%SET A_,PATTERN FOR PHASE 1._^1_%RTJ TRKTRN_^1_%CLR A_^1_%STA PSSCTR_'CLEAR PHASE 1 SWITCH-- ALL_^1_%RTJ TRKTRN_'€€PATTERN FOR PHASE 2._^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/SECTION 6_!RANDOM SECTOR ADDRESS TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T6CK_!LDA BUFF_)CK FOR TEST 6 REQUESTED._^1_%AND- ONEBIT+6_^1_%SAN TEST6-*-1_^1_%JMP ENDTST_^1TEST6 LDA =A 6_)BEGIN TES€€T 6._^1_%STA SNUM_^1_%LDQ- LPMSK+11_$$7FF_^1_%LDA WSPAT1_^1T61_"STA BLK2K,Q_%FILL BUFFER WITH WORST_^1_%SQZ T62-*-1_'PATTERN_^1_%INQ -1_^1_%JMP* T61_^1T62_"LDA- ONEBIT+11_#$800_^1_%STA NWORDS_^1T63_"LDA WRITE_(SET BLKTRN FOR WRITE_^1_%STA REF3_^1_%LDA* RNWRKG_'GENERATE RANDOM SECTOR_^1_%AND- LPMSK+15_'ADDRESSES._^1_%MUI RNDNUM_^1_%STA* RNWRKG_^1_%LRS 1_^1_%STA LSB_^1*_81€€1 CARDS DELETED_^1T63A_!RTJ BLKTRN_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1_%LDA READ_)TO HERE, KEEP GOING._^1_%STA REF3_)SET BLKTRN FOR READ._^1_%RTJ BLKTRN_'READ BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1T64_"LDA WSPAT1_'TO HERE, DO COMPARE_^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ* COMPAR_^1_%JMP* T65_*TO HERE, DONE._^1_%JMP* T64_*TO HERE, KEEP COMPARING._^1T65_"RAO* T6CTR_(INCREM€€ENT COUNTER_^1_%LDA* T6CTR_^1_%SUB =N160_(CK FOR 160 RANDOM WRITES_^1_%SAN T66-*-1_^1_%STA* T6CTR_^1_%LDA LSBSAV_'INITIALIZE DISK_^1_%LDQ MSBSAV_'ADDRESS._^1_%STA LSB_^1_%STQ MSB_^1_%JMP ENDTST_'THIS PASS COMPLETE._^1T66_"JMP* TEST6_(KEEP GOING._^1T6CTR NUM 0_^1RNWRKG NUM $41_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*€€_2COMPARE PRE- AND POST XFER BLOCKS_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1COMPAR 0_"0_^1_%STA* ORIG_^1_%INQ -1_^1_%STQ* XWORDS_^1_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAZ CMPAR1_)PRINTOUT_^1_%JMP* (COMPAR)_)DONT PRINT_^1CMPAR1 LDQ* TEMPX_(GET CURRENT COUNTER_^1_%STQ CELERR_^1_%LDA BLK2K,Q_%GET POST-X€€FER CELL CONTNTS_^1_%STA BADCEL_^1_%EOR* ORIG_)CNTNS PRE-XFER CELL._^1_%SAZ CK1-*-1_^1_%RTJ* CMPERR_'GO TO CMPERR ON ERROR._^1CK1_"LDA* TEMPX_^1_%SUB* XWORDS_^1_%SAZ CK2-*-1_%CK FOR END OF BLK._^1_%RAO* TEMPX_^1_%RAO* COMPAR_'TO HERE FOR CONTINUE COMP._^1_%JMP* (COMPAR)_^1CK2_"STA* TEMPX_^1_%LDA* CMP1_^1_%SAZ CK3-*-1_^1_%RTJ* CMP4_^1CK3_"STA* CMP1_^1_%JMP* (COMPAR)_$TO HERE WHE€€N BLK COMPL._^1TEMPX NUM 0_^1XWORDS NUM 0_^1ORIG_!NUM 0_^1*_]_^1CMP4_!0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ* CONVRT_'CONVERT VALUE TO DECIMAL_^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUTPUT NUMBER OF COMPARE ERRORS_^1MES4_!NUM $0244_^1_%ADC (START-MES4)_^1_%NUM 3_^1_%ADC MSG8B-MES4_^1_%€€ADC MSG8E-MSG8B_^1CMP4A LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CMP2-*-1_^1_%JMP ENDMSG_^1CMP2_!JMP* (CMP4)_^1*_]_^1CMP1_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_,SECTOR ADDRESS TO FILE ADDRESS CONVERSION_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2€€_^1SECFIL 0_"0_^1_%CLR Q_^1_%STQ* FIXFLG_'CLEAR FIXED DISK FLAG_^1_%INA 4_,ACCOUNT FOR SYSTEM BIAS_^1_%STA* TEMSEC_^1_%LDQ TYPE_)CHECK IF_^1_%SUB* SZD1,Q_(SECTOR ON_^1_%SAP SF1_,FIXED DISK_^1_%SQZ SFB_*1739-DISK 0_^1_%LDA* LSA_*856-DISK 0, MODIFY THE 'ALS'_^1_%STA* SHIFT_^1_%JMP* SFB_*NO_^1SF1_"STA* TEMSEC_'YES - SAVE FIXED DISK SECTOR_^1_%ENA $40_*1739 FIXED DISK FLAG_^1_%SQ€€Z SFA_*CHECK IF DEVICE IS A 1739_^1_%LDA* LSA_*NO - MODIFY SHIFT INSTRUCTION_^1_%STA* SHIFT_)IN SECTOR-TO-FILE CALCULATION_^1_%ENA $20_*856 FIXED DISK FLAG_^1SFA_"STA* FIXFLG_^1SFB_"LDA* TEMSEC_'GET SECTOR NUMBER_^1_%CLR Q_^1_%DVI =N29_)NUMBER OF SECTORS/TRACK_^1_%ADQ* FIXFLG_^1SHIFT ALS 7_,SHIFT TRACK + CYLINDER TO TOP OF A REG_^1_%AAQ A_^1_%CLR Q_^1_%JMP* (SECFIL)_$RETURN€€_^1_%SPC 2_^1TEMSEC NUM 0_^1FIXFLG NUM 0_^1SZD1_!NUM $2DFD_(1739-1_^1_%NUM $2DFD_(856-2_^1_%NUM $5BFB_(856-4_^1LSA_"NUM $FC6_)SHIFT INSTRUCTION FOR 856_^1_%SPC 5_^1*_]_^1*_8COMMON ENTRY TO CONVERT MSG. PARAMETERS TO DEC_^1*_]_^1CONVRT NUM 0_^1_%TRA Q_,SAVE A REQ_^1_%SUB =N$27DF_%CHECK IF VALUE GT 9999_^1_%SAP GOWAY_(YES - GO OUTPUT IT AS A HEX VALUE_^1_%TRQ A_^1_%RTJ €€(ROCDEC)_$CONVERT_^1_%NUM 0_-VALUE TO_^1_%NUM 0_.DECIMAL_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%SPC 5_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_€€%RAO* CMP1_^1_%LDA* CMP1_)CK FOR THREE COMPARISON_^1_%INA -4_-ERRORS IN CURRENT BLOCK._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1_%ADD* CELERR_)COMPARISON ERROR._^1_%CLR Q_^1_%LLS 1_^1_%ADQ MSB_^1_%LRS 1_^1_%DVI =N96_^1_%LLS 16_^1_%STQ* TEMSEC_'SAVE SECTOR VALUE_^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%TRQ A_^1_%LDA* TEMSEC_€€^1_%RTJ (RHXASC)_%CONVERT IT TO ASCII_^1_%ADC (SEC-*)_(FOR MESSAGE_^1_%LDA* TEMSEC_(CONVERT IT_^1_%RTJ* SECFIL_)TO A FILE_^1_%RTJ (RHXASC)_(ADDRESS IN MESSAGE_^1_%ADC (LOC-*)_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%ADC (ORIGWD-*)_^1_%LDA* BADCEL_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP3A_^1_%RTJ (MESAGE)_$OUTPUT DATA COMPARE ERROR MSG_^1MES5_!NUM $0344_€€^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1CMP3A JMP* (CMPERR)_^1CELERR NUM 0_^1BADCEL NUM 0_^1_%SPC 2_^1INIMSG 0_"0_^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* CONVRT_'CONVERT VALUE TO DECIMAL_^1_%RTJ (RHXASC)_^1_%ADC €€(NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^1COUNT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1CHECK FOR HARDWARE STATUS ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_+BEGIN STATUS CHECK._^1_%RTJ* INIMSG_'CHECK FOR NO ERROR PRINTOUT_^1_%JMP* EST5_*DONT PRI€€NT_^1_%LDQ PHYPTR_^1_%LDA- ESTAT2,Q_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* STATUS_'ESTAT2 SAVED._^1_%CLR Q_^1_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST2-*-1_$CK FOR END OF TAB_^1_%JMP* (ESTAT)_^1EST2_!LDA* STATUS_^1_%AND- ONEBIT,Q_^1_%SAN EST3-*-1_$CK IF ERROR BIT SET_^1_%JMP* EST5_^1EST3_!RAO* COUNT_^1_%LDQ* BITPTR_^1_%QLS 1_,MUI BY 2_^1_%LDA* €€MSGTAB,Q_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF3_)DETERMINE DIRECTION OF TRANSFER_^1_%AND- ONEBIT+10_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES6_^1_%SAN EST4-*-1_^1_%LDQ =XMSG18B-MES6_^1EST4_!STQ* DTNPTR_^1_%LDQ MSB_*DETERMINE SECTOR ADDRESS AT BEGINNING OF XFER_^1_%LDA OLDLSB_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%STA TEMSEC_^1_%RTJ (RHXASC)_^1_€€%ADC (SEC-*)_^1_%LDA TEMSEC_^1_%RTJ SECFIL_'CONVERT SECTOR TO FILE ADDRESS_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES6_!NUM $0544_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC 0_^1_%ADC 0_^1DTNPTR ADC 0_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG7B-MES6_^1_%ADC MSG7E-MSG7B_^1EST5_!RAO* BITPTR_^1_%JM€€P* EST1_^1*_]_^1BITPTR NUM 0_^1STATUS NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BITTAB NUM 0_,DISK NOT READY_^1_%NUM 6_,NO COMPARE ERROR_^1_%NUM 8_,CHECKWORD ERROR_^1_%NUM 9_,LOST DA€€TA_^1_%NUM 10_+ADDRESS ERROR_^1_%NUM 11_+CONTROLLER SEEK ERROR_^1_%NUM 13_+PARITY ERROR_^1_%NUM 14_+PROTECT ERROR_^1_%NUM 15_+DRIVE SEEK ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1**********************************************************************€€**_^1_%SPC 2_^1MSGTAB ADC MSG9B-MES6_^1_%ADC MSG9E-MSG8B_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES6_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES6_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES6_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG16B-MES6_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES6_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG15B-M€€ES6_^1_%ADC MSG15E-MSG15B_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA BUFF+3_'TEST FOR INFINITE REPEATS_^1_%SAZ€€ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_^1MES7_!NUM $8144_^1_%ADC MSG4B-MES7_^1_%ADC MSG4E-MSG4B_^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*_4MESSAGE BUFFERS_A*_^1*_]_'*_^1****************************************************€€********************_^1_%SPC 2_^1MSG1B ALF 9,BEGIN CDD 1 TEST_^1_%NUM $D00_^1_%ALF 16,BEWARE OF SCRATCH CONFLICT. $C1=_^1C1CON NUM 0,0,$D00_^1_%ALF $,LU,SECTIONS,BEG SEC,END SEC,RUNS$_^1_%EQU MSG1E(*)_^1MSG2B ALF 5, LU ERROR_^1_%EQU MSG2E(*)_^1MSG3B ALF 6, SEC ADR ERR_^1_%EQU MSG3E(*)_^1MSG4B ALF 9,END CDD 1 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM €€ 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG4E(*)_^1MSG5B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1MSG7B ALF 5,H/W ADDR._^1LOC_"NUM 0,0_^1_%ALF $, SECTOR $_^1SEC_"NUM 0,0_^1_%EQU MSG7E(*)_^1_%NUM $D00_^1_%ALF 3,WORD_^1CELADD NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG€€6E(*)_^1MSG8B ALF 8, COMP ERR TOTAL_^1CMP5_!NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 5, NOT READY_^1_%EQU MSG9E(*)_^1MSG10B ALF 4, NO COMP_^1_%EQU MSG10E(*)_^1MSG11B ALF 6, CHKWRD ERR_^1_%EQU MSG11E(*)_^1MSG12B ALF *, LOST DATA *_^1_%EQU MSG12E(*)_^1MSG13B ALF 7, ADDRESS ERROR_^1_%EQU MSG13E(*)_^1MSG14B ALF 12, CONTROLLER SEEK ERROR_^1_%EQU MSG14E(*)_^1MSG15B ALF 9, D€€RIVE SEEK ERROR_^1_%EQU MSG15E(*)_^1MSG16B ALF *, PARITY *_^1_%EQU MSG16E(*)_^1MSG17B ALF 6, PROTECT ERR_^1_%EQU MSG17E(*)_^1MSG18B ALF 5, D-C XFER_^1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:DISK I/O BUFFER_;*_^1*_]_'*_^1*******************************************************€`*****************_^1_%SPC 2_^1BLK2K BZS BLK2K(2048)_^1_%SPC 2_^1_%EQU END(*)_^1_%END_]_^__ `PSCMCD2 CSY/ A75 P€1_%NAM SCMCD2_'DECK-ID A75 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1739-1 CARTRIAGE DISK DRIVE AND CONTROLLER TEST ROUTINE_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^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*_$SCMCD2 IS A DIAGNOSTIC EXERCISER FOR THE 1739-1 CDD_^1*_$SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE MSOS DRIVERS FOR ALL_^1*_$COMMUNICA€€TION WITH THE DISK SUBSYSTEM. BEFORE TEST EXECU-_^1*_$TION IS STARTED, THE USER IS REQUESTED TO INPUT THE TEST_^1*_$PARAMETERS -- LOGICAL UNIT, TEST SECTIONS TO BE EXECUTED,_^1*_$BEGINNING SECTOR ADDRESS, ENDING SECTOR ADDRESS AND THE_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED. EACH_^1*_$PARAMETER IS CHECKED FOR ITS VALIDITY. IF ANY PARAMETER IS_^1*_$INVALID THE USER €€IS REQUESTED TO RE-ENTER THE TEST PARAME-_^1*_$TERS. IF THE SYSTEM DISK IS BEING TESTED, THE USER IS NOT_^1*_$ALLOWED TO SPECIFY A DISK ADDRESS WITHIN IN THE SYSTEM_^1*_$AREA. SCMCD2 IS DIVIDED INTO SIX SECTIONS (TESTS) AS FOLLOWS_^1*_*SECTION 1_!WORST CASE PATTERN TEST_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH T€€EST_^1*_*SECTION 5_!ZEROS WRITTEN OVER ONES TEST_^1*_*SECTION 6_!RANDOM SECTOR ADDRESS TEST_^1*_$SECTIONS 1, 2, 3, 5 AND 6 TRANSFER BLOCKS OF 2048 WORDS_^1*_$DECIMAL. ALL RANDOM NUMBERS ARE PSEUDO RANDOM NUMBERS. AT_^1*_$THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$HARDWARE ERRORS EXCEPT DATA ERRORS. IF A HARDWARE ERROR_^1*_$OCCURRED, THE I/O REQUEST IS REPEATED TWI€€CE. AFTER ALL WRITE_^1*_$OPERATIONS ARE COMPLETE IN A GIVEN TEST SECTION, THE DISK_^1*_$IS THEN READ AND DATA COMPARED AGAINST WHAT WAS WRITTEN._^1*_$AT THE END OF EACH TEST SEQUENCE, THE PASS COUNTER IS UPDATED_^1*_$AND COMPARED AGAINST THE NUMBER OF TIMES REQUESTED BY THE_^1*_$USER. IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS_^1*_$ALSO CHECKED AND IF SET THE TEST IS TERMIN€€ATED. IF $8000_^1*_$IS ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE_^1*_$WILL BE EXECUTED INDEFINITELY._^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCAT€€ION_^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 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 M7FFF($42)_^1_%EQU M80($2A)_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE._^1_%EXT COMPV4_^1*_]_^1_%EQU SYSDSK($C2)_!LOCATION OF L.U. FOR SYSTEM DISK_^1_%EQU MAXSEC($C1)_!LOCATION OF HIGHEST SEC ADD USED BY SYSTEM_^1_%EQU TSTCD2(*)_#ENTRY POINT FOR RCOS_^1_%EN€€T TSTCD2_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATION REGION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTCD2_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION W€€ORD 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_^1_%LDA- $C1_^1_%RTJ* (RHXASC)_^1_%ADC (C1CON-*)_^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--END TEST_^1FLDOK1 INQ -1_^1_%STA LU,Q_^1_%INQ -4_^1_%SQZ INI2-*-1_^1_%JMP* IN€€I1_^1INI2_!LDA BUFF+3_'CONVERT NUMBER OF RUNS_^1_%SAM INI3_)SKIP CONVERSION IF CONTINUOUS_^1_%RTJ* (RDECHX)_%OF RUNS_^1INI3_!STA* BUFF+3_^1_%LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA DSKLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%CK IF LU IS LEGAL_^1_%STQ* PHYPTR_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$1070_%1739-1_'($1070)_#TYPE= 0_^1_%SAZ INI3B_^1_%SUB- M80_*1733-2/856-€€2 ($10F0)_#TYPE= 1_^1_%SAZ INI3A_^1_%INA -$10_7($1100)_#TYPE= 2_^1_%SAN INI4_)ERROR - ILLEGAL DEVICE_^1_%INA 1_,856-4_^1INI3A INA 1_,856-2_^1INI3B STA* TYPE_)1739_^1_%JMP* INI5_^1INI4_!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_^1_%INA -3_^1_%SAZ 1_^1_%JMP* €€ENTER1_^1_%JMP ENDMSG_^1INI5_!LDQ* TYPE_)GET DEVICE TYPE_^1_%LDQ* TOTSEC,Q_#CHECK IF_^1_%LDA* BUFF+2_'OPERATOR_^1_%RTJ+ COMPV4_)EXCEEDED_^1_%SAM INI6_^1_%JMP* INI7_^1INI6_!LDA* BUFF+1_'CHECK STARTING SECTOR_^1_%LDQ* BUFF+2_'LESS THAN ENDING SECTOR_^1_%RTJ+ COMPV4_^1_%SAM INI8_^1INI7_!RTJ* (MESAGE)_$SECTOR ADDRESS ERROR_^1MES3_!NUM $8244_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%AD€€C MSG3B-MES3_^1_%ADC MSG3E-MSG3B_^1_%JMP* ENTER1_^1INI8_!LDA DSKLU_(CK IF SYSTEM DISK_^1_%SUB- SYSDSK_^1_%SAN INI9-*-1_^1_%LDA- MAXSEC_'CHECK IF_^1_%LDQ* BUFF+1_(ATTEMPTING TO_^1_%RTJ+ COMPV4_)TEST IN_^1_%SAZ INI9_,SYSTEM AREA_^1_%SAM INI9_^1_%JMP* INI7_^1INI9_!LDQ* TYPE_)GET DEVICE TYPE_^1_%LDA* BUFF+1_'GET BEGINNING SECTOR NUMBER_^1_%SQZ INI9C_(IS DEVICE A 1739-1_^1_%SAP €€INI9C_)NO CHECK IF SECTOR IS POSITIVE_^1_%SUB- M7FFF_(NO - SUBTRACT HIGHEST POS. VALUE_^1_%CLR Q_-CALCULATE NUMBER OF_^1_%MUI* N96_,WORDS GREATER THAN $7FFF_^1_%LLS 1_,GENERATE LSB AND_^1_%ALS 15_,MSB VALUES THEN_^1_%ADD MLSB_+ADD IN KNOWN LSB_^1_%ADQ MMSB_,AND MSB FOR $7FFF_^1_%SAP INI9B_(CHECK FOR LSB OVERFLOW_^1_%INQ 1_-YES - CORRECT MSB_^1_%AND- M7FFF_*AND LSB VALUES_^1I€€NI9B JMP* INI9D_^1INI9C MUI* N96_^1_%LLS 1_^1_%ALS 15_^1INI9D STA LSB_*SAVE DISK WORD ADDRESS_^1_%STA* LSBSAV_^1_%STQ MSB_^1_%STQ* MSBSAV_^1_%LDQ* TYPE_)CONVERT ENDING SECTOR NUMBER_^1_%LDA* BUFF+2_^1_%SQZ INI9F_^1_%SAP INI9F_^1_%SUB- M7FFF_^1_%CLR Q_^1_%MUI* N96_^1_%LLS 1_^1_%ALS 15_^1_%ADD MLSB_^1_%ADQ MMSB_^1_%SAP INI9E_^1_%INQ 1_^1_%AND- M7FFF_^1INI9E JMP* INI9€€G_^1INI9F MUI* N96_^1_%LLS 1_^1_%ALS 15_^1INI9G STA* MAXLSB_'SAVE DISK WORD ADDRESS_^1_%STQ* MAXMSB_^1_%CLR A_^1_%STA CMP1_^1_%STA COUNT_^1_%STA PASSES_^1_%STA* PSSCTR_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1BUFF_!NUM 0,0,0,0_^1PHYPTR NUM 0_^1N96_"NUM 96_^1INPERR NUM 0_^1TYPE_!NUM 0_,=0 IF 1739 =1 IF 856-2_!=2 IF 856-4_^1TOTSEC NUM $5BFD_(MAX S€€ECTORS FOR_!1739-1_^1_%NUM $5BFD_:1733-2/856-2_^1_%NUM $B8DD_:1733-2/856-4_^1MLSB_!NUM $7FA0_^1MMSB_!NUM $5F_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!WORST CASE PATTERN TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* BUFF_)DETERMINE TEST SEQ-€€-_^1_%AND- ONEBIT+1_$IS TEST1 REQUESTED..._^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 LDA =N$2031_%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* TRKTRN_'EXECUTE XFERS AND CKS._^1_%LDA* COUNT1_^1_%INA -3_+CHK FOR LAST WORST PATTERN._^1_%SAZ T2CK-*-1_^1_%RAO* COUNT1_^1_%JMP* WP1_^1COUNT1 NUM 0_^1WSPA€€T1 NUM $9555_(WORST PATTERNS..._^1_%NUM $6AAA_^1_%NUM $5A5A_^1_%NUM $A5A5_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5SECTION 2_!ALL ONES TEST_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* BUFF_^1_%AND- ONEBIT+2_$IS TEST2 REQUESTED..._^1_%SAN TEST2-*-1_^1_%J€€MP* T3CK_^1TEST2 LDA =N$2032_%BEGIN TEST 2_^1_%STA SNUM_^1_%SET A_^1_%RTJ* TRKTRN_^1_%JMP* T3CK_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2LOAD, XFER, AND CHECK 2048 WORDS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TRKTRN 0_"0_^1_%STA* PATTRN_^1_%LDQ- ONEBIT+11_#$800€€_^1_%STQ* NWORDS_^1TT1_"LDA* PATTRN_'GET PATTERN._^1_%LDQ- LPMSK+11_$$7FF_^1TT2_"STA BLK2K,Q_/LOAD BUFFER._^1_%SQZ TT3-*-1_^1_%INQ -1_^1_%JMP* TT2_^1TT3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1_%RTJ* BLKTRN_^1_%JMP* TT4_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE FOR NEXT TRACK._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* TT1_^1TT4_"LDA* PSSCTR_'CK FOR SECOND PHASE._^1_%SAZ €€TT4A-*-1_^1_%RAO* PSSCTR_'PHASE 1_^1_%LDA* PSSCTR_^1_%INA -11_*TEST FOR 10 PASSES._^1_%SAZ TT4A-*-1_^1_%JMP* TT1_^1TT4A_!LDA* READ_)RESET BLKTRN._^1_%STA* REF3_^1TT5_"RTJ* BLKTRN_^1_%JMP* (TRKTRN)_^1_%LDA* LSB_^1_%ADD* NWORDS_^1_%STA* LSB_^1TT6_"LDA* PATTRN_'GET ORIGINAL PATTERN._^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ COMPAR_^1_%JMP* TT5_*TO HERE WHEN TRK COMP THRU_^1_%JMP* TT6_*TO HE€€RE FOR NEXT CELL CK._^1*_]_^1PATTRN NUM 0_^1PSSCTR NUM 0_^1MAXMSB NUM 0_^1MAXLSB NUM 0_^1MSBSAV NUM 0_^1LSBSAV NUM 0_^1************************************************************************_^1*_]_'*_^1*_4SECTION 3_!RANDOM DATA TEST_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* BUFF_^1_%AND- ONEBIT+3_$IS TEST3 €€REQUESTED..._^1_%SAN TEST3-*-1_^1_%JMP T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA SNUM_^1_%LDQ- ONEBIT+11_#SET WORD 4 OF CALL SEQ._^1_%STQ* NWORDS_2*_^1_%CLR A_^1_%STA- I_^1_%LDA* RN2_^1_%STA* RN9_^1RN1_"LDA* RN2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_0*_^1_%MUI* RNDNUM_'PATTERNS_!*_^1_%STA* RN2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RN3-*-1_^1_€€%RAO- I_^1_%JMP* RN1_*CONTINUE LOADING BLK._^1RN2_"NUM $21_^1RN3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1RN4_"RTJ* BLKTRN_^1_%JMP* RN5_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE WHEN TRK IS XFERRED_^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* RN4_^1RN5_"LDA* READ_^1_%STA* REF3_^1RN6_"RTJ* BLKTRN_^1_%JMP* RN10_)TO HERE IF TEST AREA COMPLETE_^1_%LDA* LSB_*TO HERE IF NOT._^1_%ADD*€€ NWORDS_^1_%STA* LSB_^1_%LDA* RN9_^1_%STA* RN8_^1RN7_"LDA* RN8_*REGENERATE ORIGINAL SEQ._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_)OF RANDOM BIT PATTERNS._^1_%STA* RN8_^1_%LRS 1_^1_%LDQ- ONEBIT+11_^1_%RTJ COMPAR_^1_%JMP* RN6_*TO HERE WHEN BLK COMP THRU_^1_%JMP* RN7_*TO HERE FOR NEXT CELL CK._^1RN8_"NUM $21_^1RN9_"NUM 0_^1RN10_!JMP* T4CK_^1_%SPC 2_^1***********************************€€*************************************_^1*_]_'*_^1*_/TRANSFER BLOCKS BETWEEN DISK AND CORE_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLKTRN 0_"0_^1_%LDA* TRYAGN_'CK FOR PREVIOUS PARITY ERROR._^1_%SAP BL1A-*-1_'ERROR FLAG SET._^1_%LDA* OLDLSB_^1_%STA* LSB_^1_%JMP* BL1B_)REPEAT OPERATION_^1BL1A_!RTJ* NXTADR_^1BL1B_!LDA* REF3_^€€1_%SUB* READ_)CHECK FOR DOING READ NOW_^1_%SAN GOGO_^1_%LDQ =N2047_'IF IT IS A READ - ZERO THE BUFFER FIRST_^1LOPER STA BLK2K,Q_^1_%SQZ GOGO_)END OF BUFFER YET_^1_%INQ -1_+NO- GO AROUND AGAIN_^1_%JMP* LOPER_^1GOGO_!RTJ- (AMONI)_%CONSTRUCT MONITOR CALL_^1REF3_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP5-REF3_$TO TRANSFER BLOCK_^1_%ADC 0_.OF INFORMATION TO_^1DSKLU NUM 8_.DISK._€€^1NWORDS NUM 0_7*_^1_%ADC BLK2K-REF3_.*_^1MSB_"NUM 0_7*_^1LSB_"NUM 0_7*_^1_%JMP- (ADISP)_%GO TO DISPATCHER._^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_^1COMP5 CLR A_^1_%STA CELERR_^1_%LDA* LSB_*SAVE DISK XFER ADDRESS._^1_%STA* OLDLSB_^1_%SQP COMP5A-*-1_^1_%RTJ ESTAT_(CK STATUS BITS._^1COMP5A LDA FLAG_)CHECK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ €€COMP5B-*-1_^1_%JMP ENDMSG_^1COMP5B RAO* TRYAGN_^1_%LDA* TRYAGN_^1_%AND- ONEBIT+1_$CK FOR REPEAT._^1_%SAZ BL2-*-1_^1_%CLR A_,YES, CONTINUE TEST_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_$RETURNS TO 2ND WD AFTER RTJ_^1BL2_"LDA STATUS_'NO REPEAT._^1_%TRA Q_^1_%AND- ONEBIT+13_#CK FOR PARITY ERROR._^1_%SAN BL4-*-1_^1_%TRQ A_+IF NO,_^1_%AND =N$DF60_%CK FOR OTHER ERRORS._^€€1_%SAN BL3-*-1_^1_%STA* TRYAGN_'NO ERROR, CONTINUE._^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_^1BL3_"JMP* BL1B_)YES, REPEAT OP._^1BL4_"LDA SNUM_)CHECK FOR TEST 4 IN OPERATION_^1_%AND- LPMSK+4_^1_%INA -4_^1_%SAN BL4A-*-1_^1_%JMP* BL1B_)YES, JUST REPEAT XFER._^1BL4A_!LDA* TRYAGN_^1_%EOR- ONEBIT+15_#SET FLAG_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_'CONTINUE TO COMPARE._^1_%JMP* (BLKTRN)_^1OLDLSB €€NUM 0_^1TRYAGN NUM 0_^1RNDNUM ADC 5*5*5*5*5_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_4COMPUTE NEXT SECTOR ADDRESS_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NXTADR 0_"0_^1_%ENQ 0_^1_%LDA* LSB_^1_%LLS 1_,PROPAGATE CARRY_^1_%ADQ* MSB_,AND_^1_%ALS 15_-FORM_^1_%STA* L€€SB_,TRACK_^1_%STQ* MSB_,AND SECTOR_^1_%CLR Q_,COMPUTE MAXIMUM_^1_%ADD* NWORDS_)DISK ADDRESS._^1_%INA -1_^1_%LLS 1_^1_%ADQ* MSB_^1_%ALS 15_^1_%STA* LSBTMP_^1_%TRQ A_^1_%SUB MAXMSB_^1_%SAZ NXT1-*-1_'DISK ADDRESS_^1_%SAP FULL1-*-1_%EXCEEDED._^1_%JMP* (NXTADR)_^1NXT1_!LDA* LSBTMP_^1_%SUB MAXLSB_^1_%SAM NXT2-*-1_^1_%SAN FULL1-*-1_^1NXT2_!JMP* (NXTADR)_^1LSBTMP NUM 0_^1FULL1 €€ LDA LSBSAV_(INITIALIZE DISK_^1_%LDQ MSBSAV_)ADDR IN_^1_%STA* LSB_,CALL_^1_%STQ* MSB_*SEQUENCE._^1_%JMP* (BLKTRN)_^1*CONTROL TO FIRST INSTR. AFTER RTJ BLKTRN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_)SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_**_^1*_]_'*_^1**************************************************************€€**********_^1_%SPC 2_^1T4CK_!LDA BUFF_^1_%AND- ONEBIT+4_$IS TEST4 REQUESTED._^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA- I_^1_%LDA* RF2_^1_%STA* RF14A_^1RF1_"LDA* RF2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_'PATTERNS._^1_%MUI* RNDNUM_^1_%STA* RF2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RF4-*-1_^1_%€€RAO- I_^1_%JMP* RF1_*CONTINUE LOADING BLK._^1RF2_"NUM $21_^1RF6_"NUM $31_^1RF4_"LDA* RF6_^1_%STA* RF11_^1_%LDA* WRITE_^1_%STA* REF3_^1RF5_"LDA* RF6_*GENERATE RANDOM BLK LENGTHS._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF6_^1_%AND- LPMSK+11_0*_^1_%STA* NWORDS_^1_%RTJ BLKTRN_^1_%JMP* RF9_*TO HERE WHEN TST AREA THRU_^1_%LDA LSB_*TO HERE IF NOT_^1_%ADD NWORDS_^1_%STA LSB_^1_%J€€MP* RF5_^1RF11_!NUM $31_^1RF9_"LDA READ_^1_%STA REF3_4*_^1RF10_!LDA* RF11_)RETURN BLKS. TO CORE._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF11_^1_%AND- LPMSK+11_0*_^1_%STA NWORDS_2*_^1_%RTJ BLKTRN_^1_%JMP* T5CK_)TO HERE, AREA COMPL._^1_%LDA LSB_*TO HERE IF NOT._^1_%ADD NWORDS_^1_%STA LSB_^1_%LDA* RF14A_^1_%STA* RF14_^1RF12_!LDA* RF14_)GENERATE ORIGINAL_^1_%AND- LPMSK+15_'€€RANDOM_^1_%MUI* RNDNUM_)PATTERNS_^1_%STA* RF14_^1_%LRS 1_^1_%LDQ NWORDS_)AND COMPARE WITH CURRENT_^1_%RTJ* COMPAR_)CELL CONTENTS._^1_%JMP* RF10_)TO HERE WHEN COMPARE COMPL._^1_%JMP* RF12_)TO HERE FOR NEXT CELL._^1RF14_!NUM $21_^1RF14A NUM $21_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_.SECTION 5_!ZEROS WRITTEN OVER ONES TE€€ST_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA BUFF_)CK FOR TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAZ T6CK-*-1_^1_%LDA =A 5_)BEGIN TEST 5_^1_%STA SNUM_^1_%RAO PSSCTR_'SET PHASE 1 SWITCH._^1_%SET A_,PATTERN FOR PHASE 1._^1_%RTJ TRKTRN_^1_%CLR A_^1_%STA PSSCTR_'CLEAR PHASE 1 SWITCH-- ALL_^1_%RTJ TRKTRN_'PAT€€TERN FOR PHASE 2._^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/SECTION 6_!RANDOM SECTOR ADDRESS TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T6CK_!LDA BUFF_)CK FOR TEST 6 REQUESTED._^1_%AND- ONEBIT+6_^1_%SAN TEST6-*-1_^1_%JMP ENDTST_^1TEST6 LDA =A 6_)BEGIN TEST 6€€._^1_%STA SNUM_^1_%LDQ- LPMSK+11_$$7FF_^1_%LDA WSPAT1_^1T61_"STA BLK2K,Q_%FILL BUFFER WITH WORST_^1_%SQZ T62-*-1_'PATTERN_^1_%INQ -1_^1_%JMP* T61_^1T62_"LDA- ONEBIT+11_#$800_^1_%STA NWORDS_^1T63_"LDA WRITE_(SET BLKTRN FOR WRITE_^1_%STA REF3_^1_%LDA* RNWRKG_'GENERATE RANDOM SECTOR_^1_%AND- LPMSK+15_'ADDRESSES._^1_%MUI RNDNUM_^1_%STA* RNWRKG_^1_%LRS 1_^1_%STA LSB_^1*_811 C€€ARDS DELETED_^1T63A_!RTJ BLKTRN_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1_%LDA READ_)TO HERE, KEEP GOING._^1_%STA REF3_)SET BLKTRN FOR READ._^1_%RTJ BLKTRN_'READ BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1T64_"LDA WSPAT1_'TO HERE, DO COMPARE_^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ* COMPAR_^1_%JMP* T65_*TO HERE, DONE._^1_%JMP* T64_*TO HERE, KEEP COMPARING._^1T65_"RAO* T6CTR_(INCREMENT€€ COUNTER_^1_%LDA* T6CTR_^1_%SUB =N160_(CK FOR 160 RANDOM WRITES_^1_%SAN T66-*-1_^1_%STA* T6CTR_^1_%LDA LSBSAV_'INITIALIZE DISK_^1_%LDQ MSBSAV_'ADDRESS._^1_%STA LSB_^1_%STQ MSB_^1_%JMP ENDTST_'THIS PASS COMPLETE._^1T66_"JMP* TEST6_(KEEP GOING._^1T6CTR NUM 0_^1RNWRKG NUM $41_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2C€€OMPARE PRE- AND POST XFER BLOCKS_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1COMPAR 0_"0_^1_%STA* ORIG_^1_%INQ -1_^1_%STQ* XWORDS_^1_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAZ CMPAR1_)PRINTOUT_^1_%JMP* (COMPAR)_^1CMPAR1 LDQ* TEMPX_(GET CURRENT COUNTER_^1_%STQ CELERR_^1_%LDA BLK2K,Q_%GET POST-XFER CELL CONTNT€€S_^1_%STA BADCEL_^1_%EOR* ORIG_)CNTNS PRE-XFER CELL._^1_%SAZ CK1-*-1_^1_%RTJ* CMPERR_'GO TO CMPERR ON ERROR._^1CK1_"LDA* TEMPX_^1_%SUB* XWORDS_^1_%SAZ CK2-*-1_%CK FOR END OF BLK._^1_%RAO* TEMPX_^1_%RAO* COMPAR_'TO HERE FOR CONTINUE COMP._^1_%JMP* (COMPAR)_^1CK2_"STA* TEMPX_^1_%LDA* CMP1_^1_%SAZ CK3-*-1_^1_%RTJ* CMP4_^1CK3_"STA* CMP1_^1_%JMP* (COMPAR)_$TO HERE WHEN BLK COMPL._^€€1TEMPX NUM 0_^1XWORDS NUM 0_^1ORIG_!NUM 0_^1*_]_^1CMP4_!0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ* CONVRT_'CONVERT VALUE TO DECIMAL_^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUTPUT NUMBER OF COMPARE ERRORS_^1MES4_!NUM $0244_^1_%ADC (START-MES4)_^1_%NUM 3_^1_%ADC MSG8B-MES4_^1_%ADC MSG8E-MSG8€€B_^1CMP4A LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CMP2-*-1_^1_%JMP ENDMSG_^1CMP2_!JMP* (CMP4)_^1*_]_^1CMP1_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_,SECTOR ADDRESS TO FILE ADDRESS CONVERSION_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1SECFIL 0_"0_€€^1_%CLR Q_^1_%STQ* FIXFLG_'CLEAR FIXED DISK FLAG_^1_%INA 4_,ACCOUNT FOR SYSTEM BIAS_^1_%STA* TEMSEC_^1_%LDQ TYPE_)CHECK IF_^1_%SUB* SZD1,Q_(SECTOR ON_^1_%SAP SF1_,FIXED DISK_^1_%SQZ SFB_*1739-DISK 0_^1_%LDA* LSA_*856-DISK 0, MODIFY THE 'ALS'_^1_%STA* SHIFT_^1_%JMP* SFB_*NO_^1SF1_"STA* TEMSEC_'YES - SAVE FIXED DISK SECTOR_^1_%ENA $40_*1739 FIXED DISK FLAG_^1_%SQZ SFA_*CHECK I€€F DEVICE IS A 1739_^1_%LDA* LSA_*NO - MODIFY SHIFT INSTRUCTION_^1_%STA* SHIFT_)IN SECTOR-TO-FILE CALCULATION_^1_%ENA $20_*856 FIXED DISK FLAG_^1SFA_"STA* FIXFLG_^1SFB_"LDA* TEMSEC_'GET SECTOR NUMBER_^1_%CLR Q_^1_%DVI =N29_)NUMBER OF SECTORS/TRACK_^1_%ADQ* FIXFLG_^1SHIFT ALS 7_,SHIFT TRACK + CYLINDER TO TOP OF A REG_^1_%AAQ A_^1_%CLR Q_^1_%JMP* (SECFIL)_$RETURN_^1_%SPC 2_^1T€€EMSEC NUM 0_^1FIXFLG NUM 0_^1SZD1_!NUM $2DFD_(1739-1_^1_%NUM $2DFD_(856-2_^1_%NUM $5BFB_(856-4_^1LSA_"NUM $FC6_)SHIFT INSTRUCTION FOR 856_^1_%SPC 5_^1*_]_^1*_8COMMON ENTRY TO CONVERT MSG. PARAMETERS TO DEC_^1*_]_^1CONVRT NUM 0_^1_%TRA Q_,SAVE A REQ_^1_%SUB =N$27DF_%CHECK IF VALUE GT 9999_^1_%SAP GOWAY_(YES - GO OUTPUT IT AS A HEX VALUE_^1_%TRQ A_^1_%RTJ (ROCDEC)_$CONVE€€RT_^1_%NUM 0_-VALUE TO_^1_%NUM 0_.DECIMAL_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%SPC 5_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%RAO* CMP1_^1_%€€LDA* CMP1_)CK FOR THREE COMPARISON_^1_%INA -4_-ERRORS IN CURRENT BLOCK._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1_%ADD* CELERR_)COMPARISON ERROR._^1_%CLR Q_^1_%LLS 1_^1_%ADQ MSB_^1_%LRS 1_^1_%DVI =N96_^1_%LLS 16_^1_%STQ* TEMSEC_'SAVE SECTOR VALUE_^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%TRQ A_^1_%LDA* TEMSEC_^1_%RTJ (RHXAS€€C)_%CONVERT IT TO ASCII_^1_%ADC (SEC-*)_(FOR MESSAGE_^1_%LDA* TEMSEC_(CONVERT IT_^1_%RTJ* SECFIL_)TO A FILE_^1_%RTJ (RHXASC)_(ADDRESS IN MESSAGE_^1_%ADC (LOC-*)_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%ADC (ORIGWD-*)_^1_%LDA* BADCEL_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP3A_^1_%RTJ (MESAGE)_$OUTPUT DATA COMPARE ERROR MSG_^1MES5_!NUM $0344_^1_%ADC (START€€-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1CMP3A JMP* (CMPERR)_^1CELERR NUM 0_^1BADCEL NUM 0_^1_%SPC 2_^1INIMSG 0_"0_^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* CONVRT_'CONVERT VALUE TO DECIMAL_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1IN€€IMS1 JMP* (INIMSG)_^1COUNT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1CHECK FOR HARDWARE STATUS ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_+BEGIN STATUS CHECK._^1_%RTJ* INIMSG_'CHECK FOR NO ERROR PRINTOUT_^1_%JMP* EST5_*DONT PRINT_^1_%LDQ PHY€€PTR_^1_%LDA- ESTAT2,Q_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* STATUS_'ESTAT2 SAVED._^1_%CLR Q_^1_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST2-*-1_$CK FOR END OF TAB_^1_%JMP* (ESTAT)_^1EST2_!LDA* STATUS_^1_%AND- ONEBIT,Q_^1_%SAN EST3-*-1_$CK IF ERROR BIT SET_^1_%JMP* EST5_^1EST3_!RAO* COUNT_^1_%LDQ* BITPTR_^1_%QLS 1_,MUI BY 2_^1_%LDA* MSGTAB,Q_^1_%ST€€A* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF3_)DETERMINE DIRECTION OF TRANSFER_^1_%AND- ONEBIT+10_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES6_^1_%SAN EST4-*-1_^1_%LDQ =XMSG18B-MES6_^1EST4_!STQ* DTNPTR_^1_%LDQ MSB_*DETERMINE SECTOR ADDRESS AT BEGINNING OF XFER_^1_%LDA OLDLSB_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%STA TEMSEC_^1_%RTJ (RHXASC)_^1_%ADC (SEC-*)_^€€1_%LDA TEMSEC_^1_%RTJ SECFIL_'CONVERT SECTOR TO FILE ADDRESS_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES6_!NUM $0544_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC 0_^1_%ADC 0_^1DTNPTR ADC 0_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG7B-MES6_^1_%ADC MSG7E-MSG7B_^1EST5_!RAO* BITPTR_^1_%JMP* EST1_^1*_]_^€€1BITPTR NUM 0_^1STATUS NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BITTAB NUM 0_,DISK NOT READY_^1_%NUM 6_,NO COMPARE ERROR_^1_%NUM 8_,CHECKWORD ERROR_^1_%NUM 9_,LOST DATA_^1_%NUM 10_€€+ADDRESS ERROR_^1_%NUM 11_+CONTROLLER SEEK ERROR_^1_%NUM 13_+PARITY ERROR_^1_%NUM 14_+PROTECT ERROR_^1_%NUM 15_+DRIVE SEEK ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^€€1MSGTAB ADC MSG9B-MES6_^1_%ADC MSG9E-MSG8B_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES6_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES6_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES6_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG16B-MES6_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES6_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG15B-MES6_^1_%ADC MS€€G15E-MSG15B_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA BUFF+3_'TEST FOR INFINITE REPEATS_^1_%SAZ ENDMSG-*-1_^1€€_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_^1MES7_!NUM $8144_^1_%ADC MSG4B-MES7_^1_%ADC MSG4E-MSG4B_^1_%LDA FLAG_)CK FOR STOP TO RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%C€€LR 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*_4MESSAGE BUFFERS_A*_^1*_]_'*_^1*******************************************************************€€*****_^1_%SPC 2_^1MSG1B ALF $,BEGIN CDD 2 TEST$_^1_%NUM $D00_^1_%ALF 16,BEWARE OF SCRATCH CONFLICT. $C1=_^1C1CON NUM 0,0,$D00_^1_%ALF $,LU,SECTIONS,BEG SEC,END SEC,RUNS$_^1_%EQU MSG1E(*)_^1MSG2B ALF 5, LU ERROR_^1_%EQU MSG2E(*)_^1MSG3B ALF 6, SEC ADR ERR_^1_%EQU MSG3E(*)_^1MSG4B ALF 9,END CDD 2 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4€€, ERRORS_^1_%EQU MSG4E(*)_^1MSG5B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1MSG7B ALF 5,H/W ADDR._^1LOC_"NUM 0,0_^1_%ALF $, SECTOR $_^1SEC_"NUM 0,0_^1_%EQU MSG7E(*)_^1_%NUM $D00_^1_%ALF 3,WORD_^1CELADD NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG6E(*)_^1MSG8B €€ALF 8, COMP ERR TOTAL_^1CMP5_!NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 5, NOT READY_^1_%EQU MSG9E(*)_^1MSG10B ALF 4, NO COMP_^1_%EQU MSG10E(*)_^1MSG11B ALF 6, CHKWRD ERR_^1_%EQU MSG11E(*)_^1MSG12B ALF *, LOST DATA *_^1_%EQU MSG12E(*)_^1MSG13B ALF 7, ADDRESS ERROR_^1_%EQU MSG13E(*)_^1MSG14B ALF 12, CONTROLLER SEEK ERROR_^1_%EQU MSG14E(*)_^1MSG15B ALF 9, DRIVE SEEK ERROR€€_^1_%EQU MSG15E(*)_^1MSG16B ALF *, PARITY *_^1_%EQU MSG16E(*)_^1MSG17B ALF 6, PROTECT ERR_^1_%EQU MSG17E(*)_^1MSG18B ALF 5, D-C XFER_^1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:DISK I/O BUFFER_;*_^1*_]_'*_^1**********************************************************************€P**_^1_%SPC 2_^1BLK2K BZS BLK2K(2048)_^1_%SPC 2_^1_%EQU END(*)_^1_%END_]_^__PPSCMCRD CSY/ A76 P€1_%NAM SCMCRD_'DECK-ID A76 PERIPH. DRIVERS 1.0A SUMMARY-106_^1***_"1728/430, 1729-2, 1729-3, 1725-1 CARD READER/PUNCH TEST_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*S2_"FUNCTION -_^1*_$THE PURPOSE OF THIS PROGRAM IS TO ACT AS A DIAGNOSTIC_^1*_$EXERCISER FOR THE 1728/430, 1729-2, 1729-€€3, 1725-1_^1*_$CARD READERS/PUNCHES._^1*_]_^1*_]_^1*_$GENERAL DESCRIPTION -_^1*_$SCMCRD IS MASS MEMORY RESIDENT AND RUN ANYWHERE_^1*_$RELOCATABLE. IT OPERATES UNDER CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE MSOS DRIVERS FOR ALL_^1*_$COMMUNICATION WITH THE HARDWARE EXCEPT INPUTTING_^1*_$DIRECTOR STATUS 2. BEFORE TEST EXECUTION IS STARTED,_^1*_$THE USER IS REQUE€€STED TO INPUT THE TEST PARAMETERS --_^1*_$LOGICAL UNIT, TEST SECTION, AND NUMBER OF TIMES THE_^1*_$TEST IS TO BE EXECUTED. LOGICAL UNIT VALIDITY IS CHECKED_^1*_$AND IF INVALID, THE USER IS REQUESTED TO RE-ENTER THE_^1*_$TEST PARAMETERS. THE DIAGNOSTIC IS DIVIDED INTO EIGHT_^1*_$SECTIONS AS FOLLOWS-_^1*_*SECTION 1_#PUNCH RANDOM DATA, FORMATED RECORD_^1*_*SECTION 2_#PUNCH $AAA AND €€$555 PATTERN_^1*_*SECTION 3_#PUNCH USER INPUT PATTERN_^1*_*SECTION 4_#PUNCH SYNC CHECK_^1*_*SECTION 5_#READ RANDOM DATA, FORMATED RECORD_^1*_*SECTION 6_#READ $AAA AND $555 PATTERN_^1*_*SECTION 7_#READ USER INPUT PATTERN_^1*_*SECTION 8_#READ SYNC CHECK_^1*_$AT THE BEGINNING OF EACH SECTION, A CHECK IS MADE TO_^1*_$SEE IF THAT SECTION WAS REQUESTED. IF NOT, THE TEST_^1*_$MOVES O€€N TO THE NEXT SECTION. ONLY ONE SECTION MAY BE_^1*_$EXECUTED AT A TIME. A CHECK IS ALSO MADE TO SEE THAT_^1*_$WHEN A READ SECTION IS BEING REQUESTED THE DEVICE HAS_^1*_$READ CAPABILITIES AND WHEN A WRITE SECTION IS BEING_^1*_$REQUESTED THE DEVICE HAS WRITE CAPABILITIES. IF NOT,_^1*_$THE TEST IS COMPLETED WITHOUT ERROR. ON COMPLETION OF_^1*_$EACH I/O REQUEST, A CHECK IS MADE FOR€€ DRIVER DETECTED_^1*_$ERRORS. IF AN ERROR WAS DETECTED, THE TEST WILL USE_^1*_$THE ERROR CODE IN THE PHYSICAL DEVICE TABLE (WORD 26)_^1*_$AND THE HARDWARE STATUS (BOTH LEVEL 1 AND LEVEL 2) TO_^1*_$DETERMINE THE ERROR TYPE. IF AN ERROR WAS NOT DETECTED_^1*_$AND A READ SECTION IS BEING EXECUTED, THE DATA INPUT_^1*_$IS VERIFIED. AT THE END OF EACH TEST SEQUENCE, A PASS_^1*_$COUNTER€€ IS UPDATED AND COMPARED AGAINST THE NUMBER OF_^1*_$TIMES REQUESTED BY THE USER. IF EQUAL, THE TEST IS_^1*_$TERMINATED. IF $8000 IS ENTERED FOR THE NUMBER OF_^1*_$EXECUTIONS, THE TEST SEQUENCE WILL EXECUTE INDIFINITELY._^1*_]_^1*_]_^1*_$INPUT REQUIREMENTS -_^1*_$THIS TEST MEETS THE STANDARD INTERFACE REQUIREMENTS_^1*_$FOR THE SCMM EXECUTIVE._^1*_]_^1*_]_^1*_$ENTRY/EXIT -_^1*_$SCM€€CRD OPERATES UNDER CONTROL OF THE SCMM EXECUTIVE._^1*_$IT GAINS CONTROL FROM AND RETURNS CONTROL TO THE_^1*_$EXECUTIVE._^1*_]_^1*_]_^1*_$SUBROUTINES -_^1*_$THIS TEST USES ONLY THE STANDARD SUBROUTINES PROVIDED_^1*_$BY SCMM._^1_%SPC 2_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1******************€€******************************************************_^1_%SPC 3_^1_%EQU WES(7)_'PHYTAB EQUIPMENT/STATION ADDRESS LOCATION_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU ERCODE(26)_"PHYTAB ALTDEV ERROR CODE STORAGE_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATIO€€N 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' 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_%EQU TSTCRD(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTCRD_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATIONS REGIONS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3€€,TSTCRD_$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 FLDOK€€1_^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 CARDS_(CONVERT NUMBER_^1_%SAM INI2A_^1_%RTJ* (RDECHX)_%OF CARDS_^1INI2A STA CARDS_^1_%LDA LU_^1_%RTJ* (RDECHX)_$CONVERT LOGICAL UNIT TO HEX_^1_%STA RPLU_^1_%STA* LU1_^1_%TRA Q_^1_%LDQ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_^1_%AND- LPMSK+€€3_^1_%ALS 13_^1_%STA* RDWTFG_^1_%LDA- EREQST,Q_$CHECK IF LOGICAL UNIT LEGAL_^1_%AND =N$3FF0_^1_%SUB =N$18C0_%CHECK FOR 1728/430 ($18C0)_^1_%SAZ INI4-*-1_^1_%SUB =N$110_'CHECK FOR 1729-2_!($19D0)_^1_%SAZ INI4_^1_%SUB =N$90_(CHECK FOR 1729-3_!($1A60)_^1_%SAZ INI4_^1_%SUB =N$130_'CHECK FOR 1725-1 ($1B90)_^1_%SAZ INI4_^1_%JMP* BMPERR_^1INI4_!JMP* INI4A_^1BMPERR 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_^1INI4A CLR A_^1_%STA REPEAT_^1_%STA ERRCTR_^1_%STA DATCNT_^1_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 0_^1RDWTFG NU€€M 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_(SECTION 1 AND 5_!RANDOM DATA, FORMATTED RECORD TEST_(*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TEST_^1_%AND =N$22_(CHECK IF TEST 1 OR 5 IS REQUESTED_^1_%SAN T1T5A-*-1_^1_%JMP* T2T6CK_^1T1T5A INA -2_^1_%LDQ* €€RDWTFG_^1_%SAZ T1T5A2-*-1_^1_%QLS 1_^1_%SQM T1T5A1-*-1_"IF TEST 5 CHECK FOR READ DEVICE_^1_%JMP ENDMSG_^1T1T5A1 LDQ =A5_^1_%JMP* T1T5A4_^1T1T5A2 SQM T1T5A3-*-1_^1_%JMP ENDMSG_^1T1T5A3 LDQ =A1_^1T1T5A4 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* FWRITE_^1_%SAZ T1T5A5-*-1_^1_%LDQ* FREAD_^1T1T5A5 STQ REF1_)SET TYPE OF I/O_^1_%ENA 57_^1_%STA NUMWDS_'SET BUFFER L€€ENGTH_^1_%LDA =XBUFFR1-REF1_^1_%STA LOC_^1_%LDA =N$232F_^1_%STA GNATOR_'INITIALIZE RANDOM NUMBER GENERATOR_^1_%CLR A_^1_%STA CKTYP_(SET TYPE OF DATA COMPARE_^1_%RTJ- (AMONI)_%REWIND UNLOAD TO ZERO SEQUENCE NO._^1REFO_!ADC 14*FRC+FX+4*FRP+4*FCP_^1_%ADC T1T5B-REFO_^1_%ADC 0_^1LU1_"NUM 0_^1_%NUM $4000_^1_%JMP- (ADISP)_^1T1T5B LDA REF1_)CHECK IF DOING A WRITE_^1_%AND- ONEB€€IT+10_^1_%SAN T1T5B1_^1_%JMP* T1T5D_^1T1T5B1 CLR A_,SET UP THE BUFFER_^1_%STA- I_^1T1T5C RTJ RANDOM_'GET RANDOM NUMBER_^1_%STA BUFFR1,I_^1_%LDA- I_^1_%INA -56_*CHECK IF BUFFER IS FULL_^1_%SAZ T1T5D-*-1_^1_%RAO- I_^1_%JMP* T1T5C_^1T1T5D RTJ DOIO_)DO TEST I/O_^1_%RTJ ENDCK_(CHECK IF TEST COMPLETE_^1_%JMP* T1T5B_^1FREAD ADC 4*FRC+FX+4*FRP+4*FCP FORMAT READ REQUEST_^1FWRIT€€E ADC 6*FRC+FX+4*FRP+4*FCP FORMAT WRITE REQUEST_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_-SECTION 2 AND 6_!$AAA, $555 PATTERN TEST_.*_^1*_]_'*_^1***********************************************************************_^1_%SPC 2_^1T2T6CK LDA* TEST_^1_%AND =N$44_(CHECK IF TEST 2 OR 6 REQUESTED_^1_%SAN T2T6A-*-1_^1_%JMP* T3€€T7CK_^1T2T6A INA -4_^1_%LDQ* RDWTFG_^1_%SAZ T2T6A2-*-1_^1_%QLS 1_^1_%SQM T2T6A1-*-1_"IF TEST 6 CHECK FOR READ DEVICE_^1_%JMP ENDMSG_^1T2T6A1 LDQ =A6_^1_%JMP* T2T6A4_^1T2T6A2 SQM T2T6A3-*-1_^1_%JMP ENDMSG_^1T2T6A3 LDQ =A2_^1T2T6A4 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%SAZ T2T6A5-*-1_^1_%LDQ* READ_^1T2T6A5 STQ REF1_)SET TYPE OF I/O_^1_%TRQ A_,€€CHECK IF DOING A WRITE_^1_%AND- ONEBIT+10_^1_%SAZ T2T6F-*-1_^1_%CLR Q_,YES, SET UP THE BUFFER_^1_%STQ- I_^1T2T6C LDA* PATTRN,I_^1_%ENQ 57_^1T2T6D STA BUFFER,B_^1_%SQZ T2T6E-*-1_^1_%INQ -3_^1_%JMP* T2T6D_^1T2T6E LDA- I_^1_%INA -2_+CHECK IF BUFFER FULL_^1_%SAZ T2T6F-*-1_^1_%RAO- I_^1_%JMP* T2T6C_^1T2T6F ENA 1_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_^1*_82 CARDS DELETED_^1P€€ATTRN NUM $AAA5_^1_%NUM $55AA_^1_%NUM $A555_^1LU_#NUM 0_^1TEST_!NUM 0_^1CARDS NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_-SECTION 3 AND 7_!USER INPUT PATTERN TEST_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3T7CK LDA* TEST_^1_%AND =N$88_(CHECK IF TEST 3 OR €€7 IS REQUESTED_^1_%SAN T3T7A-*-1_^1_%JMP* T4T8CK_^1T3T7A INA -8_^1_$LDQ RDWTFG_^1_%SAZ T3T7A2-*-1_^1_%QLS 1_^1_%SQM T3T7A1-*-1_"IF TEST 7 CHECK FOR READ DEVICE_^1_%JMP ENDMSG_^1T3T7A1 LDQ =A7_^1_%JMP* T3T7A4_^1T3T7A2 SQM T3T7A3-*-1_^1_%JMP ENDMSG_^1T3T7A3 LDQ =A3_^1T3T7A4 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%SAZ T3T7A5-*-1_^1_%LDQ* READ_^1T€€3T7A5 STQ REF1_)SET TYPE OF I/O_^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_^1FLDOK2 STA* SPCPAT_^1_%LDA* REF1_)CHECK IF DOING A WRITE_^1_%AND- ONEBIT+10_^1_%SAZ T3T7D-*-1_^1_%LDA* SPCPAT_^1_%ENQ 59_^1T3T7C STA* BUFFER,Q_€€$YES, SET UP THE BUFFER_^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_^1_%ENA 60_^1_%STA* NUMWDS_'SET BUFFER LENGTH_^1_%LDA =XBUFFER-REF1_^1_%STA* LOC_^1T3T7E RTJ* DOIO_)DO TEST I/O_^1_%RTJ ENDCK_(CHECK IF TEST COMPLETE_^1_%JMP* T3T7E_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP READ REQUEST_^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 AND 8_!READ SYNC CHECK TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4T8CK LDA TEST_^1_%AND =N$110_'CHECK IF TEST 4 OR 8 IS REQUESTED_^1_%SAN €€T4T8A-*-1_^1_%JMP ENDMSG_^1T4T8A INA -$10_^1_%LDQ RDWTFG_^1_%SAZ T4T8A2-*-1_^1_%QLS 1_^1_%SQM T4T8A1-*-1_"IF TEST 8 CHECK FOR READ DEVICE_^1_%JMP ENDMSG_^1T4T8A1 LDQ =A8_^1_%JMP* T4T8A4_^1T4T8A2 SQM T4T8A3-*-1_^1_%JMP ENDMSG_^1T4T8A3 LDQ =A4_^1T4T8A4 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%SAZ T4T8A5-*-1_^1_%LDQ* READ_^1T4T8A5 STQ REF1_)SET T€€YPE OF I/O_^1_%TRQ A_^1_%AND- ONEBIT+20_#CHECK IF DOING A WRITE_^1_%SAN T4T8B-*-1_^1_%JMP* T4T8F_^1T4T8B ENQ 59_^1_%CLR A_,YES, SET UP THE BUFFER_^1T4T8C STA* BUFFER,Q_^1_%SQZ T4T8D-*-1_^1_%INQ -1_^1_%JMP* T4T8C_^1T4T8D LDQ* TEST_^1_%LDA- NZERO+4_^1_%STA* BUFFER_^1_%SQP T4T8E-*-1_#IF TEST PARAMETER IS NEGATIVE, SET CENTER COL_^1_%STA* BUFFER+30_^1T4T8E LDA- LPMSK+12_^1_%S€€TA* BUFFER+59_^1_%SQP T4T8F-*-1_^1_%STA* BUFFER+29_^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 ST€€OP FLAG_^1_%SAZ DOIO1-*-1_^1_%JMP ENDMSG_^1DOIO1 LDA* REF1_^1_%AND- ONEBIT+10_#CHECK IF DOING A READ_^1_%SAN DOIOB-*-1_^1_%ENQ 59_+YES, CLEAR I/O BUFFER_^1_%CLR A_^1DOIOA STA* BUFFER,Q_^1_%SQZ DOIOB-*-1_^1_%INQ -1_^1_%JMP* DOIOA_^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_^1NUMWDS NUM 57_^1LOC_"AD€€C BUFFER-REF1_^1_%JMP- (ADISP)_^1*_]_^1*_$DATA I/O BUFFER_^1*_]_^1BUFFER BZS BUFFER(2)_^1BUFFR1 BZS BUFFR1(58)_^1*_]_^1CMPL1 SQP CMPL1A-*-1_"CHECK IF DRIVER DETECTED AN ERROR_^1_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAN CMPL1B_)PRINTOUT_^1_%RTJ* ERRCHK_^1CMPL1A LDA* REF1_^1_%AND- ONEBIT+10_#CHECK IF DOING A READ_^1_%SAN CMPL1B-*-1_^1_%RTJ CKDATA_'YES, VERIFY€€ DATA_^1CMPL1B JMP* (DOIO)_^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_%INA -11_*CHECK€€ FOR MODE SWITCH FAILURE_^1_%SAN ERR1-*-1_^1_%JMP* DOIO+1_'YES, REPEAT I/O_^1ERR1_!LDA- ESTAT2,Q_$GET LEVEL 1 HARDWARE STATUS FROM PHYSTAB_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* LEV1ST_^1_%CLR A_^1_%STA* FATLER_'CLEAR FATAL ERROR FLAG_^1_%LDQ- WES,Q_^1_%INQ +2_^1_%INP 1_,INPUT LEVEL 2 HARDWARE STATUS_^1_%NOP 0_^1_%STA* LEV2ST_^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 9_^1_%LDA* LEV1ST_^1_%RTJ* ESTAT_(CHECK LEVEL 1 STATUS FOR ER€€RORS_^1_%ENQ 16_^1_%LDA* LEV2ST_^1_%RTJ* ESTAT_(CHECK LEVEL 2 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_^1LEV1ST NUM 0_^1LEV2ST NUM 0_^1FATLER NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2HARDWARE STA€€US 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 CONDITIO€€N_^1_%JMP* EST6_^1EST3_!RTJ* CKFLAG_'CHECK IF ERROR MESSAGES INHIBITED_^1_%JMP* EST6_)YES_^1_%LDA REF1_)CHECK IF DOING A WRITE_^1_%AND- ONEBIT+10_^1_%SAN EST4-*-1_^1_%TRQ A_,NO, CHECK IF TESTING ERROR STATUS BIT_^1_%INA -12_^1_%SAN EST3A-*-1_^1_%ENQ 25_^1EST3A INA -11_*NO, CHECK IF TESTING INHIBIT SWITCH STATUS_^1_%SAN EST4-*-1_^1_%JMP* EST6_)READING % CKING INHIB. SW. STA€€TUS, BYPASS MSG_^1EST4_!LDA* BITTAB,Q_$CHECK IF FATAL ERROR_^1_%SAP EST5-*-1_^1_%RAO* FATLER_'YES, SET FLAG_^1EST5_!QLS 1_,MUI BY 2_^1_%LDA* MSGTAB,Q_$PICK UP MESSAGE PART POINTER_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1*_81-CARD DELETED_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG34B-MES8_^1_%ADC M€€SG34E-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_%RAO* ERRCTR_'INCREMENT ERROR COUNTER_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ CKFLGA_^1_%JMP ENDMSG_^1CKFLGA RAO* CKFLAG_^1_%STQ* QSAVE_^1_%LDA REPEAT_'CONVERT PASSES COMPLETED TO ASCII€€_^1_%INA 1_^1_%RTJ CONVRT_'CONVERT NO. OF CARDS TO DEC._^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1_%LDQ* QSAVE_^1_%JMP* (CKFLAG)_^1ERRCTR NUM 0_^1QSAVE NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%S€€PC 2_^1*_4***_!DRIVER ERROR STATUS_!***_^1_%SPC 2_^1BITTAB NUM 0_,TIME OUT_^1_%NUM 4_,CKSUM ERROR_^1_%NUM 5_,INTERNAL REJECT_^1_%NUM 6_,EXTERNAL REJECT_^1_%NUM 8_,NO 7-9 PUNCH (HOLLERITH ERROR)_^1_%NUM 10_+NON-NEGATIVE RECORD LENGTH_^1_%NUM 34_+DATA INTERRUPT AFTER COL 80_^1_%NUM 35_+EOP INTERRUPT BEFORE COL 80_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1*_6***_!LEVEL 1 ST€€ATUS_!***_^1_%SPC 2_^1_%NUM $8001_(NOT READY_^1_%NUM $8002_(BUSY_^1_%NUM $8040_(LOST DATA_^1_%NUM $8100_(ERROR (PRE-READ OR PUNCH ERROR)_^1_%NUM $8200_(MOTION FAILURE_^1_%NUM $9000_(CHIP BOX FULL_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1*_6***_!LEVEL 2 STATUS_!***_^1_%SPC 2_^1_%NUM $8001_(HOPPER EMPTY_^1_%NUM $8002_(STACKER FULL_^1_%NUM $8004_(FEED FAILURE_^1_%NUM $800€€8_(READER AREA JAM_^1_%NUM $8010_(PUNCH AREA JAM_^1_%NUM $8020_(STACKER AREA JAM_^1_%NUM $8040_(PRE-READ ERROR_^1_%NUM $8080_(PUNCH ERROR_^1_%NUM $8100_(MANUAL_^1_%NUM $8200_(INHIBIT SW SET_^1_%NUM $8400_(INTERLOCK_^1_%NUM $FFFF_(END OF TABLE_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*€€_^1************************************************************************_^1_%SPC 2_^1MSGTAB ADC MSG10B-MES8_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES8_!CKSUM ERROR_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES8_!INTERNAL REJECT_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES8_!EXTERNAL REJECT_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES8_!NO 7-9 PUNCH_^1_%ADC MSG14E-MSG14B_^1_%ADC MS€€G15B-MES8_!NON-NEGATIVE RECORD LENGTH_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG16B-MES8_!DATA INTERRUPT AFTER COL 80_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES8_!EOP INTERRUPT BEFORE COL 80_^1_%ADC MSG17E-MSG17B_^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 MSG20B-MES8_!LOST DATA_^1_%ADC MSG20E-MS€€G20B_^1_%ADC MSG8B-MES8_"ERROR_^1_%ADC MSG8E-MSG8B_^1_%ADC MSG21B-MES8_!MOTION FAILURE_^1_%ADC MSG21E-MSG21B_^1_%ADC MSG22B-MES8_!CHIP BOX FULL_^1_%ADC MSG22E-MSG22B_^1_%ADC 0_^1_%ADC 0_^1_%ADC MSG23B-MES8_!HOPPER EMPTY_^1_%ADC MSG23E-MSG23B_^1_%ADC MSG24B-MES8_!STACKER FULL_^1_%ADC MSG24E-MSG24B_^1_%ADC MSG25B-MES8_!FEED FAILURE_^1_%ADC MSG25E-MSG25B_^1_%ADC MSG26B-€€MES8_!READER AREA JAM_^1_%ADC MSG26E-MSG26B_^1_%ADC MSG27B-MES8_!PUNCH AREA JAM_^1_%ADC MSG27E-MSG27B_^1_%ADC MSG28B-MES8_!STACKER AREA JAM_^1_%ADC MSG28E-MSG28B_^1_%ADC MSG29B-MES8_!PRE-READ ERROR_^1_%ADC MSG29E-MSG29B_^1_%ADC MSG30B-MES8_!PUNCH ERROR_^1_%ADC MSG30E-MSG30B_^1_%ADC MSG31B-MES8_!MANUAL_^1_%ADC MSG31E-MSG31B_^1_%ADC MSG32B-MES8_!INHIBIT SW SET_^1_%ADC MS€€G32E-MSG32B_^1_%ADC MSG33B-MES8_!INTERLOCK_^1_%ADC MSG33E-MSG33B_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7CHECK FOR DATA ERRORS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CKDATA 0_"0_^1_%CLR A_^1_%STA* GRPIND_^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_^1TST5CK STA* WORD1_(RANDOM DATA CHECK ROUTINE_^1_%STA* WORD2_(DO NOT CHECK DATA WORDS 1 AND 2_^1_%RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD3_^1TST5A RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD1_^1_%RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD2_^1_€€%LDA* GRPIND_^1_%INA -19_^1_%SAZ TST5B_(CHECK IF DOING WORDS 58 THRU 60_^1_%RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD3_^1_%JMP* TST5A_^1TST5B STA* WORD3_(YES, DO NOT CHECK DATA WORD 60_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%JMP* (CKDATA)_^1TST6CK ENQ 2_,$AAA, $555 PATERN CHECK ROUTINE_^1TST6A LDA PATTRN,Q_$PICK UP ALTERNATING PATTERN_^1_%STA* WORD1,Q_^1_%SQZ TST6B-*€€-1_^1_%INQ -1_^1_%JMP* TST6A_^1TST6B RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%LDA* GRPIND_^1_%INA -20_*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_%STA* WORD2_^1_%STA* WORD3_^1_%JMP* TST6B_^1TST8CK STA* WORD2_(READ SYNC PATTERN CHECK ROUTINE_^1_%STA* WORD3_^1_%LDA- NZERO€€+4_%SET COLUMN 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 OF TEST PARAMETER SET COL 40 + 41_^1_%LDA* GRPIND_)FOR ALL ROWS PUNCHED_^1_%INA -9_^1_%SAN TST8C-*-1_^1_%LDA- LPMSK+12_$SET COLUMN 40_^1_%STA* WORD3_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%CLR €€A_^1_%JMP* TST8CK_'SET COLUMN 41_^1TST8C LDA* GRPIND_^1_%INA -19_^1_%SAZ TST8D_(CHECK IF DOING COLS 77 THRU 80_^1_%JMP* TST8B_^1TST8D LDA- LPMSK+12_$SET COL 80_^1_%STA* WORD3_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%JMP* (CKDATA)_^1WORD1 NUM 0_^1WORD2 NUM 0_^1WORD3 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*_$THIS CODE INSURES THAT FIRST WORD OF DATA BUFFER IS_^1*_$NOT AN ASTERISK_^1_%TRA Q_^1_%ARS 8_^1_%SUB =N$2A_^1_%SAZ ASTRIK_^1_%TRQ A_^1_%JMP* (RANDOM)_^1ASTRIK TRQ A_^1_%ARS 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* GRPIND_'CALCULAT€€E BUFFER INDEX_^1_%MUI- LPMSK+2_^1_%STA- I_,EACH THREE DATA WORDS ARE IN FOUR COLUMNS_^1_%STA* ISAVE_^1_%LDA BUFFER,I_$GET COLUMN N+1 WHERE N IS FROM 0 TO 19_^1_%AND- NZERO+4_^1_%ALS 12_^1_%STA* IS_^1_%LDA* WORD1_^1_%AND- NZERO+4_^1_%ALS 12_^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 CO€€LUMN N+2_^1_%AND- LPMSK+4_^1_%LDQ BUFFER+1,I_^1_%LLS 8_^1_%STA* IS_^1_%LDA* WORD1_^1_%AND- LPMSK+4_^1_%LDQ* WORD2_^1_%LLS 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_!LDA BUFFER+1,I_"GET COLUMN N+3_^1_%AND- LPMSK+8_^1_%LDQ BUFFER+2,I_^1_%LLS 4_^1_%STA* IS_^1_%LDA* WORD2_^1_%AND- LPMSK+8_^1_%LDQ* WORD3€€_^1_%LLS 4_^1_%STA* WAS_^1_%EOR* IS_^1_%SAZ CHK3-*-1_$CHECK COLUMN N+3_^1_%ENQ 3_^1_%RTJ* DATERR_'DATA ERROR COLUMN N+3_^1CHK3_!LDA BUFFER+2,I_"GET COLUMN N+4_^1_%AND- LPMSK+12_^1_%STA* IS_^1_%LDA* WORD3_^1_%AND- LPMSK+12_^1_%STA* WAS_^1_%EOR* IS_^1_%SAZ CHK4-*-1_$CHECK COLUMN N+4_^1_%ENQ 4_^1_%RTJ* DATERR_'DATA ERROR COLUMN N+4_^1CHK4_!RAO* GRPIND_'INCREMENT COLUMN GROUP NUM€€BER_^1_%JMP* (CHKERR)_^1*_]_^1DATERR 0_"0_,FORM DATA ERROR MESSAGE_^1_%LDA* GRPIND_'CALCULATE COLUMN NUMBER_^1_%ALS 2_,MUI BY 4_^1_%AAQ A_^1_%CLR Q_^1_%DVI- TEN_*CONVERT TO DECIMAL_^1_%ADD =A 0_^1_%STA COLNUM_^1_%QLS 8_^1_%ADQ =A0_^1_%STQ COLNUM+1_^1_%LDA* IS_+FORMAT DATA MESSAGE_^1_%RTJ (RHXASC)_^1_%ADC (ACTUAL-*)_^1_%LDA ACTUAL_^1_%AND- LPMSK+8_^1_%EOR- ONEBIT+13_^1_%S€€TA 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 INHIBITED_^1_%JMP* DAT1_)YES_^1_%RAO* DATCNT_^1_%ENA -4_^1_%ADD* DATCNT_^1_%SAP DAT1_^1_%RTJ (MESAGE)_$NO, OUTPUT DATA ERROR MESSAGE_^1MES9_!NUM $0344_^1_%ADC (START-MES9)_^1_%NUM 3_^1_%ADC MS€€G34B-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_^1DATCNT NUM 0_^1_%SPC 5_^1CONVRT NUM 0_^1_%TRA Q_^1_%SUB =N$207F_%CHECK IF VALUE .GT. 9999_^1_%SAP GOWAY_(YES - LEAVE VALUE IN HEX FORM_^1_%TRQ A_,NO - GO CONVERT TO DEC._^1_%RTJ (ROCDE€€C)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDCK 0_"0_^1_%RAO* REPEAT_^1_%LDA CARDS_^1_%SAM ENDCK1-*-1_"CHECK FOR INFI€€NITE 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_'CONVRT NO. OF CARDS TO DEC._^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ* CONVRT_'CONVERT NO. OF ERRORS TO DEC._^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 10,BEGIN CARD R/P TEST_^1_%NUM $D00_^1_%ALF *,DLU,SECTIONS,CARDS*_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF 10,END CARD R/P TEST,_^1RUNASC €€NUM 0,0_^1_%ALF $, CARDS $_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG3E(*)_^1MSG8B ALF $, ERROR $_^1_%EQU MSG8E(*)_^1MSG9B ALF $,SPECIAL PATTERN $_^1_%EQU MSG9E(*)_^1MSG10B ALF $,TIME OUT $_^1_%EQU MSG10E(*)_^1MSG11B ALF 6,CKSUM ERROR_^1_%EQU MSG11E(*)_^1MSG12B ALF 5,INT REJECT_^1_%EQU MSG12E(*)_^1MSG13B ALF 5,EXT REJECT_^1_%EQU MSG13E(*)_^1MSG14B ALF 6,NO 7€€-9 PUNCH_^1_%EQU MSG14E(*)_^1MSG15B ALF 9,NON-NEG RCD LENGTH_^1_%EQU MSG15E(*)_^1MSG16B ALF 11,DATA INT AFTER COL 80_^1_%EQU MSG16E(*)_^1MSG17B ALF 11,EOP INT BEFORE COL 80_^1_%EQU MSG17E(*)_^1MSG18B ALF 4,NOT RDY_^1_%EQU MSG18E(*)_^1MSG19B ALF 2,BUSY_^1_%EQU MSG19E(*)_^1MSG20B ALF 5,LOST DATA_^1_%EQU MSG20E(*)_^1MSG21B ALF 7,MOTION FAILURE_^1_%EQU MSG21E(*)_^1MSG22B€€ ALF 7,CHIP BOX FULL_^1_%EQU MSG22E(*)_^1MSG23B ALF 6,HOPPER EMPTY_^1_%EQU MSG23E(*)_^1MSG24B ALF 6,STACKER FULL_^1_%EQU MSG24E(*)_^1MSG25B ALF 6,FEED FAILURE_^1_%EQU MSG25E(*)_^1MSG26B ALF 8,READER AREA JAM_^1_%EQU MSG26E(*)_^1MSG27B ALF 7,PUNCH AREA JAM_^1_%EQU MSG27E(*)_^1MSG28B ALF 8,STACKER AREA JAM_^1_%EQU MSG28E(*)_^1MSG29B ALF 7,PRE-READ ERROR_^1_%EQU MSG29E€€(*)_^1MSG30B ALF 6,PUNCH ERROR_^1_%EQU MSG30E(*)_^1MSG31B ALF 3,MANUAL_^1_%EQU MSG31E(*)_^1MSG32B ALF 7,INHIBIT SW SET_^1_%EQU MSG32E(*)_^1MSG33B ALF 5,INTERLOCK_^1_%EQU MSG33E(*)_^1MSG34B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF *, CARD *_^1ERRPAS NUM 0,0,$2020_^1_%EQU MSG34E(*)_^1MSG35B ALF 7,DATA ERROR COL_^1COLNUM NUM 0,0_^1_%ALF 3,ACTUAL_^1ACTUAL NUM 0,0_^1_%ALF 5€T, EXPECTED_^1EXPCTD NUM 0,0_^1_%EQU MSG35E(*)_^1_%EQU END(*)_^1*_]_^1_%END 0_^__TPSCMDK1 CSY/ A77 P€1_%NAM SCMDK1_'DECK-ID A77 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$(1738/853-854) (1733-1/853-854) DISK TEST_^1*_$PERIPHERAL DRIVERS 1.0A_^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*_$SCMDK1 IS A DIAGNOSTIC EXERCISER FOR THE 1738/853-854 DISK_^1*_$SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE MSOS DRIVER FOR ALL_^1*_$COMMUNICATION WITH THE €€DISK SUBSYSTEM. BEFORE TEST EXECU-_^1*_$TION IS STARTED, THE USER IS REQUESTED TO INPUT THE TEST_^1*_$PARAMETERS -- LOGICAL UNIT, TEST SECTIONS TO BE EXECUTED,_^1*_$BEGINNING SECTOR ADDRESS, ENDING SECTOR ADDRESS AND THE_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED. EACH_^1*_$PARAMETER IS CHECKED FOR ITS VALIDITY. IF ANY PARAMETER IS_^1*_$INVALID THE USER IS REQUESTED T€€O RE-ENTER THE TEST PARAME-_^1*_$TERS. IF THE SYSTEM DISK IS BEING TESTED, THE USER IS NOT_^1*_$ALLOWED TO SPECIFY A DISK ADDRESS WITHIN IN THE SYSTEM_^1*_81-CARD DELETED_^1*_$AREA. SCMDK1 IS DIVIDED INTO SIX SECTIONS AS FOLLOWS_^1*_*SECTION 1 WORST CASE PATTERN TEST_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TES€€T_^1*_*SECTION 5_!ZEROS WRITTEN OVER ONES TEST_^1*_*SECTION 6_!RANDOM SECTOR ADDRESS TEST_^1*_$SECTIONS 1, 2, 3, 5 AND 6 TRANSFER BLOCKS OF 2048 WORDS_^1*_$DECIMAL. ALL RANDOM NUMBERS ARE PSEUDO RANDOM NUMBERS. AT_^1*_$THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$HARDWARE ERRORS EXCEPT DATA ERRORS. IF A HARDWARE ERROR_^1*_$OCCURRED, THE I/O REQUEST IS REPEATED TWICE€€. AFTER ALL WRITE_^1*_$OPERATIONS ARE COMPLETE IN A GIVEN TEST SECTION, THE DISK_^1*_$IS THEN READ AND DATA COMPARED AGAINST WHAT WAS WRITTEN._^1*_$AT THE END OF EACH TEST SEQUENCE, THE PASS COUNTER IS UPDATED_^1*_$AND COMPARED AGAINST THE NUMBER OF TIMES REQUESTED BY THE_^1*_$USER. IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS_^1*_$ALSO CHECKED AND IF SET THE TEST IS TERMINAT€€ED. IF $8000_^1*_$IS ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE_^1*_$WILL BE EXECUTED INDEFINITELY._^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATIO€€N_^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 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 SYSDSK($C2)_!LOCATION OF L.U. FOR SYSTEM DISK_^1_%EQU MAXSEC($C1)_!LOCATION OF HIGHEST SEC ADD USED BY SYSTEM_^1_%EJT_]_^1_%EQU TSTDK1(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTDK1_^1**********************************€€**************************************_^1*_]_'*_^1*_7COMMUNICATION REGION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTDK1_$TEST MNEMONIC_^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*_7INPUT TEST PARAMETERS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1_%LD€€A- $C1_^1_%RTJ* (RHXASC)_^1_%ADC (C1CON-*)_^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 -4_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA* BUFF+2_'CK FOR SECTOR ADDRESS ERROR_€€^1_%SUB* BUFF+1_^1_%SAP INI3-*-1_^1_%JMP* INI7_^1INI3_!LDA* BUFF+3_(CONVERT NUMBER_^1_%SAM INI3A1_4(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%OF RUNS_^1INI3A1 STA* BUFF+3_^1_%LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA DSKLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%CK IF LU IS LEGAL_^1_%STQ* PHYPTR_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%CLR Q_^1_%SUB =N$1050_%CK FOR 1738/€€853_^1_%SAN INI3A-*-1_^1_%JMP* INI5_^1INI3A ENQ 1_^1_%INA -$30_)CK FOR 1738/854 ($1080)_^1_%SAN INI3B_^1_%JMP* INI5_^1INI3B INA -$60_)CHECK FOR 1733-1/854 ($10E0)_^1_%SAN INI3C_^1_%JMP* INI5_^1INI3C SUB =N$190_'CHECK FOR 1733-1/853 ($1270)_^1_%ENQ 0_^1_%SAZ INI5_^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_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_^1INI5_!LDA* BUFF+2_'CK FOR EXCESSIVE SECTOR ADDRESS_^1_%SQZ INI6-*-1_$ZERO IF 853 DISK_^1_%SUB =N16480_%854 = 32480 SECTORS_^1INI6_!SUB =N16000_%853 = 16000 SECTORS_^1_%SAM INI8-*-1_$NEG IF LESS THAN MAX_^1INI7_!RTJ* (MESAGE)_$SECTOR ADDRESS ERROR_^1MES3_!NUM $8244_^1€€_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG3B-MES3_^1_%ADC MSG3E-MSG3B_^1_%JMP* ENTER1_^1INI8_!LDA DSKLU_(CK IF SYSTEM DISK_^1_%SUB- SYSDSK_^1_%SAN INI9-*-1_^1_%LDA* BUFF+1_'CK IF TRYING TO TEST IN SYSTEM AREA_^1_%INA -1_^1_%SUB- MAXSEC_^1_%SAP INI9-*-1_^1_%JMP* INI7_^1INI9_!LDA* BUFF+1_'CONVERT BEGINNING SECTOR ADDRESS_^1_%MUI* N96_,TO MSB/LSB_^1_%LLS 1_^1_%ALS 15_^1_%STA €€LSB_^1_%STA* LSBSAV_^1_%STQ MSB_^1_%STQ* MSBSAV_^1_%LDA* BUFF+2_'CONVERT ENDING SECTOR ADDRESS_^1_%MUI* N96_,TO MSB/LSB_^1_%LLS 1_^1_%ALS 15_^1_%STA* MAXLSB_^1_%STQ* MAXMSB_^1_%CLR A_^1_%STA CMP1_^1_%STA COUNT_^1_%STA PASSES_^1_%STA* PSSCTR_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1BUFF_!NUM 0,0,0,0_^1PHYPTR NUM 0_^1N96_"NUM 96_^1INPERR NUM 0_^1_%EJT€€_]_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!WORST CASE PATTERN TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* BUFF_)DETERMINE TEST SEQ--_^1_%AND- ONEBIT+1_$IS TEST1 REQUESTED..._^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 LDA =N$2031_%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* TRKTRN_'EXECUTE XFERS AND CKS._^1_%LDA* COUNT1_^1_%INA -3_+CHK FOR LAST WORST PATTERN._^1_%SAZ T2CK-*-1_^1_%RAO* COUNT1_^1_%JMP* WP1_^1COUNT1 NUM 0_^1WSPAT1 NUM $9555_(WORST PATTERNS..._^1_%NUM $6AAA_^1_%NUM $5A5A_^1_%NUM $A5A5_^1_%SPC 2_^1*****************************€€*******************************************_^1*_]_'*_^1*_5SECTION 2_!ALL ONES TEST_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* BUFF_^1_%AND- ONEBIT+2_$IS TEST2 REQUESTED..._^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEGIN TEST 2_^1_%STA SNUM_^1_%SET A_^1_%RTJ* TRKTRN_^1_%JMP* T3CK_^1_%EJT_]_^1********€€****************************************************************_^1*_]_'*_^1*_2LOAD, XFER, AND CHECK 2048 WORDS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TRKTRN 0_"0_^1_%STA* PATTRN_^1_%LDQ- ONEBIT+11_#$800_^1_%STQ* NWORDS_^1TT1_"LDA* PATTRN_'GET PATTERN._^1_%LDQ- LPMSK+11_$$7FF_^1TT2_"STA BLK2K,Q_/LOAD BUFFER._^1_%SQZ TT3€€-*-1_^1_%INQ -1_^1_%JMP* TT2_^1TT3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1_%RTJ* BLKTRN_^1_%JMP* TT4_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE FOR NEXT TRACK._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* TT1_^1TT4_"LDA* PSSCTR_'CK FOR SECOND PHASE._^1_%SAZ TT4A-*-1_^1_%RAO* PSSCTR_'PHASE 1_^1_%LDA* PSSCTR_^1_%INA -11_*TEST FOR 10 PASSES._^1_%SAZ TT4A-*-1_^1_%JMP* TT1_^1TT4€€A_!LDA* READ_)RESET BLKTRN._^1_%STA* REF3_^1TT5_"RTJ* BLKTRN_^1_%JMP* (TRKTRN)_^1_%LDA* LSB_^1_%ADD* NWORDS_^1_%STA* LSB_^1TT6_"LDA* PATTRN_'GET ORIGINAL PATTERN._^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ COMPAR_^1_%JMP* TT5_*TO HERE WHEN TRK COMP THRU_^1_%JMP* TT6_*TO HERE FOR NEXT CELL CK._^1*_]_^1PATTRN NUM 0_^1PSSCTR NUM 0_^1MAXMSB NUM 0_^1MAXLSB NUM 0_^1MSBSAV NUM 0_^1LSBSAV NUM €€ 0_^1************************************************************************_^1*_]_'*_^1*_4SECTION 3_!RANDOM DATA TEST_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* BUFF_^1_%AND- ONEBIT+3_$IS TEST3 REQUESTED..._^1_%SAN TEST3-*-1_^1_%JMP T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA SNUM_^1_%LDQ- ONEBIT+11_#SET €€WORD 4 OF CALL SEQ._^1_%STQ* NWORDS_2*_^1_%CLR A_^1_%STA- I_^1_%LDA* RN2_^1_%STA* RN9_^1RN1_"LDA* RN2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_0*_^1_%MUI* RNDNUM_'PATTERNS_!*_^1_%STA* RN2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RN3-*-1_^1_%RAO- I_^1_%JMP* RN1_*CONTINUE LOADING BLK._^1RN2_"NUM $21_^1RN3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1RN4_"RTJ* B€€LKTRN_^1_%JMP* RN5_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE WHEN TRK IS XFERRED_^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* RN4_^1RN5_"LDA* READ_^1_%STA* REF3_^1RN6_"RTJ* BLKTRN_^1_%JMP* RN10_)TO HERE IF TEST AREA COMPLETE_^1_%LDA* LSB_*TO HERE IF NOT._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%LDA* RN9_^1_%STA* RN8_^1RN7_"LDA* RN8_*REGENERATE ORIGINAL SEQ._^1_%AND- LPMSK+15_^1_%MUI* RNDN€€UM_)OF RANDOM BIT PATTERNS._^1_%STA* RN8_^1_%LRS 1_^1_%LDQ- ONEBIT+11_^1_%RTJ COMPAR_^1_%JMP* RN6_*TO HERE WHEN BLK COMP THRU_^1_%JMP* RN7_*TO HERE FOR NEXT CELL CK._^1RN8_"NUM $21_^1RN9_"NUM 0_^1RN10_!JMP* T4CK_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/TRANSFER BLOCKS BETWEEN DISK AND CORE_0*_^1*_]_'*_^1****************€€********************************************************_^1_%SPC 2_^1BLKTRN 0_"0_^1_%LDA* TRYAGN_'CK FOR PREVIOUS PARITY ERROR._^1_%SAP BL1A-*-1_'ERROR FLAG SET._^1_%LDA* OLDLSB_^1_%STA* LSB_^1_%JMP* BL1B_)REPEAT OPERATION_^1BL1A_!RTJ* NXTADR_^1BL1B_!LDA* REF3_^1_%SUB* READ_)CHECK FOR DOING READ NOW_^1_%SAN GOGO_^1_%LDQ =N2047_'IF IT IS A READ - ZERO THE BUFFER FIRST_^1LOPER S€€TA BLK2K,Q_^1_%SQZ GOGO_)END OF BUFFER YET_^1_%INQ -1_+NO- GO AROUND AGAIN_^1_%JMP* LOPER_^1GOGO_!RTJ- (AMONI)_%CONSTRUCT MONITOR CALL_^1REF3_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP5-REF3_$TO TRANSFER BLOCK_^1_%ADC 0_.OF INFORMATION TO_^1DSKLU NUM 8_.DISK._^1NWORDS NUM 0_7*_^1_%ADC BLK2K-REF3_.*_^1MSB_"NUM 0_7*_^1LSB_"NUM 0_7*_^1_%JMP- (ADISP)_%GO TO DISPATCHER._^1WRITE €€ ADC 2*FRC+FX+4*FRP+4*FCP_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_^1COMP5 CLR A_^1_%STA CELERR_^1_%LDA* LSB_*SAVE DISK XFER ADDRESS._^1_%STA* OLDLSB_^1_%SQP COMP5A-*-1_^1_%RTJ ESTAT_(CK STATUS BITS._^1COMP5A LDA FLAG_)CHECK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ COMP5B-*-1_^1_%JMP ENDMSG_^1COMP5B RAO* TRYAGN_^1_%LDA* TRYAGN_^1_%AND- ONEBIT+1_$CK FOR REPEAT._^1_%SAZ BL2-*-1_^1_%C€€LR A_,YES, CONTINUE TEST_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_$RETURNS TO 2ND WD AFTER RTJ_^1BL2_"LDA STATUS_'NO REPEAT._^1_%TRA Q_^1_%AND- ONEBIT+13_#CK FOR PARITY ERROR._^1_%SAN BL4-*-1_^1_%TRQ A_+IF NO,_^1_%AND =N$DF60_%CK FOR OTHER ERRORS._^1_%SAN BL3-*-1_^1_%STA* TRYAGN_'NO ERROR, CONTINUE._^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_^1BL3_"JMP* BL1B_)YES, REPEAT OP.€€_^1BL4_"LDA SNUM_)CHECK FOR SECTION 4 IN OPERATION_^1_%AND- LPMSK+4_^1_%INA -4_^1_%SAN BL4A-*-1_^1_%JMP* BL1B_)YES, JUST REPEAT XFER._^1BL4A_!LDA* TRYAGN_^1_%EOR- ONEBIT+15_#SET FLAG_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_'CONTINUE TO COMPARE._^1_%JMP* (BLKTRN)_^1OLDLSB NUM 0_^1TRYAGN NUM 0_^1RNDNUM ADC 5*5*5*5*5_^1_%EJT_]_^1**********************************************************€€**************_^1*_]_'*_^1*_4COMPUTE NEXT SECTOR ADDRESS_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NXTADR 0_"0_^1_%ENQ 0_^1_%LDA* LSB_^1_%LLS 1_,PROPAGATE CARRY_^1_%ADQ* MSB_,AND_^1_%ALS 15_-FORM_^1_%STA* LSB_,TRACK_^1_%STQ* MSB_,AND SECTOR_^1_%CLR Q_,COMPUTE MAXIMUM_^1_%ADD* NWORDS_)DISK ADDRESS._^1_%INA -1_^1_%LLS 1_€€^1_%ADQ* MSB_^1_%ALS 15_^1_%STA* LSBTMP_^1_%TRQ A_^1_%SUB MAXMSB_^1_%SAZ NXT1-*-1_'DISK ADDRESS_^1_%SAP FULL1-*-1_%EXCEEDED._^1_%JMP* (NXTADR)_^1NXT1_!LDA* LSBTMP_^1_%SUB MAXLSB_^1_%SAM NXT2-*-1_^1_%SAN FULL1-*-1_^1NXT2_!JMP* (NXTADR)_^1LSBTMP NUM 0_^1FULL1 LDA LSBSAV_(INITIALIZE DISK_^1_%LDQ MSBSAV_)ADDR IN_^1_%STA* LSB_,CALL_^1_%STQ* MSB_*SEQUENCE._^1_%JMP* (BLKTRN)_^€€1*CONTROL TO FIRST INSTR. AFTER RTJ BLKTRN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_)SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_**_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA BUFF_^1_%AND- ONEBIT+4_$IS TEST4 REQUESTED._^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1TES€€T4 LDA =N$2034_%BEGIN TST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA- I_^1_%LDA* RF2_^1_%STA* RF14A_^1RF1_"LDA* RF2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_'PATTERNS._^1_%MUI* RNDNUM_^1_%STA* RF2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RF4-*-1_^1_%RAO- I_^1_%JMP* RF1_*CONTINUE LOADING BLK._^1RF2_"NUM $21_^1RF6_"NUM $31_^1RF4_"LDA* RF6_^1_%STA* RF11_^1_%LDA* WRI€€TE_^1_%STA* REF3_^1RF5_"LDA* RF6_*GENERATE RANDOM BLK LENGTHS._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF6_^1_%AND- LPMSK+11_0*_^1_%STA* NWORDS_^1_%RTJ BLKTRN_^1_%JMP* RF9_*TO HERE WHEN TST AREA THRU_^1_%LDA LSB_*TO HERE IF NOT_^1_%ADD NWORDS_^1_%STA LSB_^1_%JMP* RF5_^1RF11_!NUM $31_^1RF9_"LDA READ_^1_%STA REF3_4*_^1RF10_!LDA* RF11_)RETURN BLKS. TO CORE._^1_%AND- LPMSK+15€€_^1_%MUI* RNDNUM_^1_%STA* RF11_^1_%AND- LPMSK+11_0*_^1_%STA NWORDS_2*_^1_%RTJ BLKTRN_^1_%JMP* T5CK_)TO HERE, AREA COMPL._^1_%LDA LSB_*TO HERE IF NOT._^1_%ADD NWORDS_^1_%STA LSB_^1_%LDA* RF14A_^1_%STA* RF14_^1RF12_!LDA* RF14_)GENERATE ORIGINAL_^1_%AND- LPMSK+15_'RANDOM_^1_%MUI* RNDNUM_)PATTERNS_^1_%STA* RF14_^1_%LRS 1_^1_%LDQ NWORDS_)AND COMPARE WITH CURRENT_^1_%RTJ* COMPAR_)€€CELL CONTENTS._^1_%JMP* RF10_)TO HERE WHEN COMPARE COMPL._^1_%JMP* RF12_)TO HERE FOR NEXT CELL._^1RF14_!NUM $21_^1RF14A NUM $21_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_.SECTION 5_!ZEROS WRITTEN OVER ONES TEST_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA BUF€€F_)CK FOR TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAZ T6CK-*-1_^1_%LDA =A 5_)BEGIN TEST 5_^1_%STA SNUM_^1_%RAO PSSCTR_'SET PHASE 1 SWITCH._^1_%SET A_,PATTERN FOR PHASE 1._^1_%RTJ TRKTRN_^1_%CLR A_^1_%STA PSSCTR_'CLEAR PHASE 1 SWITCH-- ALL_^1_%RTJ TRKTRN_'PATTERN FOR PHASE 2._^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_€€/SECTION 6_!RANDOM SECTOR ADDRESS TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T6CK_!LDA BUFF_)CK FOR TEST 6 REQUESTED._^1_%AND- ONEBIT+6_^1_%SAN TEST6-*-1_^1_%JMP ENDTST_^1TEST6 LDA =A 6_)BEGIN TEST 6._^1_%STA SNUM_^1_%LDQ- LPMSK+11_$$7FF_^1_%LDA WSPAT1_^1T61_"STA BLK2K,Q_%FILL BUFFER WITH WORST_^1_%SQZ T62-*-1_€€'PATTERN_^1_%INQ -1_^1_%JMP* T61_^1T62_"LDA- ONEBIT+11_#$800_^1_%STA NWORDS_^1T63_"LDA WRITE_(SET BLKTRN FOR WRITE_^1_%STA REF3_^1_%LDA* RNWRKG_'GENERATE RANDOM SECTOR_^1_%AND- LPMSK+15_'ADDRESSES._^1_%MUI RNDNUM_^1_%STA* RNWRKG_^1_%LRS 1_^1_%STA LSB_^1_%SUB- MAXSEC_^1_%SAP T63A_^1_%JMP* T63_^1T63A_!RTJ BLKTRN_'WRITE DATA BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1_%LDA €€ READ_)TO HERE, KEEP GOING._^1_%STA REF3_)SET BLKTRN FOR READ._^1_%RTJ BLKTRN_'READ BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1T64_"LDA WSPAT1_'TO HERE, DO COMPARE_^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ* COMPAR_^1_%JMP* T65_*TO HERE, DONE._^1_%JMP* T64_*TO HERE, KEEP COMPARING._^1T65_"RAO* T6CTR_(INCREMENT COUNTER_^1_%LDA* T6CTR_^1_%SUB =N160_(CK FOR 160 RANDOM WRITES_^1_%SAN T66-€€*-1_^1_%STA* T6CTR_^1_%LDA LSBSAV_'INITIALIZE DISK_^1_%LDQ MSBSAV_'ADDRESS._^1_%STA LSB_^1_%STQ MSB_^1_%JMP ENDTST_'THIS PASS COMPLETE._^1T66_"JMP* TEST6_(KEEP GOING._^1T6CTR NUM 0_^1RNWRKG NUM $41_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2COMPARE PRE- AND POST XFER BLOCKS_1*_^1*_]_'*_^1*******************************€€*****************************************_^1_%SPC 2_^1COMPAR 0_"0_^1_%STA* ORIG_^1_%INQ -1_^1_%STQ* XWORDS_^1_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAZ CMPAR1_)PRINTOUT_^1_%JMP* (COMPAR)_(YES - DONT PRINT_^1CMPAR1 LDQ* TEMPX_(GET CURRENT COUNTER_^1_%STQ* CELERR_^1_%LDA BLK2K,Q_%GET POST-XFER CELL CONTNTS_^1_%STA* BADCEL_^1_%EOR* ORIG_)CNTNS PRE-XFER CELL._^1_%SA€€Z CK1-*-1_^1_%RTJ* CMPERR_'GO TO CMPERR ON ERROR._^1CK1_"LDA* TEMPX_^1_%SUB* XWORDS_^1_%SAZ CK2-*-1_%CK FOR END OF BLK._^1_%RAO* TEMPX_^1_%RAO* COMPAR_'TO HERE FOR CONTINUE COMP._^1_%JMP* (COMPAR)_^1CK2_"STA* TEMPX_^1_%LDA* CMP1_^1_%SAZ CK3-*-1_^1_%RTJ* CMP4_^1CK3_"STA* CMP1_^1_%JMP* (COMPAR)_$TO HERE WHEN BLK COMPL._^1TEMPX NUM 0_^1XWORDS NUM 0_^1ORIG_!NUM 0_^1*_]_^1CMP4_!€€0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ CONVRT_'CONVERT NO. OF COMPARE ERRORS TO DEC._^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUTPUT NUMBER OF COMPARE ERRORS_^1MES4_!NUM $0244_^1_%ADC (START-MES4)_^1_%NUM 3_^1_%ADC MSG8B-MES4_^1_%ADC MSG8E-MSG8B_^1CMP4A LDA FLAG_)CK FOR STOP FLAG_^1_%AND-€€ ONEBIT_^1_%SAZ CMP2-*-1_^1_%JMP ENDMSG_^1CMP2_!JMP* (CMP4)_^1*_]_^1CMP1_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%RAO* CMP1_^1_%LDA* CMP1_)CK FOR THREE COMPARISON_€€^1_%INA -4_-ERRORS IN CURRENT BLOCK._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1*_81 CARD DELETED_^1_%ADD* CELERR_)COMPARISON ERROR._^1_%CLR Q_^1_%LLS 1_^1_%ADQ MSB_^1_%LRS 1_^1_%DVI =N96_^1_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^1_%LLS 16_^1_%STQ SECTOR_^1_%RTJ CONVRT_'CONVERT DATA ADDRESS IN SECTOR TO DEC._^1_%RTJ (RHXASC)€€_^1_%ADC (CELADD-*)_^1_%CLR Q_^1_%LDA SECTOR_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%LDA SECTOR_^1_%INA -4_^1_%RTJ (RHXASC)_^1_%ADC (SECTOR-*)_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%ADC (ORIGWD-*)_^1_%LDA* BADCEL_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP3A_^1_%RTJ (MESAGE)_$OUTPUT DATA COMPARE ERROR MSG_^1MES5_!NUM €€ $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1CMP3A JMP* (CMPERR)_^1CELERR NUM 0_^1BADCEL NUM 0_^1_%SPC 2_^1INIMSG 0_"0_^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* CONVRT_'CONVERT RUN NUMBER TO DEC._^1_%RTJ (RHXASC)_€€^1_%ADC (NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^1COUNT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1CHECK FOR HARDWARE STATUS ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_+BEGIN STATUS CHECK._^1_%RTJ* INIMSG_'CECK FOR NO ERROR PRINTOUT_^1_%JMP EST5_*€€DONT PRINT_^1_%LDQ PHYPTR_^1_%LDA- ESTAT2,Q_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* STATUS_'ESTAT2 SAVED._^1_%CLR Q_^1_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST2-*-1_$CK FOR END OF TAB_^1_%JMP* (ESTAT)_^1EST2_!LDA* STATUS_^1_%AND- ONEBIT,Q_^1_%SAN EST3-*-1_$CK IF ERROR BIT SET_^1_%JMP* EST5_^1EST3_!RAO* COUNT_^1_%LDQ* BITPTR_^1_%QLS 1_,MUI BY 2_^€€1_%LDA* MSGTAB,Q_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF3_)DETERMINE DIRECTION OF TRANSFER_^1_%AND- ONEBIT+10_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES6_^1_%SAN EST4-*-1_^1_%LDQ =XMSG18B-MES6_^1EST4_!STQ* DTNPTR_^1_%LDQ MSB_*DETERMINE SECTOR ADDRESS AT BEGINNING OF XFER_^1_%LDA OLDLSB_^1*_81 CARD DELETED_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%STA €€LOC_^1_%RTJ (RHXASC)_^1_%ADC (SECTOR-*)_^1_%LDA LOC_^1_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^1_%CLR Q_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES6_!NUM $0544_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC 0_^1_%ADC 0_^1DTNPTR ADC 0_^1_%ADC MSG18E-MSG18B_^€€1_%ADC MSG7B-MES6_^1_%ADC MSG7E-MSG7B_^1EST5_!RAO* BITPTR_^1_%JMP* EST1_^1*_]_^1BITPTR NUM 0_^1STATUS NUM 0_^1_%SPC 5_^1CONVRT NUM 0_,CONVERT A REG TO DECIMAL_^1_%TRA Q_^1_%SUB =N$270F_%CHECK IF VALUE .GT. 9999_^1_%SAP GOWAY_(YES - LEAVE VALUE 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_%JM€€P* (CONVRT)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BITTAB NUM 0_,DISK NOT READY_^1_%NUM 6_,NO COMPARE ERROR_^1_%NUM 8_,CHECKWORD ERROR_^1_%NUM 9_,LOST DATA_^1_%NUM 10_+SEEK ERROR_^1_%NUM€€ 11_+ADDRESS ERROR_^1_%NUM 12_+DEFECTIVE TRACK ERROR_^1_%NUM 13_+PARITY ERROR_^1_%NUM 14_+PROTECT ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGTAB ADC MSG9B-MES6_^1€€_%ADC MSG9E-MSG8B_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES6_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES6_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES6_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES6_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG16B-MES6_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES6_^1_%ADC MSG17E-MSG17B_^1_%EJT_]_^1*€€***********************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA BUFF+3_'TEST FOR INFINITE REPEATS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* €€PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_^1MES7_!NUM $8144_^1_%ADC MSG4B-MES7_^1_%ADC MSG4E-MSG4B_^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_%J€€MP 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*_4MESSAGE BUFFERS_A*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B €€ ALF 9,BEGIN DISK 1 TEST_^1_%NUM $D00_^1_%ALF 16,BEWARE OF SCRATCH CONFLICT. $C1=_^1C1CON NUM 0,0,$D00_^1_%ALF $,LU,SECTIONS,BEG SEC,END SEC,RUNS$_^1_%EQU MSG1E(*)_^1MSG2B ALF 5, LU ERROR_^1_%EQU MSG2E(*)_^1MSG3B ALF 6, SEC ADR ERR_^1_%EQU MSG3E(*)_^1MSG4B ALF 9,END DISK 1 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG4E(*€€)_^1MSG5B ALF *, SEC*_^1SNUM_!NUM 0_^1_%ALF *, RUN *_^1NUMPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1MSG7B ALF *, SECTOR *_^1SECTOR NUM 0,0_^1_%ALF *, H/W ADDR. *_^1LOC_"NUM 0,0_^1_%EQU MSG7E(*)_^1_%NUM $D00_^1_%ALF 3,WORD_^1CELADD NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG6E(*)_^1MSG8B ALF 8, COMP ERR TOT€€AL_^1CMP5_!NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 5, NOT READY_^1_%EQU MSG9E(*)_^1MSG10B ALF 4, NO COMP_^1_%EQU MSG10E(*)_^1MSG11B ALF 6, CHKWRD ERR_^1_%EQU MSG11E(*)_^1MSG12B ALF *, LOST DATA*_^1_%EQU MSG12E(*)_^1MSG13B ALF 5, SEEK ERR_^1_%EQU MSG13E(*)_^1MSG14B ALF 4, ADR ERR_^1_%EQU MSG14E(*)_^1MSG15B ALF *, DEF TRK*_^1_%EQU MSG15E(*)_^1MSG16B ALF *, PARITY*_^1_%€€EQU MSG16E(*)_^1MSG17B ALF 6, PROTECT ERR_^1_%EQU MSG17E(*)_^1MSG18B ALF 5, D-C XFER_^1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:DISK I/O BUFFER_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLK2K BZS BLK2K(2048)_^1_%SPC 2€_^1_%EQU END(*)_^1_%END_]_^__PSCMDK2 CSY/ A78 P€1_%NAM SCMDK2_'DECK-ID A78 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$(1738/853-854) (1733-1/853-854) DISK TEST_^1*_$PERIPHERAL DRIVERS 1.0A_^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*_$SCMDK2 IS A DIAGNOSTIC EXERCISER FOR THE 1738/853-854 DISK_^1*_$SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE MSOS DRIVER FOR ALL_^1*_$COMMUNICATION WITH THE €€DISK SUBSYSTEM. BEFORE TEST EXECU-_^1*_$TION IS STARTED, THE USER IS REQUESTED TO INPUT THE TEST_^1*_$PARAMETERS -- LOGICAL UNIT, TEST SECTIONS TO BE EXECUTED,_^1*_$BEGINNING SECTOR ADDRESS, ENDING SECTOR ADDRESS AND THE_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED. EACH_^1*_$PARAMETER IS CHECKED FOR ITS VALIDITY. IF ANY PARAMETER IS_^1*_$INVALID THE USER IS REQUESTED T€€O RE-ENTER THE TEST PARAME-_^1*_$TERS. IF THE SYSTEM DISK IS BEING TESTED, THE USER IS NOT_^1*_$ALLOWED TO SPECIFY A DISK ADDRESS WITHIN IN THE SYSTEM_^1*_81-CARD DELETED_^1*_$AREA. SCMDK2 IS DIVIDED INTO SIX SECTIONS AS FOLLOWS_^1*_*SECTION 1 WORST CASE PATTERN TEST_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TES€€T_^1*_*SECTION 5_!ZEROS WRITTEN OVER ONES TEST_^1*_*SECTION 6_!RANDOM SECTOR ADDRESS TEST_^1*_$SECTIONS 1, 2, 3, 5 AND 6 TRANSFER BLOCKS OF 2048 WORDS_^1*_$DECIMAL. ALL RANDOM NUMBERS ARE PSEUDO RANDOM NUMBERS. AT_^1*_$THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$HARDWARE ERRORS EXCEPT DATA ERRORS. IF A HARDWARE ERROR_^1*_$OCCURRED, THE I/O REQUEST IS REPEATED TWICE€€. AFTER ALL WRITE_^1*_$OPERATIONS ARE COMPLETE IN A GIVEN TEST SECTION, THE DISK_^1*_$IS THEN READ AND DATA COMPARED AGAINST WHAT WAS WRITTEN._^1*_$AT THE END OF EACH TEST SEQUENCE, THE PASS COUNTER IS UPDATED_^1*_$AND COMPARED AGAINST THE NUMBER OF TIMES REQUESTED BY THE_^1*_$USER. IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS_^1*_$ALSO CHECKED AND IF SET THE TEST IS TERMINAT€€ED. IF $8000_^1*_$IS ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE_^1*_$WILL BE EXECUTED INDEFINITELY._^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATIO€€N_^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 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 SYSDSK($C2)_!LOCATION OF L.U. FOR SYSTEM DISK_^1_%EQU MAXSEC($C1)_!LOCATION OF HIGHEST SEC ADD USED BY SYSTEM_^1_%EJT_]_^1_%EQU TSTDK2(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTDK2_^1**********************************€€**************************************_^1*_]_'*_^1*_7COMMUNICATION REGION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTDK2_$TEST MNEMONIC_^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*_7INPUT TEST PARAMETERS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1_%LD€€A- $C1_^1_%RTJ* (RHXASC)_^1_%ADC (C1CON-*)_^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 -4_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA* BUFF+2_'CK FOR SECTOR ADDRESS ERROR_€€^1_%SUB* BUFF+1_^1_%SAP INI3-*-1_^1_%JMP* INI7_^1INI3_!LDA* BUFF+3_(CONVERT NUMBER_^1_%SAM INI3A1_4(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%OF RUNS_^1INI3A1 STA* BUFF+3_^1_%LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA DSKLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%CK IF LU IS LEGAL_^1_%STQ* PHYPTR_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%CLR Q_^1_%SUB =N$1050_%CK FOR 1738/€€853_^1_%SAN INI3A-*-1_^1_%JMP* INI5_^1INI3A ENQ 1_^1_%INA -$30_)CK FOR 1738/854 ($1080)_^1_%SAN INI3B_^1_%JMP* INI5_^1INI3B INA -$60_)CHECK FOR 1733-1/854 ($10E0)_^1_%SAN INI3C_^1_%JMP* INI5_^1INI3C SUB =N$190_'CHECK FOR 1733-1/853 ($1270)_^1_%ENQ 0_^1_%SAZ INI5_^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_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_^1INI5_!LDA* BUFF+2_'CK FOR EXCESSIVE SECTOR ADDRESS_^1_%SQZ INI6-*-1_$ZERO IF 853 DISK_^1_%SUB =N16480_%854 = 32480 SECTORS_^1INI6_!SUB =N16000_%853 = 16000 SECTORS_^1_%SAM INI8-*-1_$NEG IF LESS THAN MAX_^1INI7_!RTJ* (MESAGE)_$SECTOR ADDRESS ERROR_^1MES3_!NUM $8244_^1€€_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG3B-MES3_^1_%ADC MSG3E-MSG3B_^1_%JMP* ENTER1_^1INI8_!LDA DSKLU_(CK IF SYSTEM DISK_^1_%SUB- SYSDSK_^1_%SAN INI9-*-1_^1_%LDA* BUFF+1_'CK IF TRYING TO TEST IN SYSTEM AREA_^1_%INA -1_^1_%SUB- MAXSEC_^1_%SAP INI9-*-1_^1_%JMP* INI7_^1INI9_!LDA* BUFF+1_'CONVERT BEGINNING SECTOR ADDRESS_^1_%MUI* N96_,TO MSB/LSB_^1_%LLS 1_^1_%ALS 15_^1_%STA €€LSB_^1_%STA* LSBSAV_^1_%STQ MSB_^1_%STQ* MSBSAV_^1_%LDA* BUFF+2_'CONVERT ENDING SECTOR ADDRESS_^1_%MUI* N96_,TO MSB/LSB_^1_%LLS 1_^1_%ALS 15_^1_%STA* MAXLSB_^1_%STQ* MAXMSB_^1_%CLR A_^1_%STA CMP1_^1_%STA COUNT_^1_%STA PASSES_^1_%STA* PSSCTR_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1BUFF_!NUM 0,0,0,0_^1PHYPTR NUM 0_^1N96_"NUM 96_^1INPERR NUM 0_^1_%EJT€€_]_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!WORST CASE PATTERN TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* BUFF_)DETERMINE TEST SEQ--_^1_%AND- ONEBIT+1_$IS TEST1 REQUESTED..._^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 LDA =N$2031_%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* TRKTRN_'EXECUTE XFERS AND CKS._^1_%LDA* COUNT1_^1_%INA -3_+CHK FOR LAST WORST PATTERN._^1_%SAZ T2CK-*-1_^1_%RAO* COUNT1_^1_%JMP* WP1_^1COUNT1 NUM 0_^1WSPAT1 NUM $9555_(WORST PATTERNS..._^1_%NUM $6AAA_^1_%NUM $5A5A_^1_%NUM $A5A5_^1_%SPC 2_^1*****************************€€*******************************************_^1*_]_'*_^1*_5SECTION 2_!ALL ONES TEST_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* BUFF_^1_%AND- ONEBIT+2_$IS TEST2 REQUESTED..._^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEGIN TEST 2_^1_%STA SNUM_^1_%SET A_^1_%RTJ* TRKTRN_^1_%JMP* T3CK_^1_%EJT_]_^1********€€****************************************************************_^1*_]_'*_^1*_2LOAD, XFER, AND CHECK 2048 WORDS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TRKTRN 0_"0_^1_%STA* PATTRN_^1_%LDQ- ONEBIT+11_#$800_^1_%STQ* NWORDS_^1TT1_"LDA* PATTRN_'GET PATTERN._^1_%LDQ- LPMSK+11_$$7FF_^1TT2_"STA BLK2K,Q_/LOAD BUFFER._^1_%SQZ TT3€€-*-1_^1_%INQ -1_^1_%JMP* TT2_^1TT3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1_%RTJ* BLKTRN_^1_%JMP* TT4_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE FOR NEXT TRACK._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* TT1_^1TT4_"LDA* PSSCTR_'CK FOR SECOND PHASE._^1_%SAZ TT4A-*-1_^1_%RAO* PSSCTR_'PHASE 1_^1_%LDA* PSSCTR_^1_%INA -11_*TEST FOR 10 PASSES._^1_%SAZ TT4A-*-1_^1_%JMP* TT1_^1TT4€€A_!LDA* READ_)RESET BLKTRN._^1_%STA* REF3_^1TT5_"RTJ* BLKTRN_^1_%JMP* (TRKTRN)_^1_%LDA* LSB_^1_%ADD* NWORDS_^1_%STA* LSB_^1TT6_"LDA* PATTRN_'GET ORIGINAL PATTERN._^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ COMPAR_^1_%JMP* TT5_*TO HERE WHEN TRK COMP THRU_^1_%JMP* TT6_*TO HERE FOR NEXT CELL CK._^1*_]_^1PATTRN NUM 0_^1PSSCTR NUM 0_^1MAXMSB NUM 0_^1MAXLSB NUM 0_^1MSBSAV NUM 0_^1LSBSAV NUM €€ 0_^1************************************************************************_^1*_]_'*_^1*_4SECTION 3_!RANDOM DATA TEST_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* BUFF_^1_%AND- ONEBIT+3_$IS TEST3 REQUESTED..._^1_%SAN TEST3-*-1_^1_%JMP T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA SNUM_^1_%LDQ- ONEBIT+11_#SET €€WORD 4 OF CALL SEQ._^1_%STQ* NWORDS_2*_^1_%CLR A_^1_%STA- I_^1_%LDA* RN2_^1_%STA* RN9_^1RN1_"LDA* RN2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_0*_^1_%MUI* RNDNUM_'PATTERNS_!*_^1_%STA* RN2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RN3-*-1_^1_%RAO- I_^1_%JMP* RN1_*CONTINUE LOADING BLK._^1RN2_"NUM $21_^1RN3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1RN4_"RTJ* B€€LKTRN_^1_%JMP* RN5_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE WHEN TRK IS XFERRED_^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* RN4_^1RN5_"LDA* READ_^1_%STA* REF3_^1RN6_"RTJ* BLKTRN_^1_%JMP* RN10_)TO HERE IF TEST AREA COMPLETE_^1_%LDA* LSB_*TO HERE IF NOT._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%LDA* RN9_^1_%STA* RN8_^1RN7_"LDA* RN8_*REGENERATE ORIGINAL SEQ._^1_%AND- LPMSK+15_^1_%MUI* RNDN€€UM_)OF RANDOM BIT PATTERNS._^1_%STA* RN8_^1_%LRS 1_^1_%LDQ- ONEBIT+11_^1_%RTJ COMPAR_^1_%JMP* RN6_*TO HERE WHEN BLK COMP THRU_^1_%JMP* RN7_*TO HERE FOR NEXT CELL CK._^1RN8_"NUM $21_^1RN9_"NUM 0_^1RN10_!JMP* T4CK_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/TRANSFER BLOCKS BETWEEN DISK AND CORE_0*_^1*_]_'*_^1****************€€********************************************************_^1_%SPC 2_^1BLKTRN 0_"0_^1_%LDA* TRYAGN_'CK FOR PREVIOUS PARITY ERROR._^1_%SAP BL1A-*-1_'ERROR FLAG SET._^1_%LDA* OLDLSB_^1_%STA* LSB_^1_%JMP* BL1B_)REPEAT OPERATION_^1BL1A_!RTJ* NXTADR_^1BL1B_!LDA* REF3_^1_%SUB* READ_)CHECK FOR DOING READ NOW_^1_%SAN GOGO_^1_%LDQ =N2047_'IF IT IS A READ - ZERO THE BUFFER FIRST_^1LOPER S€€TA BLK2K,Q_^1_%SQZ GOGO_)END OF BUFFER YET_^1_%INQ -1_+NO- GO AROUND AGAIN_^1_%JMP* LOPER_^1GOGO_!RTJ- (AMONI)_%CONSTRUCT MONITOR CALL_^1REF3_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP5-REF3_$TO TRANSFER BLOCK_^1_%ADC 0_.OF INFORMATION TO_^1DSKLU NUM 8_.DISK._^1NWORDS NUM 0_7*_^1_%ADC BLK2K-REF3_.*_^1MSB_"NUM 0_7*_^1LSB_"NUM 0_7*_^1_%JMP- (ADISP)_%GO TO DISPATCHER._^1WRITE €€ ADC 2*FRC+FX+4*FRP+4*FCP_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_^1COMP5 CLR A_^1_%STA CELERR_^1_%LDA* LSB_*SAVE DISK XFER ADDRESS._^1_%STA* OLDLSB_^1_%SQP COMP5A-*-1_^1_%RTJ ESTAT_(CK STATUS BITS._^1COMP5A LDA FLAG_)CHECK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ COMP5B-*-1_^1_%JMP ENDMSG_^1COMP5B RAO* TRYAGN_^1_%LDA* TRYAGN_^1_%AND- ONEBIT+1_$CK FOR REPEAT._^1_%SAZ BL2-*-1_^1_%C€€LR A_,YES, CONTINUE TEST_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_$RETURNS TO 2ND WD AFTER RTJ_^1BL2_"LDA STATUS_'NO REPEAT._^1_%TRA Q_^1_%AND- ONEBIT+13_#CK FOR PARITY ERROR._^1_%SAN BL4-*-1_^1_%TRQ A_+IF NO,_^1_%AND =N$DF60_%CK FOR OTHER ERRORS._^1_%SAN BL3-*-1_^1_%STA* TRYAGN_'NO ERROR, CONTINUE._^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_^1BL3_"JMP* BL1B_)YES, REPEAT OP.€€_^1BL4_"LDA SNUM_)CHECK FOR SECTION 4 IN OPERATION_^1_%AND- LPMSK+4_^1_%INA -4_^1_%SAN BL4A-*-1_^1_%JMP* BL1B_)YES, JUST REPEAT XFER._^1BL4A_!LDA* TRYAGN_^1_%EOR- ONEBIT+15_#SET FLAG_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_'CONTINUE TO COMPARE._^1_%JMP* (BLKTRN)_^1OLDLSB NUM 0_^1TRYAGN NUM 0_^1RNDNUM ADC 5*5*5*5*5_^1_%EJT_]_^1**********************************************************€€**************_^1*_]_'*_^1*_4COMPUTE NEXT SECTOR ADDRESS_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NXTADR 0_"0_^1_%ENQ 0_^1_%LDA* LSB_^1_%LLS 1_,PROPAGATE CARRY_^1_%ADQ* MSB_,AND_^1_%ALS 15_-FORM_^1_%STA* LSB_,TRACK_^1_%STQ* MSB_,AND SECTOR_^1_%CLR Q_,COMPUTE MAXIMUM_^1_%ADD* NWORDS_)DISK ADDRESS._^1_%INA -1_^1_%LLS 1_€€^1_%ADQ* MSB_^1_%ALS 15_^1_%STA* LSBTMP_^1_%TRQ A_^1_%SUB MAXMSB_^1_%SAZ NXT1-*-1_'DISK ADDRESS_^1_%SAP FULL1-*-1_%EXCEEDED._^1_%JMP* (NXTADR)_^1NXT1_!LDA* LSBTMP_^1_%SUB MAXLSB_^1_%SAM NXT2-*-1_^1_%SAN FULL1-*-1_^1NXT2_!JMP* (NXTADR)_^1LSBTMP NUM 0_^1FULL1 LDA LSBSAV_(INITIALIZE DISK_^1_%LDQ MSBSAV_)ADDR IN_^1_%STA* LSB_,CALL_^1_%STQ* MSB_*SEQUENCE._^1_%JMP* (BLKTRN)_^€€1*CONTROL TO FIRST INSTR. AFTER RTJ BLKTRN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_)SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_**_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA BUFF_^1_%AND- ONEBIT+4_$IS TEST4 REQUESTED._^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1TES€€T4 LDA =N$2034_%BEGIN TST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA- I_^1_%LDA* RF2_^1_%STA* RF14A_^1RF1_"LDA* RF2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_'PATTERNS._^1_%MUI* RNDNUM_^1_%STA* RF2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RF4-*-1_^1_%RAO- I_^1_%JMP* RF1_*CONTINUE LOADING BLK._^1RF2_"NUM $21_^1RF6_"NUM $31_^1RF4_"LDA* RF6_^1_%STA* RF11_^1_%LDA* WRI€€TE_^1_%STA* REF3_^1RF5_"LDA* RF6_*GENERATE RANDOM BLK LENGTHS._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF6_^1_%AND- LPMSK+11_0*_^1_%STA* NWORDS_^1_%RTJ BLKTRN_^1_%JMP* RF9_*TO HERE WHEN TST AREA THRU_^1_%LDA LSB_*TO HERE IF NOT_^1_%ADD NWORDS_^1_%STA LSB_^1_%JMP* RF5_^1RF11_!NUM $31_^1RF9_"LDA READ_^1_%STA REF3_4*_^1RF10_!LDA* RF11_)RETURN BLKS. TO CORE._^1_%AND- LPMSK+15€€_^1_%MUI* RNDNUM_^1_%STA* RF11_^1_%AND- LPMSK+11_0*_^1_%STA NWORDS_2*_^1_%RTJ BLKTRN_^1_%JMP* T5CK_)TO HERE, AREA COMPL._^1_%LDA LSB_*TO HERE IF NOT._^1_%ADD NWORDS_^1_%STA LSB_^1_%LDA* RF14A_^1_%STA* RF14_^1RF12_!LDA* RF14_)GENERATE ORIGINAL_^1_%AND- LPMSK+15_'RANDOM_^1_%MUI* RNDNUM_)PATTERNS_^1_%STA* RF14_^1_%LRS 1_^1_%LDQ NWORDS_)AND COMPARE WITH CURRENT_^1_%RTJ* COMPAR_)€€CELL CONTENTS._^1_%JMP* RF10_)TO HERE WHEN COMPARE COMPL._^1_%JMP* RF12_)TO HERE FOR NEXT CELL._^1RF14_!NUM $21_^1RF14A NUM $21_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_.SECTION 5_!ZEROS WRITTEN OVER ONES TEST_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA BUF€€F_)CK FOR TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAZ T6CK-*-1_^1_%LDA =A 5_)BEGIN TEST 5_^1_%STA SNUM_^1_%RAO PSSCTR_'SET PHASE 1 SWITCH._^1_%SET A_,PATTERN FOR PHASE 1._^1_%RTJ TRKTRN_^1_%CLR A_^1_%STA PSSCTR_'CLEAR PHASE 1 SWITCH-- ALL_^1_%RTJ TRKTRN_'PATTERN FOR PHASE 2._^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_€€/SECTION 6_!RANDOM SECTOR ADDRESS TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T6CK_!LDA BUFF_)CK FOR TEST 6 REQUESTED._^1_%AND- ONEBIT+6_^1_%SAN TEST6-*-1_^1_%JMP ENDTST_^1TEST6 LDA =A 6_)BEGIN TEST 6._^1_%STA SNUM_^1_%LDQ- LPMSK+11_$$7FF_^1_%LDA WSPAT1_^1T61_"STA BLK2K,Q_%FILL BUFFER WITH WORST_^1_%SQZ T62-*-1_€€'PATTERN_^1_%INQ -1_^1_%JMP* T61_^1T62_"LDA- ONEBIT+11_#$800_^1_%STA NWORDS_^1T63_"LDA WRITE_(SET BLKTRN FOR WRITE_^1_%STA REF3_^1_%LDA* RNWRKG_'GENERATE RANDOM SECTOR_^1_%AND- LPMSK+15_'ADDRESSES._^1_%MUI RNDNUM_^1_%STA* RNWRKG_^1_%LRS 1_^1_%STA LSB_^1_%SUB- MAXSEC_^1_%SAP T63A_^1_%JMP* T63_^1T63A_!RTJ BLKTRN_'WRITE DATA BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1_%LDA €€ READ_)TO HERE, KEEP GOING._^1_%STA REF3_)SET BLKTRN FOR READ._^1_%RTJ BLKTRN_'READ BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1T64_"LDA WSPAT1_'TO HERE, DO COMPARE_^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ* COMPAR_^1_%JMP* T65_*TO HERE, DONE._^1_%JMP* T64_*TO HERE, KEEP COMPARING._^1T65_"RAO* T6CTR_(INCREMENT COUNTER_^1_%LDA* T6CTR_^1_%SUB =N160_(CK FOR 160 RANDOM WRITES_^1_%SAN T66-€€*-1_^1_%STA* T6CTR_^1_%LDA LSBSAV_'INITIALIZE DISK_^1_%LDQ MSBSAV_'ADDRESS._^1_%STA LSB_^1_%STQ MSB_^1_%JMP ENDTST_'THIS PASS COMPLETE._^1T66_"JMP* TEST6_(KEEP GOING._^1T6CTR NUM 0_^1RNWRKG NUM $41_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2COMPARE PRE- AND POST XFER BLOCKS_1*_^1*_]_'*_^1*******************************€€*****************************************_^1_%SPC 2_^1COMPAR 0_"0_^1_%STA* ORIG_^1_%INQ -1_^1_%STQ* XWORDS_^1_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAZ CMPAR1_)PRINTOUT_^1_%JMP* (COMPAR)_(YES - DONT PRINT_^1CMPAR1 LDQ* TEMPX_(GET CURRENT COUNTER_^1_%STQ* CELERR_^1_%LDA BLK2K,Q_%GET POST-XFER CELL CONTNTS_^1_%STA* BADCEL_^1_%EOR* ORIG_)CNTNS PRE-XFER CELL._^1_%SA€€Z CK1-*-1_^1_%RTJ* CMPERR_'GO TO CMPERR ON ERROR._^1CK1_"LDA* TEMPX_^1_%SUB* XWORDS_^1_%SAZ CK2-*-1_%CK FOR END OF BLK._^1_%RAO* TEMPX_^1_%RAO* COMPAR_'TO HERE FOR CONTINUE COMP._^1_%JMP* (COMPAR)_^1CK2_"STA* TEMPX_^1_%LDA* CMP1_^1_%SAZ CK3-*-1_^1_%RTJ* CMP4_^1CK3_"STA* CMP1_^1_%JMP* (COMPAR)_$TO HERE WHEN BLK COMPL._^1TEMPX NUM 0_^1XWORDS NUM 0_^1ORIG_!NUM 0_^1*_]_^1CMP4_!€€0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ CONVRT_'CONVERT NO. OF COMPARE ERRORS TO DEC._^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUTPUT NUMBER OF COMPARE ERRORS_^1MES4_!NUM $0244_^1_%ADC (START-MES4)_^1_%NUM 3_^1_%ADC MSG8B-MES4_^1_%ADC MSG8E-MSG8B_^1CMP4A LDA FLAG_)CK FOR STOP FLAG_^1_%AND-€€ ONEBIT_^1_%SAZ CMP2-*-1_^1_%JMP ENDMSG_^1CMP2_!JMP* (CMP4)_^1*_]_^1CMP1_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%RAO* CMP1_^1_%LDA* CMP1_)CK FOR THREE COMPARISON_€€^1_%INA -4_-ERRORS IN CURRENT BLOCK._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1*_81 CARD DELETED_^1_%ADD* CELERR_)COMPARISON ERROR._^1_%CLR Q_^1_%LLS 1_^1_%ADQ MSB_^1_%LRS 1_^1_%DVI =N96_^1_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^1_%LLS 16_^1_%STQ SECTOR_^1_%RTJ CONVRT_'CONVERT DATA ADDRESS IN SECTOR TO DEC._^1_%RTJ (RHXASC)€€_^1_%ADC (CELADD-*)_^1_%CLR Q_^1_%LDA SECTOR_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%LDA SECTOR_^1_%INA -4_^1_%RTJ (RHXASC)_^1_%ADC (SECTOR-*)_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%ADC (ORIGWD-*)_^1_%LDA* BADCEL_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP3A_^1_%RTJ (MESAGE)_$OUTPUT DATA COMPARE ERROR MSG_^1MES5_!NUM €€ $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1CMP3A JMP* (CMPERR)_^1CELERR NUM 0_^1BADCEL NUM 0_^1_%SPC 2_^1INIMSG 0_"0_^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* CONVRT_'CONVERT RUN NUMBER TO DEC._^1_%RTJ (RHXASC)_€€^1_%ADC (NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^1COUNT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1CHECK FOR HARDWARE STATUS ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_+BEGIN STATUS CHECK._^1_%RTJ* INIMSG_'CECK FOR NO ERROR PRINTOUT_^1_%JMP EST5_*€€DONT PRINT_^1_%LDQ PHYPTR_^1_%LDA- ESTAT2,Q_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* STATUS_'ESTAT2 SAVED._^1_%CLR Q_^1_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST2-*-1_$CK FOR END OF TAB_^1_%JMP* (ESTAT)_^1EST2_!LDA* STATUS_^1_%AND- ONEBIT,Q_^1_%SAN EST3-*-1_$CK IF ERROR BIT SET_^1_%JMP* EST5_^1EST3_!RAO* COUNT_^1_%LDQ* BITPTR_^1_%QLS 1_,MUI BY 2_^€€1_%LDA* MSGTAB,Q_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF3_)DETERMINE DIRECTION OF TRANSFER_^1_%AND- ONEBIT+10_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES6_^1_%SAN EST4-*-1_^1_%LDQ =XMSG18B-MES6_^1EST4_!STQ* DTNPTR_^1_%LDQ MSB_*DETERMINE SECTOR ADDRESS AT BEGINNING OF XFER_^1_%LDA OLDLSB_^1*_81 CARD DELETED_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%STA €€LOC_^1_%RTJ (RHXASC)_^1_%ADC (SECTOR-*)_^1_%LDA LOC_^1_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^1_%CLR Q_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES6_!NUM $0544_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC 0_^1_%ADC 0_^1DTNPTR ADC 0_^1_%ADC MSG18E-MSG18B_^€€1_%ADC MSG7B-MES6_^1_%ADC MSG7E-MSG7B_^1EST5_!RAO* BITPTR_^1_%JMP* EST1_^1*_]_^1BITPTR NUM 0_^1STATUS NUM 0_^1_%SPC 5_^1CONVRT NUM 0_,CONVERT A REG TO DECIMAL_^1_%TRA Q_^1_%SUB =N$270F_%CHECK IF VALUE .GT. 9999_^1_%SAP GOWAY_(YES - LEAVE VALUE 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_%JM€€P* (CONVRT)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BITTAB NUM 0_,DISK NOT READY_^1_%NUM 6_,NO COMPARE ERROR_^1_%NUM 8_,CHECKWORD ERROR_^1_%NUM 9_,LOST DATA_^1_%NUM 10_+SEEK ERROR_^1_%NUM€€ 11_+ADDRESS ERROR_^1_%NUM 12_+DEFECTIVE TRACK ERROR_^1_%NUM 13_+PARITY ERROR_^1_%NUM 14_+PROTECT ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGTAB ADC MSG9B-MES6_^1€€_%ADC MSG9E-MSG8B_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES6_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES6_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES6_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES6_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG16B-MES6_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES6_^1_%ADC MSG17E-MSG17B_^1_%EJT_]_^1*€€***********************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA BUFF+3_'TEST FOR INFINITE REPEATS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* €€PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_^1MES7_!NUM $8144_^1_%ADC MSG4B-MES7_^1_%ADC MSG4E-MSG4B_^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_%J€€MP 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*_4MESSAGE BUFFERS_A*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B €€ ALF 9,BEGIN DISK 2 TEST_^1_%NUM $D00_^1_%ALF 16,BEWARE OF SCRATCH CONFLICT. $C1=_^1C1CON NUM 0,0,$D00_^1_%ALF $,LU,SECTIONS,BEG SEC,END SEC,RUNS$_^1_%EQU MSG1E(*)_^1MSG2B ALF 5, LU ERROR_^1_%EQU MSG2E(*)_^1MSG3B ALF 6, SEC ADR ERR_^1_%EQU MSG3E(*)_^1MSG4B ALF 9,END DISK 2 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG4E(*€€)_^1MSG5B ALF *, SEC*_^1SNUM_!NUM 0_^1_%ALF *, RUN *_^1NUMPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1MSG7B ALF *, SECTOR *_^1SECTOR NUM 0,0_^1_%ALF *, H/W ADDR. *_^1LOC_"NUM 0,0_^1_%EQU MSG7E(*)_^1_%NUM $D00_^1_%ALF 3,WORD_^1CELADD NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG6E(*)_^1MSG8B ALF 8, COMP ERR TOT€€AL_^1CMP5_!NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 5, NOT READY_^1_%EQU MSG9E(*)_^1MSG10B ALF 4, NO COMP_^1_%EQU MSG10E(*)_^1MSG11B ALF 6, CHKWRD ERR_^1_%EQU MSG11E(*)_^1MSG12B ALF *, LOST DATA*_^1_%EQU MSG12E(*)_^1MSG13B ALF 5, SEEK ERR_^1_%EQU MSG13E(*)_^1MSG14B ALF 4, ADR ERR_^1_%EQU MSG14E(*)_^1MSG15B ALF *, DEF TRK*_^1_%EQU MSG15E(*)_^1MSG16B ALF *, PARITY*_^1_%€€EQU MSG16E(*)_^1MSG17B ALF 6, PROTECT ERR_^1_%EQU MSG17E(*)_^1MSG18B ALF 5, D-C XFER_^1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:DISK I/O BUFFER_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLK2K BZS BLK2K(2048)_^1_%SPC 2€_^1_%EQU END(*)_^1_%END_]_^__PSCMDM1 CSY/ A79 P€1_%NAM SCMDM1_'DECK-ID A79 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1751 TEST ROUTINE_^1*_$PERIPHERAL DRIVERS 1.0A_^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*_$SCMDM1 IS A DIAGNOSTIC EXERCISER FOR THE 1751 DRUM MEMORY_^1*_$SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE M.S.O.S. DRIVERS FOR ALL_^1*_$COMMUNICATION WITH THE DRUM SUBSYSTEM. BEFO€€RE TEST EXECU-_^1*_$TION IS STARTED, THE USER IS REQUESTED TO INPUT THE TEST_^1*_$PARAMETERS -- LOGICAL UNIT, TEST SECTIONS TO BE EXECUTED,_^1*_$BEGINNING TRACK, ENDING TRACK, AND THE_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED. EACH_^1*_$PARAMETER IS CHECKED FOR ITS VALIDITY. IF ANY PARAMETER IS_^1*_$INVALID THE USER IS REQUESTED TO RE-ENTER THE TEST PARAME-_^1*_$TERS€€. IF THE SYSTEM DRUM IS BEING TESTED, THE USER IS NOT_^1*_$ALLOWED TO SPECIFY A DRUM ADDRESS WITHIN IN THE SYSTEM_^1*_$AREA. SCMDM1 IS DIVIDED INTO SEVEN SECTIONS (TESTS) AS_^1*_$FOLLOWS_^1*_*SECTION 1_!WORST CASE PATTERN TEST_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_^1*_*SECTION 5_!ZEROS WRITTEN OVER ONES €€TEST_^1*_*SECTION 6_!RANDOM SECTOR ADDRESS TEST_^1*_*SECTION 7_!TRACK SWITCHING TEST_^1*_$SECTIONS 1,2,3,5,6 AND 7 TRANSFER BLOCKS OF 2048 WORDS_^1*_$DECIMAL. ALL RANDOM NUMBERS ARE PSEUDO RANDOM NUMBERS. AT_^1*_$THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$HARDWARE ERRORS EXCEPT DATA ERRORS. IF A HARDWARE ERROR_^1*_$OCCURRED, THE I/O REQUEST IS REPEATED TWICE. AFTE€€R ALL WRITE_^1*_$OPERATIONS ARE COMPLETE IN A GIVEN TEST SECTION, THE DRUM_^1*_$IS THEN READ AND DATA COMPARED AGAINST WHAT WAS WRITTEN._^1*_$AT THE END OF EACH TEST SEQUENCE, THE PASS COUNTER IS UPDATED_^1*_$AND COMPARED AGAINST THE NUMBER OF TIMES REQUESTED BY THE_^1*_$USER. IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS_^1*_$ALSO CHECKED AND IF SET THE TEST IS TERMINATED. IF€€ $8000_^1*_$IS ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE_^1*_$WILL BE EXECUTED INDEFINITELY._^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER€€_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORITY' LOCATOR_^1_%EQU FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORITY' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BI€€T LOCATOR_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU MAXSEC($C1)_!LOCATION OF HIGHEST SEC ADD USED BY SYSTEM_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU SYSDSK($C2)_!LOCATION OF LU FOR LIBRARY UNIT_^1_%EQU TSTDM1(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTDM1_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE._^1*_]_^1****€€********************************************************************_^1*_]_'*_^1*_7COMMUNICATION REGION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTDM1_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1I€€NFOIN 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 0_^1************************************************************************_^1*_]_'*_^1*_7INPUT TEST PARAMETERS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER €€ CLR A_^1_%STA* INPERR_^1_%LDA- $C1_^1_%RTJ (RHXASC)_^1_%ADC (C1CON-*)_^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 FLGOK1_^1_%JMP ENDMSG_^1FLGOK1 INQ -1_^1_%STA* LU,Q_^1_%INQ -4_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA* BUFF+2_'CHECK IF START ADDRESS GREA€€TER THAN END_^1_%SUB* BUFF+1_^1_%SAP INI3-*-1_^1_%JMP* INI7_^1INI3_!LDA* LU_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA DRMLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%CK IF LU IS LEGAL_^1_%STQ* PHYPTR_^1_%LDA- EREQST,Q_$TEST DEVICE STATUS_^1_%AND =N$3FF0_^1_%CLR Q_^1_%SUB =N$1060_%CHECK FOR 1751 DRUM_^1_%SAZ INI5-*-1_^1INI4_!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_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_^1INI5_!LDA* BUFF+2_'CK FOR EXCESSIVE SECTOR ADDRESS_^1_%SUB =N5456_'MAX NO. OF SECTORS_^1_%INA -1_^1_%SAM INI8-*-1_$NEG IF LESS THAN MAX_^1INI7_!RTJ* (MESAGE)_$TRACK ERROR_^1MES3_!NUM $8244_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%€€ADC MSG3B-MES3_^1_%ADC MSG3E-MSG3B_^1_%JMP* ENTER1_^1INI8_!LDA DRMLU_(CHECK IF LIBRARY UNIT_^1_%SUB- SYSDSK_^1_%SAN INI9-*-1_^1_%LDA* BUFF+1_'CK IF TRYING TO TEST IN SYSTEM AREA_^1*_81 - CARD DELETED_^1_%SUB- MAXSEC_^1_%SAP INI9-*-1_^1_%JMP* INI7_^1INI9_!LDA* BUFF+1_'CONVERT BEGINNING TRACK_^1_%CLR Q_,TO MSB/LSB_^1_%MUI =N96_)CONVERT BEG. SECTOR TO WORD ADDRESS_^1_%LLS 1_^1€€_%ALS 15_^1INI9A STA LSB_^1_%STA* LSBSAV_^1_%STQ MSB_^1_%STQ* MSBSAV_^1_%LDA* BUFF+2_'CONVERT ENDING TRACK_^1_%CLR Q_,TO MSB/LSB_^1_%MUI =N96_)CONVERT END SECTOR TO WORD ADDRESS_^1_%LLS 1_^1_%ALS 15_^1INI9B STA* MAXLSB_^1_%STQ* MAXMSB_^1_%CLR A_^1_%STA CMP1_^1_%STA COUNT_^1_%STA PASSES_^1_%STA* PSSCTR_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1BUFF_€€!NUM 0,0,0,0_^1PHYPTR NUM 0_^1INPERR NUM 0_^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!WORST CASE PATTERN TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* BUFF_)DETERMINE TEST SEQ--_^1_%AND- ONEBIT+1_$IS TEST1 REQUESTED..._^1_%SAN TEST1-*-1_^1_%€€JMP* T2CK_^1TEST1 LDA =N$2031_%BEGIN SECTION 1_^1_%STA SNUM_^1_%CLR A_^1_%STA* COUNT1_^1WP1_"LDQ* COUNT1_^1_%LDA* WSPAT1,Q_$GET CURRENT WORST PATTERN._^1_%RTJ* TRKTRN_'EXECUTE XFERS AND CKS._^1_%LDA* COUNT1_^1_%INA -3_+CHK FOR LAST WORST PATTERN._^1_%SAZ T2CK-*-1_^1_%RAO* COUNT1_^1_%JMP* WP1_^1COUNT1 NUM 0_^1WSPAT1 NUM $9555_(WORST PATTERNS..._^1WSPAT2 NUM $6AAA_^1WSPAT3 N€€UM $5A5A_^1WSPAT4 NUM $A5A5_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5SECTION 2_!ALL ONES TEST_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* BUFF_^1_%AND- ONEBIT+2_$IS TEST2 REQUESTED..._^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEGIN SECTION 2_€€^1_%STA SNUM_^1_%SET A_^1_%RTJ* TRKTRN_^1_%JMP* T3CK_^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_2LOAD, XFER, AND CHECK 2048 WORDS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TRKTRN 0_"0_^1_%STA* PATTRN_^1_%LDQ- ONEBIT+11_#$800_^1_%STQ* NWORDS_^1TT1_"LDA* PATTRN_'GET PAT€€TERN._^1_%LDQ- LPMSK+11_$$7FF_^1TT2_"STA BLK2K,Q_/LOAD BUFFER._^1_%SQZ TT3-*-1_^1_%INQ -1_^1_%JMP* TT2_^1TT3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1_%RTJ* BLKTRN_^1_%JMP* TT4_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE FOR NEXT TRACK._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* TT1_^1TT4_"LDA* PSSCTR_'CK FOR SECOND PHASE._^1_%SAZ TT4A-*-1_^1_%RAO* PSSCTR_'PHASE 1_^1_%LDA* P€€SSCTR_^1_%INA -11_*TEST FOR 10 PASSES._^1_%SAZ TT4A-*-1_^1_%JMP* TT1_^1TT4A_!LDA* READ_)RESET BLKTRN._^1_%STA* REF3_^1TT5_"RTJ* BLKTRN_^1_%JMP* (TRKTRN)_^1_%LDA* LSB_^1_%ADD* NWORDS_^1_%STA* LSB_^1TT6_"LDA* PATTRN_'GET ORIGINAL PATTERN._^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ COMPAR_^1_%JMP* TT5_*TO HERE WHEN TRK COMP THRU_^1_%JMP* TT6_*TO HERE FOR NEXT CELL CK._^1*_]_^1LSBSAV NUM 0_^€€1MAXLSB NUM 0_^1MAXMSB NUM 0_^1MSBSAV NUM 0_^1PATTRN NUM 0_^1PSSCTR NUM 0_^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_4SECTION 3_!RANDOM DATA TEST_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* BUFF_^1_%AND- ONEBIT+3_$IS TEST3 REQUESTED..._^1_%SAN TEST3-*-1_^€€1_%JMP* RN10_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA SNUM_^1_%LDQ- ONEBIT+11_#SET WORD 4 OF CALL SEQ._^1_%STQ* NWORDS_2*_^1_%CLR A_^1_%STA- I_^1_%LDA* RN2_^1_%STA* RN9_^1RN1_"LDA* RN2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_0*_^1_%MUI* RNDNUM_'PATTERNS_!*_^1_%STA* RN2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RN3-*-1_^1_%RAO- I_^1_%JMP* RN1_*CONTINUE LO€€ADING BLK._^1RN2_"NUM $21_^1RN3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1RN4_"RTJ* BLKTRN_^1_%JMP* RN5_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE WHEN TRK IS XFERRED_^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* RN4_^1RN5_"LDA* READ_^1_%STA* REF3_^1RN6_"RTJ* BLKTRN_^1_%JMP* RN10_)TO HERE IF TEST AREA COMPLETE_^1_%LDA* LSB_*TO HERE IF NOT._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%LDA* RN9€€_^1_%STA* RN8_^1RN7_"LDA* RN8_*REGENERATE ORIGINAL SEQ._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_)OF RANDOM BIT PATTERNS._^1_%STA* RN8_^1_%LRS 1_^1_%LDQ- ONEBIT+11_^1_%RTJ COMPAR_^1_%JMP* RN6_*TO HERE WHEN BLK COMP THRU_^1_%JMP* RN7_*TO HERE FOR NEXT CELL CK._^1RN8_"NUM $21_^1RN9_"NUM 0_^1RN10_!JMP* T4CK_^1_%SPC 2_^1********************************************************************€€****_^1*_]_'*_^1*_/TRANSFER BLOCKS BETWEEN DRUM AND CORE_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLKTRN 0_"0_^1_%LDA* TRYAGN_'CK FOR PREVIOUS PARITY ERROR._^1_%SAP BL1A-*-1_'ERROR FLAG SET._^1_%LDA* OLDLSB_^1_%STA* LSB_^1_%JMP* BL1B_)REPEAT OPERATION_^1BL1A_!RTJ* NXTADR_^1BL1B_!LDA* REF3_^1_%SUB* READ_)CHECK FOR DOING READ N€€OW_^1_%SAN GOGO_^1_%LDQ =N2047_'IF IT IS A READ - ZERO THE BUFFER FIRST_^1LOPER STA BLK2K,Q_^1_%SQZ GOGO_)END OF BUFFER YET_^1_%INQ -1_+NO- GO AROUND AGAIN_^1_%JMP* LOPER_^1GOGO_!RTJ- (AMONI)_%CONSTRUCT MONITOR CALL_^1REF3_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP5-REF3_$TO TRANSFER BLOCK_^1_%ADC 0_.OF INFORMATION TO_^1DRMLU NUM 0_,DRUM_^1NWORDS NUM 0_7*_^1_%ADC BLK2K-REF€€3_.*_^1MSB_"NUM 0_7*_^1LSB_"NUM 0_7*_^1_%JMP- (ADISP)_%GO TO DISPATCHER._^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_^1COMP5 CLR A_^1_%STA CELERR_^1_%LDA* LSB_+SAVE DRUM XFER ADDRESS_^1_%STA* OLDLSB_^1_%SQP COMP5A-*-1_^1_%RTJ ESTAT_(CK STATUS BITS._^1COMP5A LDA FLAG_)CHECK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ COMP5B-*-1_^1_%JMP ENDMSG_^1COMP5B RA€€O* TRYAGN_^1_%LDA* TRYAGN_^1_%AND- ONEBIT+1_$CK FOR REPEAT._^1_%SAZ BL2-*-1_^1_%CLR A_,YES, CONTINUE TEST_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_$RETURNS TO 2ND WD AFTER RTJ_^1BL2_"LDA STATUS_'NO REPEAT._^1_%TRA Q_^1_%AND- ONEBIT+8_%CHECK FOR PARITY ERRORS_^1_%SAN BL4-*-1_^1_%TRQ A_+IF NO,_^1_%AND =N$DB41_'CHECK FOR OTHER ERRORS_^1**OR** AND =N$CC40_%MASK FROM OL€€D VERSION_^1_%SAN BL3-*-1_^1_%STA* TRYAGN_'NO ERROR, CONTINUE._^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_^1BL3_"JMP* BL1B_)YES, REPEAT OP._^1BL4_"LDA SNUM_)CHECK FOR SECTION 4 IN OPERATION_^1_%AND- LPMSK+4_^1_%INA -4_^1_%SAN BL4A-*-1_^1_%JMP* BL1B_)YES, JUST REPEAT XFER._^1BL4A_!LDA* TRYAGN_^1_%EOR- ONEBIT+15_#SET FLAG_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_'CONTINUE TO COMPARE._^1_%JMP* (BLK€€TRN)_^1OLDLSB NUM 0_^1TRYAGN NUM 0_^1RNDNUM ADC 5*5*5*5*5_^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_4COMPUTE NEXT SECTOR ADDRESS_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NXTADR 0_"0_^1_%ENQ 0_^1_%LDA* LSB_^1_%LLS 1_,PROPAGATE CARRY_^1_%ADQ* MSB_,AND_^1_%ALS 15_-€€FORM_^1_%STA* LSB_,TRACK_^1_%STQ* MSB_,AND SECTOR_^1_%CLR Q_,COMPUTE MAXIMUM_^1_%ADD* NWORDS_(DRUM ADDRESS_^1_%INA -1_^1_%LLS 1_^1_%ADQ* MSB_^1_%ALS 15_^1_%STA* LSBTMP_^1_%TRQ A_^1_%SUB MAXMSB_^1_%SAZ NXT1-*-1_%DRUM ADDRESS_^1_%SAP FULL1-*-1_%EXCEEDED._^1_%JMP* (NXTADR)_^1NXT1_!LDA* LSBTMP_^1_%SUB MAXLSB_^1_%SAM NXT2-*-1_^1_%SAN FULL1-*-1_^1NXT2_!JMP* (NXTADR)_^1LSBTMP N€€UM 0_^1FULL1 LDA LSBSAV_(INITIALIZE DRUM_^1_%LDQ MSBSAV_)ADDR IN_^1_%STA* LSB_,CALL_^1_%STQ* MSB_*SEQUENCE._^1_%JMP* (BLKTRN)_^1*CONTROL TO FIRST INSTR. AFTER RTJ BLKTRN_^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_)SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_**_^1*_]_'*_^1***********************************************€€*************************_^1_%SPC 2_^1T4CK_!LDA BUFF_^1_%AND- ONEBIT+4_$IS TEST4 REQUESTED._^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA- I_^1_%LDA* RF2_^1_%STA* RF14A_^1RF1_"LDA* RF2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_'PATTERNS._^1_%MUI* RNDNUM_^1_%STA* RF2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SA€€Z RF4-*-1_^1_%RAO- I_^1_%JMP* RF1_*CONTINUE LOADING BLK._^1RF2_"NUM $21_^1RF6_"NUM $31_^1RF4_"LDA* RF6_^1_%STA* RF11_^1_%LDA* WRITE_^1_%STA* REF3_^1RF5_"LDA* RF6_*GENERATE RANDOM BLK LENGTHS._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF6_^1_%AND- LPMSK+11_0*_^1_%STA* NWORDS_^1_%RTJ BLKTRN_^1_%JMP* RF9_*TO HERE WHEN TST AREA THRU_^1_%LDA LSB_*TO HERE IF NOT_^1_%ADD NWORDS_^1_€€%STA LSB_^1_%JMP* RF5_^1RF11_!NUM $31_^1RF9_"LDA READ_^1_%STA REF3_4*_^1RF10_!LDA* RF11_)RETURN BLKS. TO CORE._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF11_^1_%AND- LPMSK+11_0*_^1_%STA NWORDS_2*_^1_%RTJ BLKTRN_^1_%JMP* T5CK_)TO HERE, AREA COMPL._^1_%LDA LSB_*TO HERE IF NOT._^1_%ADD NWORDS_^1_%STA LSB_^1_%LDA* RF14A_^1_%STA* RF14_^1RF12_!LDA* RF14_)GENERATE ORIGINAL_^1_%€€AND- LPMSK+15_'RANDOM_^1_%MUI* RNDNUM_)PATTERNS_^1_%STA* RF14_^1_%LRS 1_^1_%LDQ NWORDS_)AND COMPARE WITH CURRENT_^1_%RTJ COMPAR_(CELL CONTENTS_^1_%JMP* RF10_)TO HERE WHEN COMPARE COMPL._^1_%JMP* RF12_)TO HERE FOR NEXT CELL._^1RF14_!NUM $21_^1RF14A NUM $21_^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_.SECTION 5_!ZEROS WRITT€€EN OVER ONES TEST_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA BUFF_)CK FOR TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAZ T6CK-*-1_^1TEST5 LDA =A 5_)BEGIN TEST 5_^1_%STA SNUM_^1_%RAO PSSCTR_'SET PHASE 1 SWITCH._^1_%SET A_,PATTERN FOR PHASE 1._^1_%RTJ TRKTRN_^1_%CLR A_^1_%STA PSSCTR_'CLEAR PHASE 1 SWITCH-- ALL_€€^1_%RTJ TRKTRN_'PATTERN FOR PHASE 2._^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/SECTION 6_!RANDOM SECTOR ADDRESS TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T6CK_!LDA BUFF_)CK FOR TEST 6 REQUESTED._^1_%AND- ONEBIT+6_^1_%SAN TEST6-*-1_^1_%JMP* T7CK_^1TEST6 LDA €€=A 6_)BEGIN TEST 6._^1_%STA SNUM_^1_%LDQ- LPMSK+11_$$7FF_^1_%LDA WSPAT1_^1T61_"STA BLK2K,Q_%FILL BUFFER WITH WORST_^1_%SQZ T62-*-1_'PATTERN_^1_%INQ -1_^1_%JMP* T61_^1T62_"LDA- ONEBIT+11_#$800_^1_%STA NWORDS_^1T63_"LDA WRITE_(SET BLKTRN FOR WRITE_^1_%STA REF3_^1_%LDA* RNWRKG_'GENERATE RANDOM SECTOR_^1_%AND- LPMSK+15_'ADDRESSES._^1_%MUI RNDNUM_^1_%STA* RNWRKG_^1_%LRS 1_^1_%€€STA LSB_^1_%RTJ BLKTRN_'WRITE BLOCK._^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1_%LDA READ_)TO HERE, KEEP GOING._^1_%STA REF3_)SET BLKTRN FOR READ._^1_%RTJ BLKTRN_'READ BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1T64_"LDA WSPAT1_'TO HERE, DO COMPARE_^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ COMPAR_^1_%JMP* T65_*TO HERE, DONE._^1_%JMP* T64_*TO HERE, KEEP COMPARING._^1T65_"RAO* T6CTR_(INC€€REMENT COUNTER_^1_%LDA* T6CTR_^1_%SUB =N160_(CK FOR 160 RANDOM WRITES_^1_%SAN T66-*-1_^1_%STA* T6CTR_^1_%LDA LSBSAV_'INITIALIZE FOR NEXT SECTION_^1_%LDQ MSBSAV_^1_%STA LSB_^1_%STQ MSB_^1_%JMP* T7CK_^1T66_"JMP* TEST6_(KEEP GOING._^1T6CTR NUM 0_^1RNWRKG NUM $41_^1_%EJT 0_^1************************************************************************_^1*_]_'*_^1*_2SECTION 7_!TRAC€€K SWITCHING TEST_2*_^1*_]_'*_^1************************************************************************_^1T7CK_!LDA BUFF_^1_%AND- ONEBIT+7_%IS TEST 7 REQUESTED_^1_%SAN TEST7-*-1_^1_%JMP* T8CK_)NO-GO CHECK SECTION 8_^1TEST7 LDA =N$2037_'BEGIN TEST 7_^1_%STA SNUM_^1_%LDA- LPMSK+11_$ADJ DRM ADDR TO LAST WORD_^1_%EOR LSB_^1_%STA LSB_,OF CURRENT TRK._^1_%ENQ 2_,BEGIN XFER TWO WD€€ BLOCKS._^1_%STQ NWORDS_^1_%ENA 1_^1_%STA* TPAT_^1T31_"LDA* TPAT_^1_%STA BLK2K_^1_%STA BLK2K+1_^1_%RAO* TPAT_^1_%LDA WRITE_(MODIFY CALL SEQUENCE._^1_%STA REF3_^1_%RTJ BLKTRN_^1_%JMP* T33_*TO HERE IF TEST AREA COMPL_^1_%LDA LSB_*TO HERE FOR NEXT TRK._^1_%ADD- ONEBIT+11_^1_%STA LSB_^1_%JMP* T31_^1T33_"LDA READ_^1_%STA REF3_^1_%LDA_!LSB_^1_%ADD- LPMSK+11_^1_%STA_!LSB_^1_%CL€€R A_^1_%STA* TPAT_^1T34_"RAO* TPAT_^1_%RTJ BLKTRN_'XFER BLK DRUM TO CORE._^1_%JMP* T7DONE_'TO HERE IF AREA COMPL._^1_%LDA LSB_*TO HERE FOR COMPARISON._^1_%ADD- ONEBIT+11_^1_%STA LSB_^1T35_"LDQ NWORDS_'CONDUCT COMPARISON CHECK._^1_%LDA* TPAT_^1_%RTJ COMPAR_^1_%JMP* T34_*TO HERE WHEN COMP THRU._^1_%JMP* T35_*TO HERE FOR NEXT CELL._^1TPAT_!NUM 0_^1T7DONE JMP* T8CK_^1***********€€*****************************************************_^1*_]_^1*_8SECTION 8 WRITE SECTION NUMBER TEST_^1*_]_^1****************************************************************_^1T8CK_!LDA BUFF_^1_%AND- ONEBIT+8_$IS TEST 8 REQUIRED_^1_%SAN TEST8_^1_%JMP ENDTST_'NO_^1TEST8 LDA =N$2038_%BEGIN TEST 8_^1_%STA SNUM_^1_%LDA WRITE_^1_%STA REF3_^1_%LDA- ONEBIT+11_^1_%STA NWORDS_^1_%L€€DQ* M2048_(SET UP BUFFER POINTER_^1_%LDA BUFF+1_'GET STARTING SECTOR NUMBER_^1_%STA* LSBAD_^1NXTLSB LDA* M96_^1_%STA- I_,SET UP WORD COUNTER_^1SAMLSB LDA* LSBAD_^1_%STA BLK2K+2048,Q STORE SECTOR NO. IN WORD_^1_%INQ 1_^1_%SQZ WRTBUF_'BUFFER FILLED, GO WRITE IT OUT_^1CHKSEC LDA- I_^1_%INA 1_^1_%STA- I_^1_%SAZ BUMLSB_'DONE WITH THIS SECTOR_^1_%JMP* SAMLSB_'KEEP GOING WITH THIS €€SECTOR_^1BUMLSB RAO* LSBAD_(BUMP SECTOR NO._^1_%JMP* NXTLSB_^1WRTBUF LDA- I_^1_%STA* ISAVE_^1_%RTJ BLKTRN_^1_%JMP* DONWRT_'AREA FILLED_^1_%LDA LSB_^1_%ADD NWORDS_^1_%STA LSB_^1_%LDQ* M2048_^1_%LDA* ISAVE_^1_%STA- I_^1_%JMP* CHKSEC_'CONTINUE_^1M96_"NUM -96_^1M2048 NUM -2048_^1LSBAD NUM 0_^1ISAVE NUM 0_^1DONWRT LDA BUFF+1_^1_%STA* LSBAD_(RESET SECTOR COUNTER_^1_%LDA READ€€_^1_%STA REF3_^1_%RTJ BLKTRN_'READ BACK WHAT WAS WRITTEN_^1_%JMP* T8DONE_'ALL DONE_^1BUMSEC LDA* M96_*SET UP SECTOR WORD COUNT_^1_%STA- I_^1GTNEXW LDA* LSBAD_^1_%LDQ- ONEBIT+11_^1_%RTJ* COMPAR_'COMPARE WITH SECTOR NO_^1_%JMP* READNX_'BUFFER EMPTIED_^1CHRSEC LDA- I_^1_%INA 1_^1_%STA- I_,BUMP SECTOR WORD COUNTER_^1_%SAZ NXRLSB_'DONE WITH THIS SECTOR_^1_%JMP* GTNEXW_^1NXRLSB RAO* €€LSBAD_(BUMP SECTOR NUMBER_^1_%JMP* BUMSEC_^1READNX LDA- I_^1_%STA* ISAVE_^1_%LDA LSB_^1_%ADD NWORDS_^1_%STA LSB_^1_%RTJ BLKTRN_^1_%JMP* T8DONE_'ALL DONE_^1_%LDA* ISAVE_^1_%STA- I_^1_%JMP* CHRSEC_^1T8DONE LDA LSBSAV_'INITIALIZE DRUM FOR NEXT PASS_^1_%STA LSB_^1_%LDA MSBSAV_^1_%STA MSB_^1_%JMP ENDTST_^1_%EJT 0_^1**************************************************************€€**********_^1*_]_'*_^1*_2COMPARE PRE- AND POST XFER BLOCKS_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1COMPAR 0_"0_^1_%STA* ORIG_^1_%INQ -1_^1_%STQ* XWORDS_^1_%LDQ* TEMPX_(GET CURRENT COUNTER_^1_%STQ* CELERR_^1_%LDA BLK2K,Q_%GET POST-XFER CELL CONTNTS_^1_%STA* BADCEL_^1_%EOR* ORIG_)CNTNS PRE-XFER CELL._^1_%SAZ CK1-*-1_^1_%R€€TJ* CMPERR_'GO TO CMPERR ON ERROR._^1CK1_"LDA* TEMPX_^1_%SUB* XWORDS_^1_%SAZ CK2-*-1_%CK FOR END OF BLK._^1_%RAO* TEMPX_^1_%RAO* COMPAR_'TO HERE FOR CONTINUE COMP._^1_%JMP* (COMPAR)_^1CK2_"STA* TEMPX_^1_%LDA* CMP1_^1_%SAZ CK3-*-1_^1_%RTJ* CMP4_^1CK3_"STA* CMP1_^1_%JMP* (COMPAR)_$TO HERE WHEN BLK COMPL._^1TEMPX NUM 0_^1XWORDS NUM 0_^1ORIG_!NUM 0_^1*_]_^1CMP4_!0_"0_,ENTRY TO O€€UTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUTPUT NUMBER OF COMPARE ERRORS_^1MES4_!NUM $0244_^1_%ADC (START-MES4)_^1_%NUM 3_^1_%ADC MSG8B-MES4_^1_%ADC MSG8E-MSG8B_^1CMP4A LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CMP2-*-1_^1_%JMP ENDMSG_^1CMP2_!JMP* €€(CMP4)_^1*_]_^1CMP1_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%RAO* CMP1_^1_%LDA* CMP1_)CK FOR THREE COMPARISON_^1_%INA -4_-ERRORS IN CURRENT BLOCK._^1_%SAM CMP3-*-1€€_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1_%ADD* CELERR_)COMPARISON ERROR._^1_%STA* LSBTEM_^1_%ADD =N$180_'MSOS 4 SECTOR BIAS_^1_%CLR Q_^1_%LLS 1_^1_%ADQ MSB_^1_%LLS 4_^1_%ALS 11_^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%TRQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%RTJ* CONSEC_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%ADC (ORIGWD-*)_^1_%LDA* BADCEL€€_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP3A_^1_%RTJ (MESAGE)_$OUTPUT DATA COMPARE ERROR MSG_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1CMP3A JMP* (CMPERR)_^1CELERR NUM 0_^1BADCEL NUM 0_^1_%SPC 2_^1INIMSG 0_"0_^1_%LDA FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONE€€BIT+7_^1_%SAN INIMS1-*-1_^1_%RAO* INIMSG_^1_%LDA PASSES_^1_%INA 1_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^1COUNT NUM 0_^1LSBTEM NUM 0_^1*_]_^1*_8ROUTINE TO CONVERT WORD ADDRESS_^1*_8TO SECTORS AND WORD_^1*_]_^1*_]_^1CONSEC NUM 0_^1_%LDQ MSB_^1_%LDA LSBTEM_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%RTJ (RHXASC)_^1_%ADC (SEC-*)_^1_%TRQ A€€_^1_%RTJ (RHXASC)_^1_%ADC (SLOC-*)_^1_%JMP* (CONSEC)_^1*_]_^1*_8CONVERTS A REGISTER TO DECIMAL_^1*_8IF IT IS .LT. 9999_^1*_]_^1*_]_^1CONVRT NUM 0_^1_%TRA Q_,SAVE A REG_^1_%SUB =N$27DF_%CHECK IF VALUE .GT. 9999_^1_%SAP GOWAY_^1_%TRQ A_^1_%RTJ (ROCDEC)_$CONVERT VALUE TO DECIMAL_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%SPC 2_^1*€€***********************************************************************_^1*_]_'*_^1*_1CHECK FOR HARDWARE STATUS ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_+BEGIN STATUS CHECK._^1_%LDQ PHYPTR_^1_%LDA- ESTAT2,Q_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* STATUS_'ESTAT2 SAVED._^1_%CLR Q_^1_%STQ* BITPTR€€_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST2-*-1_$CK FOR END OF TAB_^1_%JMP* (ESTAT)_^1EST2_!LDA* STATUS_^1_%AND- ONEBIT,Q_^1_%SAN EST3-*-1_$CK IF ERROR BIT SET_^1_%JMP* EST5_^1EST3_!RAO* COUNT_^1_%RTJ* INIMSG_^1_%JMP* EST5_^1_%LDQ* BITPTR_^1_%QLS 1_,MUI BY 2_^1_%LDA* MSGTAB,Q_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF3_)DETERMINE DIRECTION OF TRAN€€SFER_^1_%AND- ONEBIT+10_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES6_^1_%SAN EST4-*-1_^1_%LDQ =XMSG18B-MES6_^1EST4_!STQ* DTNPTR_^1*_81 CARD DELETED_^1_%LDA OLDLSB_^1_%STA LSBTEM_^1_%ADD =N$180_'MSOS 4 SYSTEM BIAS_^1_%CLR Q_^1_%LLS 1_,CONVERT WORD TO TRACK_^1_%ADQ MSB_^1_%LLS 4_^1_%TRQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%LDA LSBTEM_^1_%RTJ* CONSEC_'CONVERT WORD TO SE€€CTOR_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES6_!NUM $0544_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC 0_^1_%ADC 0_^1DTNPTR ADC 0_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG7B-MES6_^1_%ADC MSG7E-MSG7B_^1EST5_!RAO* BITPTR_^1_%JMP* EST1_^1*_]_^1BITPTR NUM 0_^1STATUS NUM 0_^1_%SPC 5_^1*************************************************€€***********************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BITTAB NUM 0_-DRUM NOT READY_^1_%NUM 6_-LOST DATA_^1_%NUM 8_,PARITY ERROR_^1_%NUM 11_,TIMING TRACK ERROR_^1_%NUM 10_+GUARDED ADDRESS ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1****************************€€********************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGTAB ADC MSG9B-MES6_^1_%ADC MSG9E-MSG8B_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1*_82-CARDS DELETED_^1_%ADC MSG14B-MES6_^1_%ADC MSG14E-MSG14B_^1*_82€€-CARDS DELETED_^1_%ADC MSG17B-MES6_^1_%ADC MSG17E-MSG17B_^1*_82-CARDS DELETED_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*€€-1_^1_%LDA BUFF+3_'TEST FOR INFINITE REPEATS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_^1MES7_!NUM $8144_^1_%ADC MSG4B-MES7_^1_%ADC MSG4E-MSG4B_^1_%LDA FLAG_)CK FOR S€€TOP 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 0_^1************************************************************************_^1*_]_'*_^1*_4MESSAGE BUFFERS_A*_^1*_]_'*_€€^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN 1751 TEST$_^1_%NUM $D00_^1_%ALF *,BEWARE OF SCRATCH CONFLICT, $C1= *_^1C1CON NUM 0,0,$D00_^1_%ALF *, LU, SECTIONS, BEG SEC, END SEC, RUNS*_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF $, SECTOR ERR $_^1_%EQU MSG3E(*)_^1MSG4B ALF $,END €€1751 TEST$_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG4E(*)_^1MSG5B ALF 5, SECTION_^1SNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1MSG7B ALF 3,TRACK_^1LOC_"NUM 0,0,0_^1_%ALF $, SECTOR $_^1SEC_"NUM 0,0_^1_%ALF $, SECTOR WORD $_^1SLOC_!NUM 0,0_^1_%EQU MSG7E(*)_^1_%NUM $D00_^1_%ALF $, €€TRACK WORD $_^1CELADD NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG6E(*)_^1MSG8B ALF 8, COMP ERR TOTAL_^1CMP5_!NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 5, NOT READY_^1_%EQU MSG9E(*)_^1MSG10B ALF 5, LOST DATA_^1_%EQU MSG10E(*)_^1MSG11B ALF *, PARITY ERROR *_^1_%EQU MSG11E(*)_^1*_82-CARDS DELETED_^1MSG14B ALF $, TIMING TRACK ERROR $€€_^1_%EQU MSG14E(*)_^1*_82-CARDS DELETED_^1MSG17B ALF $, GUARDED ADDRESS ERROR $_^1_%EQU MSG17E(*)_^1*_82-CARDS DELETED_^1MSG18B ALF 5, D-C XFER_^1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1_%EQU MSG19E(*)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:DISK I/O BUFFER_;*_^1*_]_'*_^1******************************************€l******************************_^1_%SPC 2_^1BLK2K BZS BLK2K(2048)_^1_%SPC 2_^1_%EQU END(*)_^1_%END_]_^__lPSCMDRM CSY/ A80 P€1_%NAM SCMDRM_'DECK-ID A80 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1752 TEST ROUTINE_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^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*_$SCMDRM IS A DIAGNOSTIC EXERCISER FOR THE 1752 DRUM MEMORY_^1*_$SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE MSOS DRIVERS FOR ALL_^1*_$COMMUNICATION WITH THE DRUM SUBSYSTEM. BEFORE TEST EXECU-_€€^1*_$TION IS STARTED, THE USER IS REQUESTED TO INPUT THE TEST_^1*_$PARAMETERS -- LOGICAL UNIT, TEST SECTIONS TO BE EXECUTED,_^1*_$BEGINNING SECTOR ADDRESS, ENDING SECTOR ADDRESS AND THE_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED. EACH_^1*_$PARAMETER IS CHECKED FOR ITS VALIDITY. IF ANY PARAMETER IS_^1*_$INVALID THE USER IS REQUESTED TO RE-ENTER THE TEST PARAME-_^1*_$TE€€RS. IF THE SYSTEM DRUM IS BEING TESTED, THE USER IS NOT_^1*_$ALLOWED TO SPECIFY A DRUM ADDRESS WITHIN IN THE SYSTEM_^1*_$AREA. SCMDRM IS DIVIDED INTO SEVEN SECTIONS (TESTS) AS_^1*_$FOLLOWS_^1*_*SECTION 1_!WORST CASE PATTERN TEST_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_^1*_*SECTION 5_!ZEROS WRITTEN OVER ONE€€S TEST_^1*_*SECTION 6_!RANDOM SECTOR ADDRESS TEST_^1*_*SECTION 7_!WRITE SECTOR NUMBER TEST_^1*_$SECTIONS 1,2,3,5,6 AND 7 TRANSFER BLOCKS OF 2048 WORDS_^1*_$DECIMAL. ALL RANDOM NUMBERS ARE PSEUDO RANDOM NUMBERS. AT_^1*_$THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$HARDWARE ERRORS EXCEPT DATA ERRORS. IF A HARDWARE ERROR_^1*_$OCCURRED, THE I/O REQUEST IS REPEATED TWICE€€. AFTER ALL WRITE_^1*_$OPERATIONS ARE COMPLETE IN A GIVEN TEST SECTION, THE DRUM_^1*_$IS THEN READ AND DATA COMPARED AGAINST WHAT WAS WRITTEN._^1*_$AT THE END OF EACH TEST SEQUENCE, THE PASS COUNTER IS UPDATED_^1*_$AND COMPARED AGAINST THE NUMBER OF TIMES REQUESTED BY THE_^1*_$USER. IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS_^1*_$ALSO CHECKED AND IF SET THE TEST IS TERMINAT€€ED. IF $8000_^1*_$IS ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE_^1*_$WILL BE EXECUTED INDEFINITELY._^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATIO€€N_^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 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 SYSDSK($C2)_!LOCATION OF L.U. FOR SYSTEM DISK_^1_%EQU MAXSEC($C1)_!LOCATION OF HIGHEST SEC ADD USED BY SYSTEM_^1_%EQU TSTDRM(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTDRM_^1_%EJT_]_^1**********************************€€**************************************_^1*_]_'*_^1*_7COMMUNICATION REGION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTDRM_%TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1_%NUM $106_)UPDATE NEW PSR LEVEL_^1*_]_^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_^1_%LD€€A- $C1_^1_%RTJ* (RHXASC)_^1_%ADC (C1CON-*)_^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--END TEST_^1FLDOK1 INQ -1_^1_%STA* LU,Q_^1_%INQ -4_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA* BUFF+2_'CK FOR SECTOR ADDRESS ERROR_^1_€€%SUB* BUFF+1_^1_%SAP INI3-*-1_^1_%JMP* INI7_^1INI3_!LDA* BUFF+3_'CONVERT_^1_%SAM INI3A_^1_%RTJ* (RDECHX)_%NO OF RUNS_^1INI3A STA* BUFF+3_)TO HEX_^1_%LDA* LU_+CONVERT_^1_%RTJ* (RDECHX)_%LU TO_^1_%STA DSKLU_*HEX_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%CK IF LU IS LEGAL_^1_%STQ* PHYPTR_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%CLR Q_^1_%SUB =N$1030_'CHECK FOR 1752_^1_%SAZ INI5-*-1_^1_%RAO* I€€NPERR_^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_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_^1INI5_!LDA* BUFF+2_'CK FOR EXCESSIVE SECTOR ADDRESS_^1_%SUB- ONEBIT+14_^1_%INA -1_^1_%SAM INI8-*-1_$NEG IF LESS THAN MAX_^1INI7_!RTJ* (MESAGE)_$SECTOR ADDRESS ERROR_^1MES3_!€€NUM $8244_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG3B-MES3_^1_%ADC MSG3E-MSG3B_^1_%JMP* ENTER1_^1INI8_!LDA DSKLU_)CHECK IF SYSTEM DEVICE_^1_%SUB- SYSDSK_^1_%SAN INI9-*-1_^1_%LDA* BUFF+1_'CK IF TRYING TO TEST IN SYSTEM AREA_^1_%INA -1_^1_%SUB- MAXSEC_^1_%SAP INI9-*-1_^1_%JMP* INI7_^1INI9_!LDA* BUFF+1_'CONVERT BEGINNING SECTOR ADDRESS_^1_%MUI* N96_,TO MSB/LSB_^1_%LLS 1_^1_€€%ALS 15_^1_%STA LSB_^1_%STA* LSBSAV_^1_%STQ MSB_^1_%STQ* MSBSAV_^1_%LDA* BUFF+2_'CONVERT ENDING SECTOR ADDRESS_^1_%MUI* N96_,TO MSB/LSB_^1_%LLS 1_^1_%ALS 15_^1_%STA* MAXLSB_^1_%STQ* MAXMSB_^1_%CLR A_^1_%STA CMP1_^1_%STA COUNT_^1_%STA PASSES_^1_%STA* PSSCTR_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1BUFF_!NUM 0,0,0,0_^1PHYPTR NUM 0_^1N96_"NUM 96_^1INP€€ERR NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!WORST CASE PATTERN TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* BUFF_)DETERMINE TEST SEQ--_^1_%AND- ONEBIT+1_$IS TEST1 REQUESTED..._^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 LDA =N$2031_%BEG€€IN TEST 1_^1_%STA SNUM_^1_%CLR A_^1_%STA* COUNT1_^1WP1_"LDQ* COUNT1_^1_%LDA* WSPAT1,Q_$GET CURRENT WORST PATTERN._^1_%RTJ* TRKTRN_'EXECUTE XFERS AND CKS._^1_%LDA* COUNT1_^1_%INA -3_+CHK FOR LAST WORST PATTERN._^1_%SAZ T2CK-*-1_^1_%RAO* COUNT1_^1_%JMP* WP1_^1COUNT1 NUM 0_^1WSPAT1 NUM $9555_(WORST PATTERNS..._^1_%NUM $6AAA_^1_%NUM $5A5A_^1_%NUM $A5A5_^1_%SPC 2_^1***********€€*************************************************************_^1*_]_'*_^1*_5SECTION 2_!ALL ONES TEST_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* BUFF_^1_%AND- ONEBIT+2_$IS TEST2 REQUESTED..._^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEGIN TEST 2_^1_%STA SNUM_^1_%SET A_^1_%RTJ* TRKTRN_^1_%JMP* T3CK_^1€€_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2LOAD, XFER, AND CHECK 2048 WORDS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TRKTRN 0_"0_^1_%STA* PATTRN_^1_%LDQ- ONEBIT+11_#$800_^1_%STQ* NWORDS_^1TT1_"LDA* PATTRN_'GET PATTERN._^1_%LDQ- LPMSK+11_$$7FF_^1TT2_"STA BLK2K,Q_/LOAD BU€€FFER._^1_%SQZ TT3-*-1_^1_%INQ -1_^1_%JMP* TT2_^1TT3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* REF3_^1_%RTJ* BLKTRN_^1_%JMP* TT4_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE FOR NEXT TRACK._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* TT1_^1TT4_"LDA* PSSCTR_'CK FOR SECOND PHASE._^1_%SAZ TT4A-*-1_^1_%RAO* PSSCTR_'PHASE 1_^1_%LDA* PSSCTR_^1_%INA -11_*TEST FOR 10 PASSES._^1_%SAZ TT4A-*-1_€€^1_%JMP* TT1_^1TT4A_!LDA* READ_)RESET BLKTRN._^1_%STA* REF3_^1TT5_"RTJ* BLKTRN_^1_%JMP* (TRKTRN)_^1_%LDA* LSB_^1_%ADD* NWORDS_^1_%STA* LSB_^1TT6_"LDA* PATTRN_'GET ORIGINAL PATTERN._^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ COMPAR_^1_%JMP* TT5_*TO HERE WHEN TRK COMP THRU_^1_%JMP* TT6_*TO HERE FOR NEXT CELL CK._^1*_]_^1PATTRN NUM 0_^1PSSCTR NUM 0_^1MAXMSB NUM 0_^1MAXLSB NUM 0_^1MSBSAV NU€€M 0_^1LSBSAV NUM 0_^1************************************************************************_^1*_]_'*_^1*_4SECTION 3_!RANDOM DATA TEST_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* BUFF_^1_%AND- ONEBIT+3_$IS TEST3 REQUESTED..._^1_%SAN TEST3-*-1_^1_%JMP T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA SNUM_^1_%LD€€Q- ONEBIT+11_#SET WORD 4 OF CALL SEQ._^1_%STQ* NWORDS_2*_^1_%CLR A_^1_%STA- I_^1_%LDA* RN2_^1_%STA* RN9_^1RN1_"LDA* RN2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_0*_^1_%MUI* RNDNUM_'PATTERNS_!*_^1_%STA* RN2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RN3-*-1_^1_%RAO- I_^1_%JMP* RN1_*CONTINUE LOADING BLK._^1RN2_"NUM $21_^1RN3_"LDA* WRITE_(RESET BLKTRN._^1_%STA* €€REF3_^1RN4_"RTJ* BLKTRN_^1_%JMP* RN5_*TO HERE WHEN TST AREA FULL_^1_%LDA* LSB_*TO HERE WHEN TRK IS XFERRED_^1_%ADD* NWORDS_^1_%STA* LSB_^1_%JMP* RN4_^1RN5_"LDA* READ_^1_%STA* REF3_^1RN6_"RTJ* BLKTRN_^1_%JMP* RN10_)TO HERE IF TEST AREA COMPLETE_^1_%LDA* LSB_*TO HERE IF NOT._^1_%ADD* NWORDS_^1_%STA* LSB_^1_%LDA* RN9_^1_%STA* RN8_^1RN7_"LDA* RN8_*REGENERATE ORIGINAL SEQ._^1_%AND- LPMS€€K+15_^1_%MUI* RNDNUM_)OF RANDOM BIT PATTERNS._^1_%STA* RN8_^1_%LRS 1_^1_%LDQ- ONEBIT+11_^1_%RTJ COMPAR_^1_%JMP* RN6_*TO HERE WHEN BLK COMP THRU_^1_%JMP* RN7_*TO HERE FOR NEXT CELL CK._^1RN8_"NUM $21_^1RN9_"NUM 0_^1RN10_!JMP* T4CK_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/TRANSFER BLOCKS BETWEEN DRUM AND CORE_^1*_]_'*_^1*€€***********************************************************************_^1_%SPC 2_^1BLKTRN 0_"0_^1_%LDA* TRYAGN_'CK FOR PREVIOUS PARITY ERROR._^1_%SAP BL1A-*-1_'ERROR FLAG SET._^1_%LDA* OLDLSB_^1_%STA* LSB_^1_%JMP* BL1B_)REPEAT OPERATION_^1BL1A_!RTJ* NXTADR_^1BL1B_!LDA* REF3_^1_%SUB* READ_)CHECK FOR DOING READ NOW_^1_%SAN GOGO_^1_%LDQ =N2047_'IF IT IS A READ - ZERO THE BUFFER F€€IRST_^1LOPER STA BLK2K,Q_^1_%SQZ GOGO_)END OF BUFFER YET_^1_%INQ -1_+NO- GO AROUND AGAIN_^1_%JMP* LOPER_^1GOGO_!RTJ- (AMONI)_%CONSTRUCT MONITOR CALL_^1REF3_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP5-REF3_$TO TRANSFER BLOCK_^1_%ADC 0_.OF INFORMATION TO_^1DSKLU NUM 8_-DRUM_^1NWORDS NUM 0_7*_^1_%ADC BLK2K-REF3_.*_^1MSB_"NUM 0_7*_^1LSB_"NUM 0_7*_^1_%JMP- (ADISP)_%GO TO DISPAT€€CHER._^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_^1COMP5 CLR A_^1_%STA CELERR_^1_%LDA* LSB_+SAVE DRUM XFER ADDRESS_^1_%STA* OLDLSB_^1_%SQP COMP5A-*-1_^1_%RTJ ESTAT_(CK STATUS BITS._^1COMP5A LDA FLAG_)CHECK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ COMP5B-*-1_^1_%JMP ENDMSG_^1COMP5B RAO* TRYAGN_^1_%LDA* TRYAGN_^1_%AND- ONEBIT+1_$CK FOR REPEAT._^1_%SAZ €€BL2-*-1_^1_%CLR A_,YES, CONTINUE TEST_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_$RETURNS TO 2ND WD AFTER RTJ_^1BL2_"LDA STATUS_'NO REPEAT._^1_%TRA Q_^1_%AND- ONEBIT+8_%CHECK FOR PARITY ERRORS_^1_%SAN BL4-*-1_^1_%TRQ A_+IF NO,_^1_%AND =N$DB41_'CHECK FOR OTHER ERRORS_^1_%SAN BL3-*-1_^1_%STA* TRYAGN_'NO ERROR, CONTINUE._^1_%RAO* BLKTRN_^1_%JMP* (BLKTRN)_^1BL3_"JMP* BL1B€€_)YES, REPEAT OP._^1BL4_"LDA SNUM_)CHECK FOR TEST 4 IN OPERATION_^1_%AND- LPMSK+4_^1_%INA -4_^1_%SAN BL4A-*-1_^1_%JMP* BL1B_)YES, JUST REPEAT XFER._^1BL4A_!LDA* TRYAGN_^1_%EOR- ONEBIT+15_#SET FLAG_^1_%STA* TRYAGN_^1_%RAO* BLKTRN_'CONTINUE TO COMPARE._^1_%JMP* (BLKTRN)_^1OLDLSB NUM 0_^1TRYAGN NUM 0_^1RNDNUM ADC 5*5*5*5*5_^1_%EJT_]_^1********************************************€€****************************_^1*_]_'*_^1*_4COMPUTE NEXT SECTOR ADDRESS_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NXTADR 0_"0_^1_%ENQ 0_^1_%LDA* LSB_^1_%LLS 1_,PROPAGATE CARRY_^1_%ADQ* MSB_,AND_^1_%ALS 15_-FORM_^1_%STA* LSB_,TRACK_^1_%STQ* MSB_,AND SECTOR_^1_%CLR Q_,COMPUTE MAXIMUM_^1_%ADD* NWORDS_(DRUM ADDRESS_^1_%INA -€€1_^1_%LLS 1_^1_%ADQ* MSB_^1_%ALS 15_^1_%STA* LSBTMP_^1_%TRQ A_^1_%SUB MAXMSB_^1_%SAZ NXT1-*-1_%DRUM ADDRESS_^1_%SAP FULL1-*-1_%EXCEEDED._^1_%JMP* (NXTADR)_^1NXT1_!LDA* LSBTMP_^1_%SUB MAXLSB_^1_%SAM NXT2-*-1_^1_%SAN FULL1-*-1_^1NXT2_!JMP* (NXTADR)_^1LSBTMP NUM 0_^1FULL1 LDA LSBSAV_(INITIALIZE DRUM_^1_%LDQ MSBSAV_)ADDR IN_^1_%STA* LSB_,CALL_^1_%STQ* MSB_*SEQUENCE._^1_%JM€€P* (BLKTRN)_^1*CONTROL TO FIRST INSTR. AFTER RTJ BLKTRN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_)SECTION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_**_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA BUFF_^1_%AND- ONEBIT+4_$IS TEST4 REQUESTED._^1_%SAN TEST4-*-1_^1_%JM€€P* T5CK_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA- I_^1_%LDA* RF2_^1_%STA* RF14A_^1RF1_"LDA* RF2_*GENERATE RANDOM BIT_^1_%AND- LPMSK+15_'PATTERNS._^1_%MUI* RNDNUM_^1_%STA* RF2_^1_%LRS 1_^1_%STA BLK2K,I_^1_%LDA- LPMSK+11_^1_%SUB- I_^1_%SAZ RF4-*-1_^1_%RAO- I_^1_%JMP* RF1_*CONTINUE LOADING BLK._^1RF2_"NUM $21_^1RF6_"NUM $31_^1RF4_"LDA* RF6_^1_%STA* RF11€€_^1_%LDA* WRITE_^1_%STA* REF3_^1RF5_"LDA* RF6_*GENERATE RANDOM BLK LENGTHS._^1_%AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF6_^1_%AND- LPMSK+11_0*_^1_%STA* NWORDS_^1_%RTJ BLKTRN_^1_%JMP* RF9_*TO HERE WHEN TST AREA THRU_^1_%LDA LSB_*TO HERE IF NOT_^1_%ADD NWORDS_^1_%STA LSB_^1_%JMP* RF5_^1RF11_!NUM $31_^1RF9_"LDA READ_^1_%STA REF3_4*_^1RF10_!LDA* RF11_)RETURN BLKS. TO CORE._^1_%€€AND- LPMSK+15_^1_%MUI* RNDNUM_^1_%STA* RF11_^1_%AND- LPMSK+11_0*_^1_%STA NWORDS_2*_^1_%RTJ BLKTRN_^1_%JMP* T5CK_)TO HERE, AREA COMPL._^1_%LDA LSB_*TO HERE IF NOT._^1_%ADD NWORDS_^1_%STA LSB_^1_%LDA* RF14A_^1_%STA* RF14_^1RF12_!LDA* RF14_)GENERATE ORIGINAL_^1_%AND- LPMSK+15_'RANDOM_^1_%MUI* RNDNUM_)PATTERNS_^1_%STA* RF14_^1_%LRS 1_^1_%LDQ NWORDS_)AND COMPARE WITH CURRENT_^1_%€€RTJ COMPAR_(CELL CONTENTS_^1_%JMP* RF10_)TO HERE WHEN COMPARE COMPL._^1_%JMP* RF12_)TO HERE FOR NEXT CELL._^1RF14_!NUM $21_^1RF14A NUM $21_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_.SECTION 5_!ZEROS WRITTEN OVER ONES TEST_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5€€CK_!LDA BUFF_)CK FOR TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAZ T6CK-*-1_^1_%LDA =A 5_)BEGIN TEST 5_^1_%STA SNUM_^1_%RAO PSSCTR_'SET PHASE 1 SWITCH._^1_%SET A_,PATTERN FOR PHASE 1._^1_%RTJ TRKTRN_^1_%CLR A_^1_%STA PSSCTR_'CLEAR PHASE 1 SWITCH-- ALL_^1_%RTJ TRKTRN_'PATTERN FOR PHASE 2._^1_%SPC 2_^1************************************************************************_^€€1*_]_'*_^1*_/SECTION 6_!RANDOM SECTOR ADDRESS TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T6CK_!LDA BUFF_)CK FOR TEST 6 REQUESTED._^1_%AND- ONEBIT+6_^1_%SAN TEST6-*-1_^1_%JMP T7CK_^1TEST6 LDA =A 6_)BEGIN TEST 6._^1_%STA SNUM_^1_%LDQ- LPMSK+11_$$7FF_^1_%LDA WSPAT1_^1T61_"STA BLK2K,Q_%FILL BUFFER WITH WORST_^1_%SQZ€€ T62-*-1_'PATTERN_^1_%INQ -1_^1_%JMP* T61_^1T62_"LDA- ONEBIT+11_#$800_^1_%STA NWORDS_^1_%LDA WRITE_(SET BLKTRN FOR WRITE_^1_%STA REF3_^1_%LDA* RNWRKG_'GENERATE RANDOM SECTOR_^1_%AND- LPMSK+15_'ADDRESSES._^1_%MUI RNDNUM_^1_%STA* RNWRKG_^1_%LRS 1_^1_%STA LSB_^1_%RTJ BLKTRN_'WRITE BLOCK._^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1_%LDA READ_)TO HERE, KEEP GOING._^1_%STA REF3_)S€€ET BLKTRN FOR READ._^1_%RTJ BLKTRN_'READ BLOCK_^1_%JMP* T65_*TO HERE, OUT OF BOUNDS_^1T64_"LDA WSPAT1_'TO HERE, DO COMPARE_^1_%LDQ- ONEBIT+11_#$800_^1_%RTJ* COMPAR_^1_%JMP* T65_*TO HERE, DONE._^1_%JMP* T64_*TO HERE, KEEP COMPARING._^1T65_"RAO* T6CTR_(INCREMENT COUNTER_^1_%LDA* T6CTR_^1_%SUB =N160_(CK FOR 160 RANDOM WRITES_^1_%SAN T66-*-1_^1_%STA* T6CTR_^1_%LDA LSBSAV_'INITIALI€€ZE FOR_^1_%LDQ MSBSAV_'NEXT SECTION_^1_%STA LSB_^1_%STQ MSB_^1_%JMP T7CK_^1T66_"JMP* TEST6_(KEEP GOING._^1T6CTR NUM 0_^1RNWRKG NUM $41_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2SECTION 7_!WRITE SECTOR NUMBER TEST_.*_^1*_]_'*_^1************************************************************************_^1*_]_^1************€€******************************************_^1T7CK_!LDA BUFF_^1_%AND- ONEBIT+7_%IS TEST 7 REQUESTED_^1_%SAN TEST7-*-1_^1_%JMP ENDTST_(NO_^1TEST7 LDA =N$2037_'BEGIN TEST 7_^1_%STA SNUM_^1_%LDA WRITE_^1_%STA REF3_^1_%LDA- ONEBIT+11_^1_%STA NWORDS_^1_%LDQ* M2048_)SET UP BUFFER POINTER_^1_%LDA BUFF+1_(GET STARTING SECTOR NUMBER_^1_%STA* LSBAD_^1NEXLSB LDA* M96_^1_%STA- I_-SET €€UP WORD COUNTER_^1SAMLSB LDA* LSBAD_^1_%STA BLK2K+2048,Q_!STORE SECTOR NO. IN WORD_^1_%INQ 1_^1_%SQZ WRTBUF-*-1_#BUFFER FILLED, GO WRITE IT OUT_^1CHKSEC LDA- I_^1_%INA 1_^1_%STA- I_^1_%SAZ BUMLSB-*-1_#DONE WITH THIS SECTOR_^1_%JMP* SAMLSB_(KEEP GOING WITH THIS SECTOR_^1BUMLSB RAO* LSBAD_)BUMP SECTOR NO._^1_%JMP* NEXLSB_^1WRTBUF LDA- I_^1_%STA* ISAVE_^1_%RTJ BLKTRN_^1_%JMP* DO€€NWRT_(AREA FILLED_^1_%LDA LSB_^1_%ADD NWORDS_^1_%STA LSB_^1_%LDQ* M2048_^1_%LDA* ISAVE_^1_%STA- I_^1_%JMP* CHKSEC_(CONTINUE_^1M96_"NUM -96_^1M2048 NUM -2048_^1LSBAD NUM 0_^1ISAVE NUM 0_^1DONWRT LDA BUFF+1_^1_%STA* LSBAD_)RESET SECTOR COUNTER_^1_%LDA READ_^1_%STA REF3_^1_%RTJ BLKTRN_(READ BACK WHAT WAS WRITTEN_^1_%JMP* T7DONE_(ALL DONE_^1BUMSEC LDA* M96_+SET UP SECTOR €€WORD COUNTER_^1_%STA- I_^1GTNEXW LDA* LSBAD_^1_%LDQ- ONEBIT+11_^1_%RTJ* COMPAR_(COMPARE WITH SECTOR NO._^1_%JMP* READNX_(BUFFER EMPTIED_^1CHRSEC LDA- I_^1_%INA 1_^1_%STA- I_-BUMP SECTOR WORD COUNTER_^1_%SAZ NXRLSB-*-1_#DONE WITH THIS SECTOR_^1_%JMP* GTNEXW_^1NXRLSB RAO* LSBAD_)BUMP SECTOR NO._^1_%JMP* BUMSEC_^1READNX LDA- I_^1_%STA* ISAVE_^1_%LDA LSB_^1_%ADD NWORDS_^1_%STA LSB€€_^1_%RTJ BLKTRN_^1_%JMP* T7DONE_(ALL DONE_^1*_81 CARD DELETED_^1_%LDA* ISAVE_^1_%STA- I_^1_%JMP* CHRSEC_^1T7DONE LDA LSBSAV_(INITIALIZE DRUM FOR NEXT PASS_^1_%STA LSB_^1_%LDA MSBSAV_^1_%STA MSB_^1_%JMP ENDTST_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2COMPARE PRE- AND POST XFER BLOCKS_1*_^1*_]_'*_^1**********************€€**************************************************_^1_%SPC 2_^1COMPAR 0_"0_^1_%STA* ORIG_^1_%INQ -1_^1_%STQ* XWORDS_^1_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAZ CMPAR1_)PRINTOUT_^1_%JMP* (COMPAR)_(DONT PRINT_^1CMPAR1 LDQ* TEMPX_(GET CURRENT COUNTER_^1_%STQ* CELERR_^1_%LDA BLK2K,Q_%GET POST-XFER CELL CONTNTS_^1_%STA* BADCEL_^1_%EOR* ORIG_)CNTNS PRE-XFER CELL._^1_€€%SAZ CK1-*-1_^1_%RTJ* CMPERR_'GO TO CMPERR ON ERROR._^1CK1_"LDA* TEMPX_^1_%SUB* XWORDS_^1_%SAZ CK2-*-1_%CK FOR END OF BLK._^1_%RAO* TEMPX_^1_%RAO* COMPAR_'TO HERE FOR CONTINUE COMP._^1_%JMP* (COMPAR)_^1CK2_"STA* TEMPX_^1_%LDA* CMP1_^1_%SAZ CK3-*-1_^1_%RTJ* CMP4_^1CK3_"STA* CMP1_^1_%JMP* (COMPAR)_$TO HERE WHEN BLK COMPL._^1TEMPX NUM 0_^1XWORDS NUM 0_^1ORIG_!NUM 0_^1*_]_^1CMP€€4_!0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUTPUT NUMBER OF COMPARE ERRORS_^1MES4_!NUM $0244_^1_%ADC (START-MES4)_^1_%NUM 3_^1_%ADC MSG8B-MES4_^1_%ADC MSG8E-MSG8B_^1CMP4A LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CMP2-*-1_^1_%JMP E€€NDMSG_^1CMP2_!JMP* (CMP4)_^1*_]_^1CMP1_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%RAO* CMP1_^1_%LDA* CMP1_)CK FOR THREE COMPARISON_^1_%INA -4_-ERRORS IN CURRENT BLOCK€€._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1_%ADD* CELERR_)COMPARISON ERROR._^1_%CLR Q_^1_%LLS 1_^1_%ADQ MSB_^1_%LRS 1_^1_%DVI =N96_^1_%LLS 16_^1_%STQ* SECTOR_'SAVE NO. OF SECTORS_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%LDA* SECTOR_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%ADC (OR€€IGWD-*)_^1_%LDA* BADCEL_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP3A_^1_%RTJ (MESAGE)_$OUTPUT DATA COMPARE ERROR MSG_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1CMP3A JMP* (CMPERR)_^1CELERR NUM 0_^1BADCEL NUM 0_^1SECTOR NUM 0_^1_%SPC 2_^1INIMSG 0_"0_^1_%LDA FLA€€G_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN INIMS1-*-1_^1_%RAO* INIMSG_^1_%LDA PASSES_^1_%INA 1_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^1COUNT 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*_1CHECK FOR HARDWARE STATUS ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_+BEGIN STATUS CHECK._^1_%RTJ€€* INIMSG_'CHECK FOR NO ERROR PRINTOUT_^1_%JMP* EST5_*DONT PRINT_^1_%LDQ PHYPTR_^1_%LDA- ESTAT2,Q_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* STATUS_'ESTAT2 SAVED._^1_%CLR Q_^1_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST2-*-1_$CK FOR END OF TAB_^1_%JMP* (ESTAT)_^1EST2_!LDA* STATUS_^1_%AND- ONEBIT,Q_^1_%SAN EST3-*-1_$CK IF ERROR BIT SET_^1_%JMP* EST5_^1ES€€T3_!RAO* COUNT_^1_%LDQ* BITPTR_^1_%QLS 1_,MUI BY 2_^1_%LDA* MSGTAB,Q_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF3_)DETERMINE DIRECTION OF TRANSFER_^1_%AND- ONEBIT+10_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES6_^1_%SAN EST4-*-1_^1_%LDQ =XMSG18B-MES6_^1EST4_!STQ* DTNPTR_^1_%LDQ MSB_*DETERMINE SECTOR ADDRESS AT BEGINNING OF XFER_^1_%LDA OLDLSB_^1_%ALS 1_^€€1_%LRS 1_^1_%DVI =N96_^1_%CLR Q_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES6_!NUM $0544_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC 0_^1_%ADC 0_^1DTNPTR ADC 0_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG7B-MES6_^1_%ADC MSG7E-MSG7B_^1EST5_!RAO* BITPTR_^1_%JMP* EST€€1_^1*_]_^1BITPTR NUM 0_^1STATUS NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BITTAB NUM 0_-DRUM NOT READY_^1_%NUM 6_-LOST DATA_^1_%NUM 8_,CHECKWORD ERROR_^1_%NUM 9_-PROTECT FAULT_^1_%NUM€€ 11_,TIMING TRACK ERROR_^1_%NUM 12_,POWER FAILURE_^1_%NUM 14_,GUARDED ADDRESS ERROR_^1_%NUM 15_,SECTOR OVERRANGE ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGTAB AD€€C MSG9B-MES6_^1_%ADC MSG9E-MSG8B_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES6_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG14B-MES6_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES6_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG17B-MES6_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG16B-MES6_^1_%ADC MSG16E-MSG16B_^1_%EJT_]_^1******************************€€******************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA BUFF+3_'TEST FOR INFINITE REPEATS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1€€END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_^1MES7_!NUM $8144_^1_%ADC MSG4B-MES7_^1_%ADC MSG4E-MSG4B_^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*_4MESSAGE BUFFERS_A*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF 8,BEGIN DRUM TEST_^1_%N€€UM $D00_^1_%ALF *, BEWARE OF SCRATCH CONFLICT. $C1=*_^1C1CON NUM 0,0,$D00_^1_%ALF $,LU, SECTIONS, BEG SEC, END SEC, RUNS $_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF 6, SEC ADR ERR_^1_%EQU MSG3E(*)_^1MSG4B ALF 8,END DRUM TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG4E(*)_^1MSG5B ALF $, SEC $€€_^1SNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1MSG7B ALF 4,SECTOR_^1LOC_"NUM 0,0,0_^1_%EQU MSG7E(*)_^1_%NUM $D00_^1_%ALF 3,WORD_^1CELADD NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG6E(*)_^1MSG8B ALF 8, COMP ERR TOTAL_^1CMP5_!NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 5, NOT READY_^1_€€%EQU MSG9E(*)_^1MSG10B ALF 5, LOST DATA_^1_%EQU MSG10E(*)_^1MSG11B ALF 6, CHKWRD ERR_^1_%EQU MSG11E(*)_^1MSG12B ALF 7,PROTECT FAULT_^1_%EQU MSG12E(*)_^1MSG14B ALF 9,TIMING TRACK ERROR_^1_%EQU MSG14E(*)_^1MSG15B ALF 7,POWER FAILURE_^1_%EQU MSG15E(*)_^1MSG17B ALF 11,GUARDED ADDRESS ERROR_^1_%EQU MSG17E(*)_^1MSG16B ALF 11,SECTOR OVERRANGE ERROR_^1_%EQU MSG16E(*)_^1MSG18€XB ALF 5, D-C XFER_^1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:DISK I/O BUFFER_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLK2K BZS BLK2K(2048)_^1_%SPC 2_^1_%EQU END(*)_^1_%END_]_^__XPSCMDVP CSY/ A81 P€1_%NAM SCMDVP_'DECK-ID A81 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_$1738/853-854 POSITIONING TEST_^1*_$1733-1/853-854 POSITIONING TEST_^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*_$SCMDVP IS A DIAGNOSTIC EXERCISER FOR THE 1738/853,854 AND 1733-2_^1*_$853,854_!DISK SYSTEM. IT OPERATES UNDER THE CONTROL OF THE_^1*_$DIAGNOSTIC SUPERVISOR SCMEXC AND USES THE M.S.O.S DRIVERS F€€OR ALL_^1*_$COMMUNICATION WITH THE DISK SUBSYSTEM. BEFORE TEST EXECUTION IS_^1*_$STARTED, THE USER IS REQUESTED TO INPUT THE TEST PARAMETERS --_^1*_]_^1*_*LOGICAL UNIT NUMBER_^1*_*SECTIONS TO BE RUN_^1*_*NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED_^1*_]_^1*_*BEGINNING CYLINDER_^1*_*ENDING CYLINDER_^1*_*READ/WRITE HEAD_^1*_]_^1*_*TYPE OF I/O (READ ONLY, WRITE/READ, WRITE ON€€LY)_^1*_*ONE WORD DATA PATTERN_^1*_]_^1*_$EACH PARAMETER IS CHECKED FOR VALIDITY AND IF AN ERROR IS_^1*_$DETECTED THE OPERATER IS REQUESTED TO RE-ENTER THE PARAMETERS._^1*_$IF THE SYSTEM DISK IS BEING TESTED, THE USER IS NOT ALLOWED TO_^1*_$SPECIFY A CYLINDER WITHIN THE SYSTEM AREA. SCMDVP IS DIVIDED INTO_^1*_$TWO SECTIONS (TESTS) AS FOLLOWS:_^1*_*SECTION 1_#VARIABLE POSITIONING TE€€ST_^1*_*SECTION 2_#TWO POSITION SEEK TEST_^1*_$BOTH SECTIONS TRANSFER 1 SECTOR OF DATA FOR EACH I/O REQUEST._^1*_$SECTION 1 ALTERNATES DATA TRANSFERS BETWEEN HI AND LOW CYLINDER_^1*_$ADDRESS UNTIL THE LOW CYLINDER ADDRESS HAS BEEN INCREMENTED TO_^1*_$THE HI CYLINDER ADDRESS (HI CYLINDER ADDRESS IS DECREMENTED TO_^1*_$LOW CYLINDER ADDRESS). SECTION 2 EXECUTES ONLY TWO SEEKS: HI_^1€€*_$CYLINDER FIRST THEN LOW CYLINDER. AFTER EACH I/O A CHECK IS MADE_^1*_$TO DETERMINE IF ANY HARDWARE ERRORS OCCURED. THIS IS DONE BY_^1*_$CHECKING THE STATUS WORD IN THE PHYSICAL DEVICE TABLE. IF THE_^1*_$I/O WAS A WRITE/READ SEQUENCE THE DATA READ IS VERIFIED FOR_^1*_$VALIDITY. AT THE END OF EACH TEST SEQUENCE, THE PASS COUNTER IS_^1*_$UPDATED AND COMPARED AGAINST THE NUMBER €€REQUESTED BY THE USER._^1*_$IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS ALSO CHECKED_^1*_$AND IF SET THE TEST IS TERMINATED. IF $8000 IS ENTERED FOR THE_^1*_$NUMBER OF EXECUTIONS, THE TEST SEQUENCE WILL EXECUTE 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 ONEBIT($23)_!START OF O€€NE 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 SYSDSK($C2)_!LOCATION OF L.U. FOR SYSTEM DISK_^1_%EQU MAXSEC($C1)_!LOCATION OF HIG€€HEST SEC ADD USED BY SYSTEM_^1_%EQU TSTDVP(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTDVP_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATION REGION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTDVP_$TEST MNEMONIC_^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*_7INPUT TEST PARAMETERS_8*_^1€€*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA INPERR_^1_%LDA- MAXSEC_^1_%DVI =N160_^1_%RTJ CONVRT_^1_%RTJ* (RHXASC)_^1_%ADC (C1CON-*)_^1ENTER1 RTJ* (MESAGE)_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET TEST PARAMETERS_^1INI11 RTJ* (GETFLD)_^1_%SQP FLDOK1_^1_€€%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK1 INQ -1_^1_%STA LU,Q_^1_%INQ -2_^1_%SQZ INI12-*-1_^1_%JMP* INI11_^1INI12 LDA LU_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA DSKLU_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%CK IF LU IS LEGAL_^1_%STQ PHYPTR_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%CLR Q_^1_%SUB =N$1050_%CK FOR 1738/853_^1_%SAN INI12A_^1_%JMP* INI13_^1INI12A ENQ 1_^1_%INA €€-$30_)CK FOR 1738/854 ($1080)_^1_%SAN INI12B_^1_%JMP* INI13_^1INI12B INA -$60_)CK FOR 1733-1/854_!($10E0)_^1_%SAN INI12C_^1_%JMP* INI13_^1INI12C ENQ 0_^1_%SUB =N$190_'CK FOR 1733-1/853_!($1270)_^1_%SAZ INI13_^1_%RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG20B-MES2_^1_%ADC MSG20E-MSG20B_^1_%LDA* INPERR_^1_%I€€NA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_^1INI13 STQ* TYPE_^1INI14 RTJ* (MESAGE)_^1MES3_!NUM $8144_^1_%ADC MSG2B-MES3_^1_%ADC MSG2E-MSG2B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET BEG CYL,END CYL,HEAD_^1_%SQP INI21-*-1_#CK FOR TTY ERROR_^1_%JMP* INI14_^1INI21 RTJ* (GETFLD)_^1_%SQP FLDOK2_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK2 INQ -1_^1_%STA* BEGCYL,Q_^1_%INQ €€-2_^1_%SQZ INI22-*-1_^1_%JMP* INI21_^1INI22 LDA BEGCYL_'CONVERT_^1_%RTJ* (RDECHX)_^1_%STA BEGCYL_)VALUES TO_^1_%LDA ENDCYL_^1_%RTJ* (RDECHX)_)HEXIDECIMAL_^1_%STA ENDCYL_^1_%LDA* ENDCYL_'CK FOR CYLINDER ERROE_^1_%SUB* BEGCYL_^1_%SAP INI23-*-1_^1_%JMP* INI25_^1INI23 LDA* ENDCYL_'CK FOR EXCESSIVE CYLINDER ADDRESS_^1_%LDQ* TYPE_^1_%SQZ INI24-*-1_#ZERO IF 853 DISK_^1_%INA -103€€_)103 CYLINDERS_^1INI24 INA -100_)100 CYLINDERS_^1_%SAM INI26-*-1_#NEGATIVE IF LESS THAN MAX_^1INI25 RTJ* (MESAGE)_$CYLINDER ADDRESS ERROR_^1MES4_!NUM $8244_^1_%ADC (START-MES4)_^1_%NUM 3_^1_%ADC MSG21B-MES4_^1_%ADC MSG21E-MSG21B_^1_%JMP* INI14_^1INI26 LDA* HEAD_)CK FOR HEAD NO. ERROR_^1_%SAM INI27-*-1_^1_%INA -10_^1_%SAM INI31-*-1_^1INI27 RTJ* (MESAGE)_$HEAD NO. ERRO€€R_^1MES5_!NUM $8244_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG22B-MES5_^1_%ADC MSG22E-MSG22B_^1_%JMP* INI14_^1INI31 RTJ* (MESAGE)_^1MES6_!NUM $8144_^1_%ADC MSG3B-MES6_^1_%ADC MSG3E-MSG3B_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1_%SQP INI32-*-1_#CK FOR TTY ERROR_^1_%JMP* INI31_^1INI32 RTJ (GETFLD)_$GET I/O TYPE, DATA PATTERN_^1_%SQP FLDOK3_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TES€€T_^1FLDOK3 INQ -1_^1_%STA* IOTYPE,Q_^1_%INQ -1_^1_%SQZ INI33-*-1_^1_%JMP* INI32_^1INI33 LDA DSKLU_(CK IF SYSTEM DISK_^1_%SUB- SYSDSK_^1_%SAN INI34-*-1_^1_%LDA* BEGCYL_'CK IF TRYING TO TEST IN SYSTEM AREA_^1_%MUI* N160_^1_%INA -1_^1_%SUB- MAXSEC_^1_%SAP INI34-*-1_^1_%LDA* IOTYPE_'CK IF READ ONLY_^1_%SAZ INI34-*-1_^1_%JMP* INI25_^1INI34 CLR A_^1_%STA CMP1_^1_%STA COUNT_^€€1_%STA PASSES_^1_%JMP* BEGIN_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1TEST_!NUM 0_^1RUNS_!NUM 0_^1BEGCYL NUM 0_^1ENDCYL NUM 0_^1HEAD_!NUM 0_^1IOTYPE NUM 0_^1DATA_!NUM 0_^1PHYPTR NUM 0_^1N160_!NUM 160_^1INPERR NUM 0_^1TYPE_!NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0SECTION 1_!VARIABLE POSITIONING TEST€€_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TEST_)CK IF TEST 1 IS REQUESTED_^1_%AND- ONEBIT+1_^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 LDA =A 1_^1_%STA SNUM_^1T11_"LDA* IOTYPE_'CK FOR READ ONLY_^1_%SAM T12_^1_%SAZ T12-*-1_^1_%LDA* WRITE_^1_%STA* REF1_)SET WRITE IN READ/WRITE REQUEST_^1_%LDA* DATA_^1_%RTJ* SET€€BUF_'SET UP BUFFER_^1_%RTJ* POSITN_'DO VARIABLE POSITIONING_^1_%LDA* IOTYPE_^1_%SAM T12_^1_%INA -4_+CK FOR WRITE ONLY_^1_%SAZ T13-*-1_^1T12_"LDA* READ_^1_%STA* REF1_)SET READ IN READ/WRITE REQUEST_^1_%CLR A_^1_%RTJ* SETBUF_'SET UP BUFFER_^1_%RTJ* POSITN_'DO VARIABLE POSITIONING_^1T13_"RTJ ENDTST_^1_%LDA* IOTYPE_'CHECK FOR CONTINUIOUS READ_^1_%SAM T14_^1_%SAZ T14_^1_%JMP* T11€€_^1T14_"JMP* T12_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_1SECTION 2_!TWO POSITION SEEK TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* TEST_)CK IF TEST 2 IS REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2-*-1_^1_%JMP ENDMSG_^1TEST2 LDA =A 2_^1_%STA SNUM_^1T21€€_"LDA* IOTYPE_'CK FOR READ ONLY_^1_%SAM T22_^1_%SAZ T22-*-1_^1_%LDA* WRITE_^1_%STA* REF1_)SET WRITE IN READ/WRITE REQUEST_^1_%LDA* DATA_^1_%RTJ* SETBUF_'SET UP BUFFER_^1_%RTJ* T25_*TRANSFER DATA_^1_%LDA* IOTYPE_^1_%SAM T22_^1_%INA -4_+CK FOR WRITE ONLY_^1_%SAZ T23-*-1_^1T22_"LDA* READ_^1_%STA* REF1_)SET READ IN READ/WRITE REQUEST_^1_%CLR A_^1_%RTJ* SETBUF_'SET UP BUFFER_^1_%R€€TJ* T25_*TRANSFER DATA_^1T23_"RTJ ENDTST_^1_%LDA* IOTYPE_^1_%SAM T24_^1_%SAZ T24_^1_%JMP* T21_^1T24_"JMP* T22_^1_%SPC 2_^1T25_"0_"0_^1_%LDA* ENDCYL_^1_%RTJ* DOIO_)SEEK TO HIGHEST CYLINDER_^1_%LDA* BEGCYL_^1_%RTJ* DOIO_)SEEK TO LOWEST CYLINDER_^1_%JMP* (T25)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_:SET UP I/O BUFFER_9*_^1€€*_]_'*_^1************************************************************************_^1_%SPC 2_^1SETBUF 0_"0_^1_%ENQ 95_^1SET1_!STA BLK96,Q_%DATA IS IN 'A' REGISTER_^1_%SQZ SET2-*-1_^1_%INQ -1_^1_%JMP* SET1_^1SET2_!JMP* (SETBUF)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_.VARIABLE DISK DRIVE POSITIONING ROUTINE_/*_^1*_]_'*_^€€1************************************************************************_^1_%SPC 2_^1POSITN 0_"0_^1_%LDA* BEGCYL_'GET TEST AREA LIMITS_^1_%STA* LOCYL_^1_%LDA* ENDCYL_^1_%STA* HICYL_^1POS1_!LDA* HICYL_(SEEK TO HIGHEST CYLINDER_^1_%RTJ* DOIO_^1_%LDA* LOCYL_(SEEK TO THE LOWEST CYLINDER_^1_%RTJ* DOIO_^1_%LDA* LOCYL_(CONTINUE UNTIL LOWEST ADDRESS = HIGHEST ADD._^1_%SUB* ENDCYL_^1_%SAZ€€ POS2-*-1_^1_%RAO* LOCYL_(INCREMENT LOWEST ADDRESS_^1_%LDA* HICYL_^1_%INA -1_+DECREMENT HIGHEST ADDRESS_^1_%STA* HICYL_^1_%JMP* POS1_^1POS2_!JMP* (POSITN)_^1LOCYL NUM 0_^1HICYL NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_6ROUTINE TO TRANSFER DATA_6*_^1*_]_'*_^1*********************************************************€€***************_^1_%SPC 2_^1DOIO_!0_"0_^1_%CLR Q_^1_%MUI =N15360_%CONVERT TO WORD ADDRESS_^1_%LLS 1_^1_%ALS 15_^1_%STA* LSB_^1_%STQ* MSB_^1_%LDA* HEAD_)SELECT REQUESTED HEAD_^1_%MUI =N1536_^1_%ADD* LSB_^1_%SAP DOIO1-*-1_^1_%AND- LPMSK+15_^1_%RAO* MSB_^1DOIO1 STA* LSB_^1_%RTJ- (AMONI)_%READ/WRITE REQUEST_^1REF1_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMPL-REF1_^1_%ADC 0_^1DSKL€€U NUM 8_^1_%NUM 96_^1_%ADC BLK96-REF1_^1MSB_"NUM 0_^1LSB_"NUM 0_^1_%JMP- (ADISP)_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP_^1WRITE ADC 2*FRC+FX+4*FRP+4*FCP_^1COMPL CLR A_^1_%STA* CELERR_^1_%STA* CMP1_^1_%SQP COMPL1-*-1_^1_%RTJ ESTAT_^1COMPL1 LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ COMPL2-*-1_^1_%JMP ENDMSG_^1COMPL2 LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_€€^1_%SAZ CMPL2A_)PRINTOUT_^1_%JMP* (DOIO)_*DONT PRINT_^1CMPL2A LDA* REF1_^1_%SUB* READ_)CK IF DOING A READ_^1_%SAZ COMPL3-*-1_^1_%JMP* (DOIO)_^1COMPL3 LDA IOTYPE_'CK IF DATA COMPARE REQUIRED_^1_%SAN 1_^1_%JMP* COMPL7_^1_%INA -2_^1_%SAN COMPL7_^1COMPL4 LDQ* CELERR_^1_%LDA BLK96,Q_%CK FOR DATA ERROR_^1_%SUB DATA_^1_%SAZ COMPL5-*-1_^1_%RTJ* CMPERR_'OUTPUT DATA COMPARE EROR MSG€€._^1COMPL5 LDQ* CELERR_^1_%INQ -95_^1_%SQZ COMPL6-*-1_^1_%RAO* CELERR_^1_%JMP* COMPL4_^1COMPL6 LDA* CMP1_)CK IF ANY DATA ERRORS_^1_%SAZ COMPL7-*-1_^1_%RTJ* CMPFIN_^1COMPL7 JMP* (DOIO)_^1_%SPC 2_^1CMPFIN 0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_^1M€€ES7_!NUM $0244_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%ADC MSG8B-MES7_^1_%ADC MSG8E-MSG8B_^1CMP4A LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CMP2-*-1_^1_%JMP ENDMSG_^1CMP2_!JMP* (CMPFIN)_^1*_]_^1CMP1_!NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_0OUTPUT DIAGNOSTIC FOR COMPARE ERROR_1*_^1*_]_'*_^1***************€€*********************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%RAO* CMP1_^1_%LDA* CMP1_)CK FOR THREE COMPARISON_^1_%INA -4_-ERRORS IN CURRENT BLOCK._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA* LSB_*COMPUTE LOCATION OF_^1_%ADD* CELERR_)COMPARISON ERROR._^1_%CLR Q_^1_%LLS 1_^1_%ADQ* MSB_^1_%LRS 1_^1_%DVI =N96_^1_%LLS 16_^1_%STQ* SECTOR_^€€1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%LDA* SECTOR_^1_%CLR Q_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%LDA DATA_^1_%RTJ (RHXASC)_^1_%ADC (ORIGWD-*)_^1_%LDA* BADCEL_^1_%RTJ (RHXASC)_^1_%ADC (XFERWD-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP3A_^1_%RTJ (MESAGE)_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC €€MSG5B-MES8_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG6B-MES8_^1_%ADC MSG6E-MSG6B_^1CMP3A JMP* (CMPERR)_^1CELERR NUM 0_^1BADCEL NUM 0_^1COUNT NUM 0_^1SECTOR NUM 0_^1_%SPC 2_^1INIMSG 0_"0_^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* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^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_%SPC 2_^1********************************************************************€€****_^1*_]_'*_^1*_1CHECK FOR HARDWARE STATUS ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_+BEGIN STATUS CHECK._^1_%RTJ* INIMSG_'CHECK FOR NO ERROR PRINTOUT_^1_%JMP* EST5_*DONT PRINT_^1_%LDQ PHYPTR_^1_%LDA- ESTAT2,Q_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* STATUS_'ESTAT2 SAVED._^1_%CLR Q_^1_%STQ* BI€€TPTR_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST2-*-1_$CK FOR END OF TAB_^1_%JMP* (ESTAT)_^1EST2_!LDA* STATUS_^1_%AND- ONEBIT,Q_^1_%SAN EST3-*-1_$CK IF ERROR BIT SET_^1_%JMP* EST5_^1EST3_!RAO* COUNT_^1_%LDQ* BITPTR_^1_%QLS 1_,MUI BY 2_^1_%LDA* MSGTAB,Q_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA REF1_)DETERMINE DIRECTION OF TRANSFER_^1_%AND- ONEBIT+10_#C€€K FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES9_^1_%SAN EST4-*-1_^1_%LDQ =XMSG18B-MES9_^1EST4_!STQ* DTNPTR_^1_%LDQ MSB_*DETERMINE SECTOR ADDRESS AT BEGINNING OF XFER_^1_%LDA LSB_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%CLR Q_^1_%DVI =N160_^1_%ALS 8_^1_%AAQ A_^1_%RTJ (RHXASC)_^1_%ADC (LOC-*)_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES9_!NUM $0544_^1_%ADC (START-MES9)_^1€€_%NUM 3_^1_%ADC MSG5B-MES9_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC 0_^1_%ADC 0_^1DTNPTR ADC 0_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG7B-MES9_^1_%ADC MSG7E-MSG7B_^1EST5_!RAO* BITPTR_^1_%JMP* EST1_^1*_]_^1BITPTR NUM 0_^1STATUS NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1**********€€**************************************************************_^1_%SPC 2_^1BITTAB NUM 0_,DISK NOT READY_^1_%NUM 6_,NO COMPARE ERROR_^1_%NUM 8_,CHECKWORD ERROR_^1_%NUM 9_,LOST DATA_^1_%NUM 10_+SEEK ERROR_^1_%NUM 11_+ADDRESS ERROR_^1_%NUM 12_+DEFECTIVE TRACK ERROR_^1_%NUM 13_+PARITY ERROR_^1_%NUM 14_+PROTECT ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1******************€€******************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINTERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGTAB ADC MSG9B-MES9_^1_%ADC MSG9E-MSG9B_^1_%ADC MSG10B-MES9_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG11B-MES9_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG12B-MES9_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-€€MES9_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES9_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES9_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG16B-MES9_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES9_^1_%ADC MSG17E-MSG17B_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1**********************************************€€**************************_^1_%SPC 2_^1ENDTST 0_"0_^1_%RAO PASSES_J12-10-73_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA RUNS_)CK FOR INFINITE REPEATS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP* (ENDTST)_^1ENDMSG LDA* PASSES_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^1_%RTJ CONV€€RT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES10 NUM $8144_^1_%ADC MSG4B-MES10_^1_%ADC MSG4E-MSG4B_^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 STA€€CK, RELEASE CORE_^1_%ADC (START-*)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_4MESSAGE BUFFERS_A*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN DISK POSITIONING TEST$_^1_%NUM $D00_^1_%ALF $,BEWARE OF SCRATCH CONFLICT $_^1_%NUM $D00_^1_%ALF $,FIRST AVAIL€€ABLE CYLINDER = $_^1C1CON NUM 0,0,$D00_^1_%ALF $,LU,SECTIONS,RUNS$_^1_%EQU MSG1E(*)_^1MSG2B ALF 10,BEG CYL,END CYL,HEAD_^1_%EQU MSG2E(*)_^1MSG3B ALF 11,TYPE(I/O),DATA PATTERN_^1_%EQU MSG3E(*)_^1MSG4B ALF $,END DISK POSITIONING TEST$_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG4E(*)_^1MSG5B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF €€3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1MSG7B ALF 5,H/W ADDR._^1LOC_"NUM 0,0_^1_%EQU MSG7E(*)_^1_%NUM $D00_^1_%ALF 3,WORD_^1CELADD NUM 0,0_^1_%ALF 3, WAS_^1ORIGWD NUM 0,0_^1_%ALF 2, IS_^1XFERWD NUM 0,0_^1_%EQU MSG6E(*)_^1MSG8B ALF 8, COMP ERR TOTAL_^1CMP5_!NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 5, NOT READY_^1_%EQU MSG9E(*)_^1MSG10B €€ALF 4, NO COMP_^1_%EQU MSG10E(*)_^1MSG11B ALF 6, CHKWRD ERR_^1_%EQU MSG11E(*)_^1MSG12B ALF *, LOST DATA *_^1_%EQU MSG12E(*)_^1MSG13B ALF 5, SEEK ERR_^1_%EQU MSG13E(*)_^1MSG14B ALF 4, ADR ERR_^1_%EQU MSG14E(*)_^1MSG15B ALF *, DEF TRK*_^1_%EQU MSG15E(*)_^1MSG16B ALF *, PARITY *_^1_%EQU MSG16E(*)_^1MSG17B ALF 6, PROTECT ERR_^1_%EQU MSG17E(*)_^1MSG18B ALF 5, D-C XFER_^€€1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1MSG20B ALF 5, LU ERROR_^1_%EQU MSG20E(*)_^1MSG21B ALF 6, CYL ADR ERR_^1_%EQU MSG21E(*)_^1MSG22B ALF 7, HEAD NO. ERR_^1_%EQU MSG22E(*)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_:DISK I/O BUFFER_;*_^1*_]_'*_^1*********************************************************************€P***_^1_%SPC 2_^1BLK96 BZS BLK96(96)_^1_%SPC 2_^1_%EQU END(*)_^1_%END_]_^__ PPSCMMTT CSY/ A82 P€1_%NAM SCMMTT_'DECK-ID A82 PERIPH. DRIVERS 1.0A 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.0A_^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_^__ €PSCMPRT CSY/ A83 P€1_%NAM SCMPRT_'DECK-ID A83 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1740/501 - 1742 - 1742/30 - 1742/120 ON-LINE DIAGOSTIC_^1*_$PERIPHERAL DRIVERS 1.0A_^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_]_^__ NPSCMPTP CSY/ A84 P€1_%NAM SCMPTP_'DECK-ID A84 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1777 PAPER TAPE PUNCH TEST_^1*_$1723/1724 PAPER TAPE PUNCH TEST_^1*_$1713 TELETYPEWRITER PAPER TAPE PUNCH TEST_^1*_$PERIPHERAL DRIVERS 1.0A_^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* SCMPTP IS A DIAGNOSTIC EXERCISER FOR THE 1777 PAPER TAPE READER. IT_^1* OPERATES UNDER CONTROL OF THE DIAGNOSTIC EXECUTIVE SCMEXC AND_^1* U€€SES THE M.S.O.S. DRIVERS FOR ALL COMMUNICATIONS WITH THE PUNCH._^1* BEFORE TEST EXECUTION 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. ONL€€Y ONE TEST MAY BE CALLED FOR AT_^1* ONE TIME - THE USER MUST RESTART THE ROUTINE IN 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 BUFF€€ER 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 OLPTR, THE DIAGNOSTIC EXERCISER FOR THE 1777_^1* PAPER TAPE READER._^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)_"PHYTA€€B 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 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_%EQU TSTPTP(*)_#ENTRY POINT FOR RCOS_^1_%ENT TSTPTP_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMM€€UNICATIONS REGIONS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTPTP_$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 REC€€S_^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$3FF0_^1_%SUB =N$2020_%CHECK FOR 1723/1724 ($2020)_^1_%SAN INI2A_(NO_^1_%JMP* INI4_)YES_^1INI2A SUB =N$230_'CHECK FOR 1777 ($2250)_^1_%SAZ INI2B_(YES_^1*_82 CARDS DELETED_^1_%SUB =N$F6€€0_'CHECK FOR 1713_#($31B0)_^1INI2B SAZ INI4_^1_%RAO* INPERR_^1_%RTJ* (MESAGE)_$LU 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_'CLEA€€R FIRST TIME FLAG_^1_%STA* FIRSTR_'CLEAR 1ST TIME FLAG, RANDOM GEN._^1_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$SECTION 1_)RANDOM DATA, FORMATTED RECORD TEST_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TEST_^1_%AND- O€€NEBIT+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* FIRSTR_'RANDOM GENERATOR INITIALIZED ?_^1_%SAN T1T5B_(YES_^1_%RAO* FIRSTR_'NO, SET FLAG_^1_%LDA =N$232F_^1_%STA GNATOR_'INITIALIZE RANDOM NUMBER GENERATOR_^1*_82 CARDS DELETED_^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_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_'GO COMMON I/O, CHECK_^1FIRSTR NUM 0_,1ST TIME FLAG FOR RANDOM GENERATOR_^1FWRITE ADC 6*FRC+FX+4*FRP+4*FCP FORMAT WRITE RE€€QUEST_^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 NUMB€€ER IN ERROR MESSAGE_^1_%LDQ* 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*_$SECT€€ION 3_)USER INPUT PATTERN TEST_^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_'GET SPECIAL PATTERN_^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_^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_%SQP 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- (ADIS€€P)_^1*_]_^1_%BZS ZERBUF(5)_^1CMPL2 SQP 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* ALTERR_^1_%LDA- ESTAT2,Q_$GET HARDWARE STATUS FROM PHYSTB_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%EOR- ONEBIT+10_#COMPLEMENT POWER ON 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* CKF€€NC2_^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 TO LEVEL 1 STATUS TABLE_^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_^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_%S€€TQ* 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 IN€€HIBITED_^1_%JMP* EST6_)YES - DONT 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-MSG3€€4B_^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_%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 CKFL€€G2-*-1_^1_%RAO* CKFLAG_^1_%LDA REPEAT_'CONVERT PASSES COMPLETED TO ASCII_^1_%INA 1_^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 5_,INTERNAL REJECT_^1_%NUM 6_,EXTERNAL REJECT_^1_%NUM €€30_+VALIDATION ERROR_^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 $8100_(EXISTENCE CODE_^1_%NUM $8400_(POWER FAILURE_^1_%NUM $8800_(TAPE SUPPLY LOW_^1_%NUM $FFFF_(END OF TABLE_^1************************************************************************_^1*_]_'*_^1*_7ERROR MESSAGE POINT€€ERS_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_%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 MSG15B-MES8_!VALIDATION ERROR_^1_%ADC MSG15E-MSG15B_^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 MSG30B-MES8_!EXISTENCE CODE_^1_%ADC MSG30E-MSG30B_^1_%ADC MSG21B-MES8_!POWER FAILURE_^1_%ADC MSG21E-MSG21B_^1_%ADC MSG22B-MES8_!TAPE SUPPLY LOW_^1_%ADC MSG22E-MSG22B_^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 TAP€€E 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 $_^1_%EQU MSG9E(*)_^1MSG10B ALF 4,TIME OUT_^1_%EQU MSG10E(*)_^1MSG11B ALF 3,ALARM_^1_%EQU M€€SG11E(*)_^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 ERROR$_^1_%EQU MSG15E(*)_^1MSG18B ALF 4,NOT RDY_^1_%EQU MSG18E(*)_^1MSG19B ALF 2,BUSY_^1_%EQU MSG19E(*)_^1MSG21B ALF 7,POWER FAILURE_^1_%EQU MSG21E(*)_^1MSG22B ALF 8,TAPE SUPPLY LOW_^1_%EQ€ΖU MSG22E(*)_^1MSG30B ALF 7,EXISTENCE CODE_^1_%EQU MSG30E(*)_^1MSG34B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF 2,RECS_^1ERRPAS NUM 0,0,$2020_^1_%EQU MSG34E(*)_^1_%EQU END(*)_^1*_]_^1_%END 0_^__ ΖPSCMPTR CSY/ A85 P€1_%NAM SCMPTR_'DECK-ID A85 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1777 PAPER TAPE READER TEST_^1*_$1721/1722 PAPER TAPE READER TEST_^1*_$1713 TELETYPEWRITER PAPER TAPE READER TEST_^1*_$PERIPHERAL DRIVERS 1.0A_^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* SCMPTR IS A DIAGNOSTIC EXERCISER FOR THE 1777 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 READER._^1* BEFORE TEST EXECUTION 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 IN ORDER TO DO ANOTHER_^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_!READ SYNC CHECK TEST_^1* INPUT DATA FOR EACH TEST IS CONTAINED€€ ON A PAPER TAPE PRODUCED BY TH+_^1* CORRESPONDING TEST IN OLPTP, THE EXERCISER FOR THE PAPER TAPE PUNCH._^1* FOR EACH RUN OF EACH TEST, A 60 WORD BUFFER IS LOADED 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 TEST 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)_"ST€€ART 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' 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_%EQU TSTPTR(*)_#ENTRY POINT FOR RCOS_^1_%ENT TS€€TPTR_^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,TSTPTR_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $105_)UPDATE_"NEW P€€SR 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$3FF0_^1_%SUB =N$2010_%CHECK FOR 1€€1721/1722_^1_%SAN INI2A_(NO_^1_%JMP* INI4_)YES_^1INI2A SUB =N$220_'CHECK FOR 1777 ($2230)_^1_%SAZ INI2B_(YES_^1_%SUB =N$F90_'CHK FOR 1713_"($31C0)_^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 1ST TIME FLAG, SPEC. PATTERN_^1_%STA* FIRSTR_'CLEAR 1ST TIME FLAG, RANDOM GEN._^1_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_*SECTION 1_#RANDO€€M DATA, FORMATTED RECORD TEST_^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 TYPE OF I/O_^1_%LDA* FIRSTR_'RANDOM GENERATOR INITIALI€€ZED ?_^1_%SAN T1T5B_(YES_^1_%RAO* FIRSTR_'NO, SET FLAG_^1_%LDA =N$232F_^1_%STA GNATOR_'INITIALIZE RANDOM NUMBER GENERATOR_^1T1T5B CLR A_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_'GO TO COMMON I/O AND CHECK_^1FIRSTR NUM 0_,1ST TIME FLAG FOR RANDOM GENERATOR_^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_^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)_$G€€ET SPECIAL PATTERN_^1_%RTJ (GETFLD)_^1_%SQP FLDOK2_^1_%JMP ENDMSG_'RUBOUT ENTERED--END TEST_^1FLDOK2 STA* SPCPAT_^1NOTFST 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_^1GOC€€HK RTJ ENDCK_(3 DONE 4, DO ENDCK_^1_%JMP* BEGIN_(NOT DONE, CYCLE ALL TESTS_^1FIRSTT NUM 0_,FIRST TIME FLAG, SPECIAL PATTERN_^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_^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 40_+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_^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_)REMOVE OFFSET ON_^1_%€€STA* BUFADC_(REQUEST BUFFER ADDRESS_^1_%SQP CMPL1B_'CHECK IF DRIVER DETECTED AN ERROR_^1_%RTJ* ERRCHK_^1CMPL1B RTJ* ALIGN_(MAKE SURE FULL WORDS OF DATA_^1_%RTJ CKDATA_'VERIFY DATA_^1_%JMP* (DOIO)_^1SPACE RTJ- (AMONI)_%READ LEADER UNTIL 1ST DATA_^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*_]_^1*_*1 CARD DELETED_^1CMPL2 SQP CMPL2B-*-1_^1_%RTJ* ERRCHK_^1CMPL2B LDA* BUFFER_^1_%SAN CMPL2D_'DATA YET_^1_%JMP* SPACE_(NO TRY AGAIN_^1CMPL2D LDA* SET2_^1_%STA* BUFADC_^1_%JMP* DOIOC_(READ REST OF DATA_^1*_]_^1SET1_!ADC BUFFER-REF1_^1SET2_!ADC BUFFER+1-REF1_^1*_]_^1*_$THE FOLLOWING ROUTINE REALIGNS THE BUFFER SO THAT THE_^1*_$FIRST WORD IS A FULL WORD AND ALL SUCCEDING €€WORDS ARE_^1*_$FULL WORDS. ON CERTAIN READS THE DRIVER DOESN'T_^1*_$IGNORE THE LEADER SO THE TEST BYPASSES THE LEADER,_^1*_$BUT THE DRIVER READS TWO FRAMES FOR EVERY WORD AND_^1*_$ITS POSSIBLE TO HAVE HALF A WORD OF LEADER AND HALF A_^1*_$WORD OF DATA, INSTEAD OF A FULL WORD OF DATA._^1*_]_^1*_]_^1ALIGN NOP 0_^1_%LDA* BUFFER_'CHECK FIRST WORD, 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_%LDA- 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_%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_%EOR- ONEBIT+10_#COMPLEMENT POWER ON 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 TO LEVEL 1 STATUS TABLE_^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 N€€UM 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 T€€ABLE_^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_^1EST4_!RTJ* CKFLAG_'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_^1€€BITPTR NUM 0_^1STATUS NUM 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 T€€O ASCII_^1_%INA 1_^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 5_,INTERNAL REJECT_^1_%NUM 6_,EXTERNAL REJECT_^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 $8040_(LOST DATA_^1_%NUM $8100_(EXISTENCE CODE_^1_%NUM $8200_(MOTION FAILURE_^1_%NUM €€ $8400_(POWER FAILURE_^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_%ADC MSG1€€2B-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 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 MSG20B-MES8_!LOST DATA_^1_%€€ADC MSG20E-MSG20B_^1_%ADC MSG30B-MES8_!EXISTENCE CODE_^1_%ADC MSG30E-MSG30B_^1_%ADC MSG21B-MES8_!MOTION FAILURE_^1_%ADC MSG21E-MSG21B_^1_%ADC MSG22B-MES8_!POWER FAILURE_^1_%ADC MSG22E-MSG22B_^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_^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* RANDO€€M_'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 PATTERN 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 FRAME 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 LDA* 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* GRPIND_'CALCULATE BUFFER INDEX_^1_%STA- I_,EACH THREE DATA WORDS ARE IN €€FOUR COLUMNS_^1_%STA* ISAVE_^1_%LDA BUFFER,I_$GET COLUMN N+1 WHERE N IS FROM 0 TO 19_^1_%AND- NZERO+8_^1_%ALS 6_^1_%STA* IS_^1_%LDA* WORD1_^1_%AND- NZERO+8_^1_%ALS 6_^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_%S€€TA* 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_%JMP* (CHKERR)_^1*_]_^1DATERR 0_"0_,FORM DATA ERROR MESSAGE_^1_%RAO* CMP1_^1_%LDA* CMP1_^1_%INA -4_^1_%SAM DATER1_^1_%JMP* DAT1_^1DATER1 LDA* GRPIND_^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_^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*_81 CARD DELETED_^1_%RTJ (RHXASC)_^1_%ADC (EXPCTD-*)_^1_%LDA EXPCT€€D+1_^1_%AND- NZERO+8_^1_%EOR- ONEBIT+5_^1_%STA EXPCTD+1_^1_%RTJ CKFLAG_'CHECK IF ERROR MESSAGES INHIBITED_^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_^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 RU€€NS 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 2_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC €€ 2_^1MSG1B ALF 14,BEGIN PAPER TAPE READER TEST_^1_%NUM $D00_^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 $_^1_%EQU MSG9E(*)_^1MSG10B ALF 4,TIME OUT_^1_%EQU MSG10€€E(*)_^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(*)_^1MSG20B ALF 5,LOST DATA_^1_%EQU MSG20E(*)_^1MSG21€€B ALF 7,MOTION FAILURE_^1_%EQU MSG21E(*)_^1MSG22B ALF 7,POWER FAILURE_^1_%EQU MSG22E(*)_^1MSG30B ALF 7,EXISTENCE CODE_^1_%EQU MSG30E(*)_^1MSG34B ALF $, SEC $_^1SNUM_!NUM 0_^1_%ALF 2,RECS_^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*_]_^1_%END 0_^__ &PSCMTTY CSY/ A86 P€1_%NAM SCMTTY_'DECK-ID A86 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_*ON-LINE TELETYPEWRITER TEST_^1*_$PERIPHERAL DRIVERS 1.0A_^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*_$EXEC€€UTED, 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 ON€€EBIT($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_%N€€UM $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_%SA€€N 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_,€€STRIP 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_,MESSA€€GE 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_%€€ADC 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 N€€UM 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_%€€LDA* 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_+CHARA€€CTER_^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_%AL€€F $, 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_]_^__ PSCM405 CSY/ A87 P€1_%NAM SCM405_'DECK-ID A87 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$1726/405 CARD READER TEST_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^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 3_^1*_$SCM405 IS A DIAGNOSTIC EXERCISER FOR THE 1726/405 CARD READER._^1*_$IT OPERATES UNDER THE CONTROL OF THE DIAGNOSTIC SUPERVISOR_^1*_$SCMEXC AND USES THE MSOS DRIVERS FOR ALL COMMUNICATION_^1*_$WITH THE CARD READER. BEFORE TEST EXECUTIO€€N IS STARTED, THE USER_^1*_$IS REQUESTED TO INPUT THE TEST PARAMETERS -- LOGICAL UNIT, TEST_^1*_$SECTION TO BE EXECUTED AND THE NUMBER OF TIMES TO EXECUTE THE_^1*_$TEST SECTION. THE LOGICAL UNIT IS CHECKED FOR VALIDITY AND IF_^1*_$INVALID, THE USER IS REQUESTED TO RE-ENTER THE TEST PARAMETERS._^1*_$SCM405 IS DIVIDED INTO FOUR SECTIONS (TESTS) AS FOLLOWS_^1*_*SECTION 1_#RANDOM DATA,€€ FORMATTED RECORD TEST_^1*_*SECTION 2_#$AAA, $555 PATTERN TEST_^1*_*SECTION 3_#USER INPUT PATTERN TEST_^1*_*SECTION 4_#READ SYNC CHECK TEST_^1*_$AT THE COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR_^1*_$DRIVER DETECTED ERRORS. IF THE DRIVER DETECTED AN ERROR (I.E._^1*_$- Q - NEGATIVE AT I/O COMPLETION) THE TEST WILL USE THE ERROR_^1*_$CODE IN THE PHYSICAL DEVICE TABLE, WORD 2€€9, TO DETERMINE THE_^1*_$ERROR. AT THE END OF EACH TEST SEQUENCE A PASS COUNTER IS_^1*_$UPDATED AND COMPARED AGAINST THE NUMBER OF TIMES REQUESTED BY_^1*_$THE USER. IF EQUAL, THE TEST IS TERMINATED. THE STOP FLAG IS_^1*_$ALSO CHECKED AND IF SET, THE TEST IS TERMINATED. IF $8000 IS_^1*_$ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE WILL_^1*_$BE EXECUTED INDEFINITELY._^1_%S€€PC 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 ERCODE(25)_"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 TEN($46)_$LOCATION CONTAINING TEN_^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_%EQU TST405(*)_#ENTRY POINT FOR RCOS_^1_%ENT TST405_^1*_*2 CARDS DELETED_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATIONS REGI€€ONS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF $,TST405$_#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_^1ROCDE€€C 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--ABANDON TEST_^1FLDOK1 INQ -1_^1_%STA LU,Q_^1_%INQ -2_^1_%SQZ INI2-*-1_^1_%JMP* INI1_^1INI2_!LDA CARDS_(CONVERT NUMBER_^1_%SAM INI2A_5(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%OF CARDS_^1INI2A STA CARDS_^1_%LDA LU_€€^1_%RTJ* (RDECHX)_$CONVERT LOGICAL UNIT TO HEX_^1_%STA RPLU_^1_%TRA Q_^1_%LDQ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_$CHECK IF LOGICAL UNIT LEGAL_^1_%AND =N$3FF0_^1_%SUB =N$1970_%1726/405_^1_%SAZ INI2B_^1_%SUB =N$120_'1726/1706/405_^1INI2B SAZ INI4_^1_%RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG2B-ME€€S2_^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 DATCNT_^1_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 0_^1SVLOG1 NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_+SE€€CTION 1_!RANDOM DATA, FORMATTED RECORD TEST_+*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TEST_^1_%AND- ONEBIT+1_$CHECK IF TEST 1 REQUESTED_^1_%SAN T1T5A-*-1_^1_%JMP* T2T6CK_^1T1T5A LDQ =A1_^1_%STQ SNUM_)SET TEST NUMBER IN ERROR MESSAGE_^1_%LDQ* FREAD_^1_%STQ* REF1_)SET TYPE OF I/O_^1_%ENA 57_^1_%STA* NUMWDS_'SE€€T BUFFER LENGTH_^1_%LDA =XBUFFR1-REF1_^1_%STA* LOC_*SET BUFFER LOCATION_^1_%LDA =N$232F_^1_%STA GNATOR_'INITIALIZE RANDOM NUMBER GENERATOR_^1_%CLR A_^1_%STA* CKTYP_(SET TYPE OF DATA COMPARE_^1T1T5B RTJ* DOIO_)DO TEST I/O_^1_%RTJ ENDCK_(CHECK IF TEST COMPLETE_^1_%JMP* T1T5B_^1FREAD ADC 4*FRC+FX+4*FRP+4*FCP FORMAT READ REQUEST_^1_%SPC 2_^1***********************************€€*************************************_^1*_]_'*_^1*_0SECTION 2_!$AAA, $555 PATERN TEST_2*_^1*_]_'*_^1***********************************************************************_^1_%SPC 2_^1T2T6CK LDA* TEST_^1_%AND- ONEBIT+2_$CHECK IF SECTION 2 REQUIRED_^1_%SAN T2T6A-*-1_^1_%JMP* T3T7CK_^1T2T6A LDQ =A2_^1_%STQ SNUM_)SET TEST NUMBER IN ERROR MESSAGE_^1_%LDQ* READ_^1_%STQ* REF1_)SET T€€YPE OF I/O_^1_%ENA 1_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_^1PATTRN NUM $AAA5_^1_%NUM $55AA_^1_%NUM $A555_^1LU_#NUM 0_^1TEST_!NUM 0_^1CARDS NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0SECTION 3_!USER INPUT PATTERN TEST_1*_^1*_]_'*_^1************************************************************************_^1_%SPC €€ 2_^1T3T7CK LDA* TEST_^1_%AND- ONEBIT+3_$CHECK IF TEST 3 REQUESTED_^1_%SAN T3T7A-*-1_^1_%JMP* T4T8CK_^1T3T7A LDQ =A3_^1_%STQ SNUM_)SET TEST NUMBER IN ERROR MESSAGE_^1_%LDQ* READ_^1_%STQ* REF1_)SET TYPE OF I/O_^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--ABANDON TEST_^1FLDOK2 STA* SPCPAT_^1_%ENA 2_,TYPE OF DATA COMPARE_^1FT2468 STA* CKTYP_(SET TYPE OF DATA COMPARE_^1_%ENA 60_^1_%STA* NUMWDS_'SET BUFFER LENGTH_^1_%LDA =XBUFFER-REF1_^1_%STA* LOC_^1T3T7E RTJ* DOIO_)DO TEST I/O_^1_%RTJ ENDCK_(CHECK IF TEST COMPLETE_^1_%JMP* T3T7E_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP READ REQUEST_^1SPC€€PAT NUM 0_^1CKTYP NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2SECTION 4_!READ SYNC CHECK TEST_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4T8CK LDA TEST_^1_%AND- ONEBIT+4_$CHECK IF TEST 4 REQUESTED_^1_%SAN T4T8A-*-1_^1_%JMP ENDMSG_^1T4T8A LDQ =A4_^1_%STQ SN€€UM_)SET TEST 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 59_+CLEAR I/O BUFFER_^1_%CLR A_^1DOIOA STA* BUFFER,Q_^1_%SQZ DOIOB-*-1_^1_%INQ -1_^1_%JMP* DOIOA_^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_^1NUMWDS NUM 57_^1LOC_"ADC BUFFER-REF1_^1_%JMP- (ADISP)_^1*_]_^1*_$DATA I/O BUF€€FER_^1*_]_^1BUFFER BZS BUFFER(2)_^1BUFFR1 BZS BUFFR1(58)_^1*_]_^1CMPL1 SQP CMPL1A-*-1_"CHECK IF DRIVER DETECTED AN ERROR_^1_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAN CMPL1B_)PRINTOUT_^1_%RTJ* ERRCHK_^1CMPL1A RTJ CKDATA_'VERIFY DATA_^1CMPL1B JMP* (DOIO)_^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 LEVEL 1 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_%LDQ HBTA_^1_%€€LDA* LEV1ST_^1_%RTJ* ESTAT_(CHECK LEVEL 1 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_^1LEV1ST NUM 0_^1FATLER NUM 0_^1HBTA_!ADC NBITTB-BITTAB_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2HARDWARE STAUS CHECKIN€€G 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_!RTJ* CKFLAG_'CHECK IF ERROR MESSAGES INHIBITED_^1_%JMP* EST6_)YES_^1_%LDA* BITTAB,Q_$CHECK IF FATAL ERROR_^1_%SAP EST5-*-1_^1_%RAO* FATLER_'YES, SET FLAG_^1EST5_!QLS 1_,MUI BY 2_^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 MESSA€€GE_^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_%RAO* ERRCTR_'INCREMENT ERROR COUNTER_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ CKFLGA_^1_%JMP ENDMSG_€€^1CKFLGA RAO* CKFLAG_^1_%LDA REPEAT_'CONVERT PASSES COMPLETED TO ASCII_^1_%INA 1_^1_%STQ* QSAVE_^1_%RTJ CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1_%LDQ* QSAVE_^1_%JMP* (CKFLAG)_^1ERRCTR NUM 0_^1QSAVE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2STATUS MASKS FOR ERROR CHECKING_3*_^1*_]_'*_^1*********************€€***************************************************_^1_%SPC 2_^1*_4***_!DRIVER ERROR STATUS_!***_^1_%SPC 2_^1BITTAB NUM $8000_(TIME OUT_^1_%NUM $8002_(ALARM_^1_%NUM 4_,CKSUM ERROR_^1_%NUM $8005_(INTERNAL REJECT_^1_%NUM $8006_(EXTERNAL REJECT_^1_%NUM $8007_(PRE-READ OR COMPARE ERROR_^1_%NUM 8_,ILLEGAL ASCII_^1_%NUM 9_,SEQ ERROR_^1_%NUM 10_+NON-NEGATIVE RECORD LENGTH_^1_%N€€UM $8025_(1706 ADDRESS ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1*_6***_!LEVEL 1 STATUS_!***_^1_%SPC 2_^1NBITTB NUM $8001_(NOT READY_^1_%NUM $8002_(BUSY_^1_%NUM $8100_(PRE-READ ERROR_^1_%NUM $8040_(FEED FAILURE_^1_%NUM $9000_(STACKER FULL/JAM_^1_%NUM $A000_(INPUT HOPPER EMPTY_^1_%NUM $FFFF_(END OF TABLE_^1_%EJT_]_^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_%ADC MSG12B-MES8_!CKSUM 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 MSG15B-MES8_!PRE-READ ERROR_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG16B-MES8_!ILLEGAL ASCII_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES8_!SEQ ERROR_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG18B-MES8_!NON-NEGATIVE RECORD LENGTH_^1_%ADC MSG18E-MSG18B_^1_%ADC MSG21B-MES8_!1706 ADDRESS ERROR_^1_%ADC MSG21E-MSG21B_^1_%NUM 0_^1€€_%NUM 0_^1_%ADC MSG22B-MES8_!NOT READY_^1_%ADC MSG22E-MSG22B_^1_%ADC MSG23B-MES8_!BUSY_^1_%ADC MSG23E-MSG23B_^1_%ADC MSG15B-MES8_!PRE-READ ERROR_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG25B-MES8_!FEED FAIL_^1_%ADC MSG25E-MSG25B_^1_%ADC MSG26B-MES8_!STACKER FULL-JAM_^1_%ADC MSG26E-MSG26B_^1_%ADC MSG20B-MES8_!INPUT HOPPER EMPTY_^1_%ADC MSG20E-MSG20B_^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 DATCNT_^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* TS€€T8CK_^1TST5CK STA* WORD1_(RANDOM DATA CHECK ROUTINE_^1_%STA* WORD2_(DO NOT CHECK DATA WORDS 1 AND 2_^1_%RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD3_^1TST5A RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD1_^1_%RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD2_^1_%LDA* GRPIND_^1_%INA -19_^1_%SAZ TST5B_(CHECK IF DOING WORDS 58 THRU 60_^1_%RTJ€€* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD3_^1_%JMP* TST5A_^1TST5B STA* WORD3_(YES, DO NOT CHECK DATA WORD 60_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%JMP* (CKDATA)_^1TST6CK ENQ 2_,$AAA, $555 PATERN CHECK ROUTINE_^1TST6A LDA PATTRN,Q_$PICK UP ALTERNATING PATTERN_^1_%STA* WORD1,Q_^1_%SQZ TST6B-*-1_^1_%INQ -1_^1_%JMP* TST6A_^1TST6B RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%LDA€€* GRPIND_^1_%INA -20_*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_%STA* WORD2_^1_%STA* WORD3_^1_%JMP* TST6B_^1TST8CK STA* WORD2_(READ SYNC PATTERN CHECK ROUTINE_^1_%STA* WORD3_^1_%LDA- NZERO+4_%SET COLUMN 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 OF TEST PARAMETER SET COL 40 + 41_^1_%LDA* GRPIND_)FOR ALL ROWS PUNCHED_^1_%INA -9_^1_%SAN TST8C-*-1_^1_%LDA- LPMSK+12_$SET COLUMN 40_^1_%STA* WORD3_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%CLR A_^1_%JMP* TST8CK_'SET COLUMN 41_^1TST8C LDA* GRPIND_^1_%INA -19_^1_%SAZ TST8D€€_(CHECK IF DOING COLS 77 THRU 80_^1_%JMP* TST8B_^1TST8D LDA- LPMSK+12_$SET COL 80_^1_%STA* WORD3_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%JMP* (CKDATA)_^1WORD1 NUM 0_^1WORD2 NUM 0_^1WORD3 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*_$THIS CODE INSURES THAT NO ASTERISK IS PRESENT IN THE_€€^1*_$UPPER CHARACTER OF A DATA WORD IN AGREEMENT WITH DATA_^1*_$GENERATED WITH SCMCRD AFTER PSR 84*2535_^1_%TRA Q_^1_%ARS 8_^1_%INA -$2A_^1_%SAZ ASTRIK_^1_%TRQ A_^1_%JMP* (RANDOM)_^1ASTRIK TRQ A_^1_%ARS 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* GRPIND_'CALCUL€€ATE BUFFER INDEX_^1_%MUI- LPMSK+2_^1_%STA- I_,EACH THREE DATA WORDS ARE IN FOUR COLUMNS_^1_%STA* ISAVE_^1_%LDA BUFFER,I_$GET COLUMN N+1 WHERE N IS FROM 0 TO 19_^1_%AND- NZERO+4_^1_%ALS 12_^1_%STA* IS_^1_%LDA* WORD1_^1_%AND- NZERO+4_^1_%ALS 12_^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+4_^1_%LDQ BUFFER+1,I_^1_%LLS 8_^1_%STA* IS_^1_%LDA* WORD1_^1_%AND- LPMSK+4_^1_%LDQ* WORD2_^1_%LLS 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_!LDA BUFFER+1,I_"GET COLUMN N+3_^1_%AND- LPMSK+8_^1_%LDQ BUFFER+2,I_^1_%LLS 4_^1_%STA* IS_^1_%LDA* WORD2_^1_%AND- LPMSK+8_^1_%LDQ* WOR€€D3_^1_%LLS 4_^1_%STA* WAS_^1_%EOR* IS_^1_%SAZ CHK3-*-1_$CHECK COLUMN N+3_^1_%ENQ 3_^1_%RTJ* DATERR_'DATA ERROR COLUMN N+3_^1CHK3_!LDA BUFFER+2,I_"GET COLUMN N+4_^1_%AND- LPMSK+12_^1_%STA* IS_^1_%LDA* WORD3_^1_%AND- LPMSK+12_^1_%STA* WAS_^1_%EOR* IS_^1_%SAZ CHK4-*-1_$CHECK COLUMN N+4_^1_%ENQ 4_^1_%RTJ* DATERR_'DATA ERROR COLUMN N+4_^1CHK4_!RAO* GRPIND_'INCREMENT COLUMN GROUP N€€UMBER_^1_%JMP* (CHKERR)_^1*_]_^1DATERR 0_"0_,FORM DATA ERROR MESSAGE_^1_%LDA* GRPIND_'CALCULATE COLUMN NUMBER_^1_%ALS 2_,MUI BY 4_^1_%AAQ A_^1_%CLR Q_^1_%DVI- TEN_*CONVERT TO DECIMAL_^1_%ADD =A 0_^1_%STA COLNUM_^1_%QLS 8_^1_%ADQ =A0_^1_%STQ COLNUM+1_^1_%LDA* IS_+FORMAT DATA MESSAGE_^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 INHIBITED_^1_%JMP* DAT1_)YES_^1_%RAO* DATCNT_^1_%ENA -3_+IF DATA ERROR .GT. 3, DON'T PRINT IT_^1_%ADD* DATCNT_^1_%SAP DAT1_^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_^1DATCNT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_^1*_]_'*_^1******€€******************************************************************_^1_%SPC 2_^1ENDCK 0_"0_^1_%RAO* REPEAT_^1_%LDA CARDS_^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*_83 CARDS DELETED_^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-REG TO DECIMAL_^1_%TRA Q_^1_%SUB =N$270F_%CHECK IF VALUE.GT.9999_^1_%SAP GOWAY_(YES, LEAVE VALUE IN HEX FORM_^1_%TRQ A_,NO, CONVERT TO DECIMAL_^1_%RTJ (ROCDEC)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT€€)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN 405 CARD READER TEST$_^1_%NUM $D00_^1_%ALF *,DLU,SECTIONS,CARDS*_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF 1€€1,END CARD READER TEST,_^1RUNASC NUM 0,0_^1_%ALF $, CARDS $_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG3E(*)_^1MSG9B ALF $,SPECIAL PATTERN $_^1_%EQU MSG9E(*)_^1MSG10B ALF $,TIME OUT$_^1_%EQU MSG10E(*)_^1MSG11B ALF $,ALARM$_^1_%EQU MSG11E(*)_^1MSG12B ALF $,CKSUM ERROR$_^1_%EQU MSG12E(*)_^1MSG13B ALF $,INT REJECT$_^1_%EQU MSG13E(*)_^1MSG14B ALF $,EXT REJECT$_^1_%E€€QU MSG14E(*)_^1MSG15B ALF $,PRE-READ OR COMPARE ERROR$_^1_%EQU MSG15E(*)_^1MSG16B ALF $,ILLEGAL ASCII$_^1_%EQU MSG16E(*)_^1MSG17B ALF $,SEQ ERROR$_^1_%EQU MSG17E(*)_^1MSG18B ALF $,NON-NEG RCD LENGTH$_^1_%EQU MSG18E(*)_^1*_82 CARDS DELETED_^1MSG20B ALF $,INPUT HOPPER EMPTY$_^1_%EQU MSG20E(*)_^1MSG21B ALF $,1706 ADDRESS ERROR$_^1_%EQU MSG21E(*)_^1MSG22B ALF $,NOT READY$€€_^1_%EQU MSG22E(*)_^1MSG23B ALF $,BUSY$_^1_%EQU MSG23E(*)_^1MSG25B ALF $,FEED FAIL$_^1_%EQU MSG25E(*)_^1MSG26B ALF $,STACKER FULL/JAM$_^1_%EQU MSG26E(*)_^1MSG34B ALF $, SEC. $_^1SNUM_!NUM 0_^1_%ALF $,CARDS $_^1ERRPAS NUM 0,0,$2020_^1_%EQU MSG34E(*)_^1MSG35B ALF 7,DATA ERROR COL_^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*_]_^1_%END 0_^__ :PRCMP9K CSY/ A88 P€1_%NAM RCMP9K_'DECK-ID A88 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1_%SPC 2_^1***_"PURPOSE -_^1*_$-------_^1*_]_^1*_*RCMP9K IS THE RTOS INITIALIZER MAGNETIC TAPE OUTPUT DRIVER._^1*_*OUTPUT IS ON MAG TAPE UNIT 0 FOR 1 PASS, UNIT 1 FOR_^1*_*2 PASS, NON-€€BUFFER MODE OPERATION._^1*_]_^1*_]_^1****_!*****************************************************************_^1*_$ENTRY POINTS_^1*_$*****************************************************************_^1_%ENT HSMPDR_'9 TRACK OUTPUT TAPE DRIVER_^1_%ENT HSMADF_'SKIPS 1 FILE_^1_%ENT OUTAPE_^1_%ENT OUTAP1_^1*_$*****************************************************************_^1*_$EQUI€€VALENCES_^1*_$*****************************************************************_^1_%EQU DEVICE(7)_#STANDARD EQUIPMENT TAPE CODE_^1_%EQU SPECAL(210)_!ONE PASS/TWO PASS FLAG_^1****_]_^1_%SPC 2_^1***_]_^1*S2_"ENTRY -_^1*_$-----_^1*_]_^1*_((Q)= NUMBER OF WORDS TO BE OUTPUT_^1*_((A)= BUFFER ADDRESS_^1*_-+ FOR OUTPUT WITH NO FILEMARK_^1*_-- FOR OUTPUT WITH FILEMARK_^1*_]_^1*_]_^1*S2_"€€OUTPUT FORMAT -_^1*_$------ ------_^1*_]_^1*_(WORDS 1-N ARE DATA WORDS_^1*_(WORD N+1 HAS THE CHECKSUM WORD (EXCLUDING SIZE, DATA ONLY)_^1*_]_^1*_]_^1*S2_"SUBROUTINE HSMPDR -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_$HSMPDR IS THE 9 TRACK OUTPUT TAPE DRIVER._^1*_]_^1*_]_^1*_$FLOW -_^1*_$(1) SAVES THE REGISTERS_^1*_$(2) INITIALIZES MAGNETIC TAPE ACTION. FOR TAPE OUTPUT,€€ IT_^1*_)SELECTS UNIT 0 FOR 1 PASS OR 2 PASS WITH CARD INPUT;_^1*_)UNIT 1 FOR 2 PASS WITH TAPE INPUT._^1*_$(3) FOR EACH OUTPUT WORD, IT DECREMENTS SIZE COUNT BY 1,_^1*_)SAVES THE SIZE AND BUMPS THE LOCATION COUNTER BY 1._^1*_$(4) OUTPUTS THE FILE MARK, IF REQUESTED._^1*_$(5) RETURNS TO CALLER._^1_%SPC 2_^1HSMPDR NOP 0_,ENTRY_^1_%STA* TYPE_)SAVE FILE MARK FLAG_^1_%SAP SAVWD_^1_%T€€CA A_^1SAVWD STA* FSTWRD_'SAVE FIRST WORD ADD._^1_%STQ- 25,I_)SAVE NO. OF WORDS_^1_%STQ* SIZE_^1*_]_^1_%SPC 1_^1*_]_^1*_1INITIALIZE MAGNETIC TAPE ACTION_^1*_1CLEAR CONTROLLER + SELECT UNIT_^1_%LDQ* OUTAPE_^1_%INQ 1_^1_%SPC 2_^1*_$SELECT UNIT 0 FOR 1 PASS OR 2 PASS WITH CARD INPUT._^1*_$SELECT UNIT 1 FOR 2 PASS WITH TAPE INPUT._^1_%LDA- SPECAL,I_$GET FLAG_^1_%SAP 1_^1_%€€CLR A_,NEG. FLAG - 2 PASS WITH CARD INPUT (UNIT 0)_^1_%ALS 7_^1_%SPC 2_^1_%ADD* H044C_^1_%OUT -1_^1LOOP_!LDQ* OUTAPE_'WAIT TILL ITS READY AND NOT BUSY_^1_%INP -1_^1_%AND* H0003_^1_%INA -1_^1_%SAZ READY-*-1_^1_%JMP* LOOP_^1READY LDQ* OUTAPE_'START WRITE MOTION_^1_%LDA* H0080_^1_%OUT -1_^1_%LDQ* OUTAP1_^1REPOUT LDA* (FSTWRD)_^1OT_#OUT -1_+OUTPUT WORD_^1_%LDA* SIZE_)DECREMEN€€T SIZE COUNT BY 1_^1_%INA -1_^1_%SAZ OUTSUM_'SKIP WHEN DONE_^1_%STA* SIZE_)OTHERWISE SAVE SIZE AND BUMP LOC. COUNTER BY 1_^1_%RAO* FSTWRD_^1_%JMP* REPOUT_^1*_]_^1OUTSUM LDA* TYPE_)CHECK IF OUTPUTTING FILEMARK_^1_%SAP ALLDO_(NO IF POSITIVE_^1EOPCK LDQ* OUTAPE_'YES - WAIT FOR EOP_^1_%INP -1_^1_%AND =N$10_^1_%SAN ALOUT_(EOP SET, CONTINUE_^1_%JMP* EOPCK_(NOT SET, KEEP WAITING_^1€€ALOUT LDA* H0280_(OUTPUT FILE MARK_^1_%OUT -1_^1ALLDO JMP* (HSMPDR)_$RETURN TO CALLER_^1OUTAPE ADC DEVICE*128+1 BASIC W,E,S FUNCTION CODE_^1OUTAP1 ADC DEVICE*128_^1H044C NUM $044C_(SELECT UNIT 0,A/D MODE,800 BPI,BINARY_^1H0003 NUM 3_^1H0080 NUM $0080_(WRITE MOTION CODE_^1H00FF NUM $00FF_^1H0280 NUM $0280_(WRITE FILE MARK_^1SIZE_!NUM 0_,NO. OF WORDS_^1FSTWRD NUM 0_€€,FIRST WORD ADD._^1TYPE_!NUM 0_,FILE MARK FLAG_^1_%EJT_]_^1*_$THIS ROUTINE IS ENTERED TO ADVANCE 1 FILE MARK_^1*_$IF A NOT EQUAL TO 0 ON ENTRY, SKIP FILE ON OUTPUT UNIT_^1*_$DO THIS BY CHECKING FLAG 'SPECAL' IN INFO BLOCK._^1*_$IF A=0 ON ENTRY, SKIP ON INPUT TAPE UNIT (0)._^1_%SPC 2_^1HSMADF NOP 0_^1_%STA* STAT_)SAVE INPUT UNIT/ OUTPUT UNIT FLAG_^1_%ENA 1_^1_%LDQ* OUTAPE_'CLEAR€€ CONTROLLER_^1_%OUT -1_^1_%INQ 1_,SELECT UNIT_^1_%LDA* STAT_)CHECK FOR INPUT UNIT OR OUTPUT UNIT_^1_%SAZ 1_,INPUT UNIT (0)_^1_%LDA- SPECAL,I_$CHOOSE OUTPUT UNIT_^1*_8UNIT 0 FOR 1 PASS OR 2 PASS WITH CARD INPUT_^1*_8UNIT 1 FOR 2 PASS WITH TAPE INPUT_^1_%SAP 1_^1_%CLR A_,NEG. FLAG - 2 PASS WITH CARD INPUT (UNIT 0)_^1_%ALS 7_^1_%ADD* H044C_^1_%OUT -1_^1LOOP1 LDQ* OUTAPE_^1_%IN€€P -1_^1_%AND* H0003_(WAIT UNTIL READY AND NOT BUSY_^1_%INA -1_^1_%SAZ READY1_^1_%JMP* LOOP1_^1READY1 LDQ* OUTAPE_^1_%LDA =X$0100_%START READ FUNCTION_^1_%OUT -1_^1LOOP2 LDQ* OUTAPE_^1_%INP -1_+GET STATUS_^1_%STA* STAT_^1_%AND* H0003_(CHECK FOR READY AND NOT BUSY_^1_%INA -1_^1_%SAZ READY2_^1_%JMP* LOOP2_(NOT READY YET_^1READY2 LDA* STAT_)READY - CHECK FOR FILE MARK_^1_%AND €| =N$0800_^1_%SAN 1_,EOF FOUND_^1_%JMP* READY1_'EOF NOT FOUND - KEEP LOOKING_^1_%JMP* (HSMADF)_^1STAT_!NUM 0_^1_%END_]_^__|PRCMPDR CSY/ A89 P€1_%NAM RCMPDR_'DECK-ID A89 PERIPH. DRIVERS 1.0A SUMMARY-106_^1*_$PERIPHERAL DRIVERS 1.0A_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_]_^1***_"PURPOSE -_^1*_$-------_^1*_]_^1*_*RCMPDR IS THE RTOS INITIALIZER MAGNETIC TAPE OUTPUT_^1*_*DRIVER. OUTPUT IS ON MAG TAPE UNIT 0 FOR 1 PASS, UNIT 1_^1*_*FOR 2 PASS, NO€€N-BUFFER MODE OPERATION._^1*_]_^1*_]_^1****_!*****************************************************************_^1*_$ENTRY POINTS_^1*_$*****************************************************************_^1_%ENT HSMPDR_'7 TRACK OUTPUT TAPE DRIVER_^1_%ENT HSMADF_'ENTRY POINT TO SKIP 1 FILE_^1_%ENT OUTAPE_^1_%ENT OUTAP1_^1*_$***********************************************************€€******_^1*_$EQUIVALENCES_^1*_$*****************************************************************_^1_%EQU DEVICE(7)_#STANDARD EQUIPMENT TAPE CODE_^1_%EQU SPECAL(210)_!ONE PASS/TWO PASS FLAG_^1****_]_^1_%SPC 2_^1***_]_^1*S2_"ENTRY -_^1*_$-----_^1*_]_^1*_((Q)= NUMBER OF WORDS TO BE OUTPUT_^1*_((A)= BUFFER ADDRESS_^1*_-(+ FOR OUTPUT WITHOUT FILE MARK,_^1*_.- FOR OUTPUT WITH FILE MARK€€.)_^1*_]_^1*_]_^1*S2_"OUTPUT FORMAT -_^1*_$------ ------_^1*_]_^1*_$WORDS 1-N ARE DATA WORDS_^1*_]_^1*_$WORD N+1 IS THE CHECKSUM WORD (EXCLUDING SIZE, DATA ONLY)_^1*_]_^1*_$3-WORD GROUP. THESE 3 WORDS ARE DISASSEMBLED INTO THE FOLLOWING_^1*_$(6-BIT BYTE OUTPUT FORMAT):_^1*_((A) FIRST WORD ---- 6-6-4_^1*_((B) SECOND WORD --- 2-6-6-2_^1*_((C) THIRD WORD ---- 4-6-6_^1*_]_^1*_]_^1*€€S2_"SUBROUTINE HSMPDR -_^1*_$---------- ------_^1*_]_^1*_$PURPOSE -_^1*_]_^1*_$HSMPDR IS THE 7-TRACK OUTPUT TAPE DRIVER._^1*_]_^1*_]_^1*_$FLOW -_^1*_$(1) SAVES THE REGISTERS._^1*_$(2) INITIALIZES MAGNETIC TAPE ACTION. FOR TAPE OUTPUT, IT_^1*_)SELECTS UNIT 0 FOR 1 PASS OR 2 PASS WITH CARD INPUT;_^1*_)UNIT 1 FOR 2 PASS WITH TAPE INPUT._^1*_$(3) FOR EACH OUTPUT WORD, IT DECREMENTS SI€€ZE COUNT BY 1,_^1*_)SAVES THE SIZE AND BUMPS THE LOCATION COUNTER BY 1._^1*_]_^1*_)NOTE THAT THE OUTPUT FORMAT IS IN A 3-WORD GROUP._^1*_)THESE 3 WORDS ARE DISASSEMBLED INTO THE FOLLOWING_^1*_)(6-BIT BYTE OUTPUT FORMAT):_^1*_)(A) FIRST WORD ---- 6-6-4_^1*_)(B) SECOND WORD --- 2-6-6-2_^1*_)(C) THIRD WORD ---- 4-6-6_^1*_]_^1*_$(4) OUTPUTS FILE MARK, IF REQUESTED._^1*_$(5) RETURNS €€TO CALLER._^1*_]_^1_%SPC 2_^1HSMPDR NOP 0_,ENTRY_^1_%STA* TYPE_(SAVE REQUEST TYPE_^1_%SAP SAVWD_^1_%EQU RCMPDR(HSMPDR)_^1_%TCA A_^1SAVWD STA* FSTWRD_'SAVE FIRST WORD ADD._^1_%STQ- 25,I_)SAVE NO. OF WORDS_^1_%STQ* SIZE_)SAVE SIZE_^1_%SPC 1_^1_%LDQ* OUTAPE_^1_%INQ 1_^1_%SPC 2_^1*_$SELECT UNIT 0 FOR 1 PASS OR 2 PASS WITH CARD READER INPUT_^1*_$SELECT UNIT 1 FOR 2 PASS WITH T€€APE INPUT_^1_%LDA- SPECAL,I_$GET FLAG_^1_%SAP 1_^1_%CLR A_,NEGATIVE FLAG MEANS 2 PASS W/ CARD INPUT_^1_%ALS 7_^1_%SPC 2_^1_%ADD* H0405_^1_%OUT -1_^1LOOP_!LDQ* OUTAPE_'WAIT TILL ITS READY AND NOT BUSY_^1_%INP -1_^1_%AND* H0003_^1_%INA -1_^1_%SAZ READY-*-1_^1_%JMP* LOOP_^1READY LDQ* OUTAPE_'START WRITE MOTION_^1_%LDA* H0080_^1_%OUT -1_^1_%SPC 2_^1*_]_^1*_1O U T P U T_#D A €€T A_^1*_]_^1*_1WORD 1_^1_%LDQ* OUTAP1_'RESTORE W,E,S CODE_^1WORD1 LDA* (FSTWRD)_$GET DATA_^1_%STA* TEMP_^1_%RAO* FSTWRD_'BUMP COUNTER BY 1_^1WORD10 ALS 6_,BYTE 1 OF 1ST WORD_^1_%AND* H003F_^1_%OUT -1_^1_%LDA* TEMP_^1_%ARS 4_^1_%AND* H003F_(BYTE 2_^1_%OUT -1_^1_%ENA $F_^1_%AND* TEMP_)EXTRACT BYTE 3 AND SHIFT TO POSITION_^1_%ALS 2_^1_%RTJ* SIZCK_(TO CHECK IF DONE_^1*_1WORD 2€€_^1WORD2 ALS 2_,BYTE 1 OF 2ND WORD_^1_%AND* H0003_^1_%ADD* DAT_*+ LAST 4-BIT AND OUTPUT_^1_%NOP 0_^1_%OUT -1_^1_%LDA* TEMP_^1_%ALS 8_,BYTE 2_^1_%AND* H003F_^1_%OUT -1_^1_%LDA* TEMP_^1_%ARS 2_,EXTRACT BYTE 3_^1_%AND* H003F_^1_%OUT -1_^1_%ENA 3_^1_%AND* TEMP_)EXTRACT BYTE 4_^1_%ALS 4_,POSITION_^1_%RTJ* SIZCK_(CHECK IF DONE_^1*_1WORD 3_^1WORD3 ALS 4_,POSITION AND ASSEMBLE€€ OUTPUT DATA_^1_%AND* H000F_^1_%ADD* DAT_^1_%NOP 0_^1_%OUT -1_^1_%LDA* TEMP_^1_%ARS 6_,BYTE 2_^1_%AND* H003F_^1_%OUT -1_^1_%LDA* TEMP_)BYTE 3_^1_%AND* H003F_^1_%RTJ* SIZCK_(CHECK IF DONE_^1_%LDA* DAT_*OUTPUT BYTE 3 OF WORD 3_^1_%OUT -1_^1_%LDA* TEMP_^1_%JMP* WORD10_'TO REPEAT WORD 1 FORMAT_^1_%SPC 2_^1*_]_^1*_1CONSTANTS AND STORAGES_^1*_]_^1OUTAPE ADC DEVICE*128+1 BASIC W,E€€,S FUNCTION CODE_^1OUTAP1 ADC DEVICE*128_^1H0405 NUM $0405_(SELECT UNIT 0 AND BINARY MODE_^1H0080 NUM $0080_(WRITE MOTION CODE_^1H0280 NUM $0280_(WRITE FILE MARK_^1H000F NUM $000F_(MASK_^1H003F NUM $003F_^1H0003 NUM $0003_^1TEMP_!NUM 0_,TEMPERARY STORAGE_^1SIZE_!NUM 0_,NO. OF WORDS_^1FSTWRD NUM 0_,FIRST WORD ADD._^1DAT_"NUM 0_^1TYPE_!NUM 0_,REQUEST TYPE CODE_^1_%S€€PC 2_^1*_]_^1*_1CHECK IF DATA EXHAUSTED_^1*_]_^1SIZCK NOP 0_,ENTRY_^1_%STA* DAT_*SAVE LAST BYTE_^1_%LDA* SIZE_)GET NO. OF WORDS REMAINDED_^1_%INA -1_+DECREMENT BY 1 AND CHECK IF DONE_^1_%STA* SIZE_^1_%SAZ FINWD_(SKIP WHEN DONE_^1_%LDA* (FSTWRD)_$PICK UP NEXT WORD_^1_%STA* TEMP_^1_%RAO* FSTWRD_'BUMP COUNT BY 1_^1_%JMP* (SIZCK)_%RETURN TO CALLER_^1FINWD LDA* DAT_*OUTPUT LAST BY€€TE OF CHECK SUM WORD_^1_%OUT -1_^1_%LDA* TYPE_)CHECK IF FILE MARK IS NEEDED_^1_%SAP OUTX_)NO, SKIP_^1*_1OUTPUT FILE MARK_^1_%LDQ* OUTAPE_'WAIT FOR EOP_^1EOPCK INP -1_^1_%AND =N$10_(EOP BIT_^1_%SAN ALOUT_(EOP SET, SKIP_^1_%JMP* EOPCK_(REPEAT CHECK_^1ALOUT LDA* H0280_(ALL OUTPUT, WRITE FILE MARK_^1_%OUT -1_^1OUTX_!JMP* (RCMPDR)_^1_%EJT_]_^1***_]_^1*S2_"SUBROUTINE HSMADF -_^€€1*_$---------- ------_^1*_]_^1*_$GENERAL DESCRIPTION -_^1*_]_^1*_$THIS ROUTINE IS ENTERED TO ADVANCE 1 FILE MARK_^1*_$IF A IS NOT EQUAL TO 0 ON ENTRY, SKIP ON OUTPUT UNIT._^1*_$THIS IS DONE BY CHECKING FLAG 'SPECAL' IN THE INFO BLOCK._^1*_$IF A=0 ON ENTRY, SKIP ON INPUT UNIT (ALWAYS UNIT 0)_^1*_]_^1*_$THE OUTPUT UNIT IS_^1*_(UNIT 0_#FOR 1 PASS OR 2 PASS WITH CARD INPUT_^1*_(UNIT €€1_#FOR 2 PASS WITH TAPE INPUT._^1*_]_^1*_$HSMADF EXITS TO THE CALLING PROGRAM._^1*_]_^1_%SPC 2_^1HSMADF NOP 0_^1_%STA* STAT_)SAVE INPUT UNIT/OUTPUT UNIT FLAG_^1_%ENA 1_^1_%LDQ* OUTAPE_'CLEAR CONTROLLER_^1_%OUT -1_^1_%INQ 1_,SELECT UNIT_^1_%LDA* STAT_)CHECK FOR INPUT UNIT OR OUTPUT UNIT_^1_%SAZ 1_,INPUT UNIT (0)_^1_%LDA- SPECAL,I_$OUTPUT - UNIT 0 FOR 1 PASS OR 2 PASS FROM CARD€€_^1_%SAP 1_,READER. UNIT 1 FOR 2 PASS FROM TAPE._^1_%CLR A_^1_%ALS 7_^1_%ADD* H0405_^1_%OUT -1_^1LOOP1 LDQ* OUTAPE_^1_%INP -1_^1_%AND* H0003_(WAIT UNTIL READY AND NOT BUSY_^1_%INA -1_^1_%SAZ READY1_^1_%JMP* LOOP1_^1READY1 LDQ* OUTAPE_^1_%LDA =X$0100_%START READ FUNCTION_^1_%OUT -1_^1LOOP2 LDQ* OUTAPE_^1_%INP -1_+GET STATUS_^1_%STA* STAT_^1_%AND* H0003_(CHECK FOR READY €όAND NOT BUSY_^1_%INA -1_^1_%SAZ READY2_^1_%JMP* LOOP2_(NOT READY YET_^1READY2 LDA* STAT_)READY - CHECK FOR FILE MARK_^1_%AND =N$0800_^1_%SAN 1_,EOF FOUND_^1_%JMP* READY1_'EOF NOT FOUND - KEEP LOOKING_^1_%JMP* (HSMADF)_^1STAT_!NUM 0_^1_%END_]_^__ ό END/